Logging, organized imports
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / fuel / SaintRobertFuel.java
1 package com.billkuker.rocketry.motorsim.fuel;\r
2 \r
3 import javax.measure.quantity.Pressure;\r
4 import javax.measure.quantity.Velocity;\r
5 import javax.measure.quantity.VolumetricDensity;\r
6 import javax.measure.unit.NonSI;\r
7 import javax.measure.unit.Unit;\r
8 \r
9 import org.jscience.physics.amount.Amount;\r
10 \r
11 import com.billkuker.rocketry.motorsim.Fuel;\r
12 import com.billkuker.rocketry.motorsim.RocketScience;\r
13 \r
14 public abstract class SaintRobertFuel implements Fuel {\r
15         \r
16         protected enum Type{\r
17                 SI(\r
18                                 javax.measure.unit.SI.MILLIMETER.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class),\r
19                                 javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL).asType(Pressure.class)),\r
20                 NONSI(\r
21                                 NonSI.INCH.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class),\r
22                                 RocketScience.PSI)\r
23                 ;\r
24                 \r
25                 private final Unit<Velocity> v;\r
26                 private final Unit<Pressure> p;\r
27                 \r
28                 Type( Unit<Velocity> v, Unit<Pressure> p){\r
29                         this.p = p;\r
30                         this.v = v;\r
31                 }\r
32         }\r
33         \r
34         private Type t = Type.SI;\r
35         \r
36         public SaintRobertFuel(Type t){\r
37                 this.t = t;\r
38         }\r
39         \r
40         protected Type getType(){\r
41                 return t;\r
42         }\r
43 \r
44         public Amount<Velocity> burnRate(Amount<Pressure> pressure) {\r
45 \r
46                 \r
47                 double p = pressure.doubleValue(getType().p);\r
48                 double a = burnrateCoefficient(pressure);\r
49                 double n = burnrateExponent(pressure);\r
50                 \r
51                 return burnrateConstant().plus(Amount.valueOf( a*Math.pow(p,n), getType().v ));\r
52         }\r
53         \r
54         protected abstract double burnrateCoefficient(Amount<Pressure> pressure);\r
55         \r
56         protected abstract double burnrateExponent(Amount<Pressure> pressure);\r
57         \r
58         protected Amount<Velocity> burnrateConstant(){\r
59                 return Amount.valueOf(0, Velocity.UNIT);\r
60         }\r
61 \r
62         public abstract Amount<VolumetricDensity> getIdealDensity();\r
63 \r
64         public String getName(){\r
65                 return this.getClass().getSimpleName();\r
66         }\r
67 }\r