(no commit message)
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / fuel / SaintRobertFuel.java
index be87e87811af62085a00ea99df84850efb942900..93c440c178ccd4b64b398f3fec4a831616338460 100644 (file)
@@ -4,22 +4,22 @@ import javax.measure.quantity.Pressure;
 import javax.measure.quantity.Velocity;\r
 import javax.measure.quantity.VolumetricDensity;\r
 import javax.measure.unit.NonSI;\r
-import javax.measure.unit.SI;\r
 import javax.measure.unit.Unit;\r
 \r
 import org.jscience.physics.amount.Amount;\r
 \r
 import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.RocketScience;\r
 \r
 public abstract class SaintRobertFuel implements Fuel {\r
        \r
-       protected enum Type{\r
-               Si(\r
-                               SI.MILLIMETER.divide(SI.SECOND).asType(Velocity.class),\r
-                               SI.MEGA(SI.PASCAL).asType(Pressure.class)),\r
-               English(\r
-                               NonSI.INCH.divide(SI.SECOND).asType(Velocity.class),\r
-                               NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)).asType(Pressure.class))\r
+       public enum Type{\r
+               SI(\r
+                               javax.measure.unit.SI.MILLIMETER.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class),\r
+                               javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL).asType(Pressure.class)),\r
+               NONSI(\r
+                               NonSI.INCH.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class),\r
+                               RocketScience.PSI)\r
                ;\r
                \r
                private final Unit<Velocity> v;\r
@@ -31,20 +31,30 @@ public abstract class SaintRobertFuel implements Fuel {
                }\r
        }\r
        \r
-       private Type t = Type.Si;\r
+       private Type t = Type.SI;\r
        \r
        public SaintRobertFuel(Type t){\r
+               if ( t == null )\r
+                       throw new IllegalArgumentException("Type must be non-null");\r
+               this.t = t;\r
+       }\r
+       \r
+       public Type getType(){\r
+               return t;\r
+       }\r
+       \r
+       protected void setType(final Type t){\r
                this.t = t;\r
        }\r
 \r
        public Amount<Velocity> burnRate(Amount<Pressure> pressure) {\r
 \r
                \r
-               double p = pressure.doubleValue(t.p);\r
+               double p = pressure.doubleValue(getType().p);\r
                double a = burnrateCoefficient(pressure);\r
                double n = burnrateExponent(pressure);\r
                \r
-               return burnrateConstant().plus(Amount.valueOf( a*Math.pow(p,n), t.v ));\r
+               return burnrateConstant().plus(Amount.valueOf( a*Math.pow(p,n), getType().v ));\r
        }\r
        \r
        protected abstract double burnrateCoefficient(Amount<Pressure> pressure);\r
@@ -55,6 +65,13 @@ public abstract class SaintRobertFuel implements Fuel {
                return Amount.valueOf(0, Velocity.UNIT);\r
        }\r
 \r
-       public abstract Amount<VolumetricDensity> idealDensity();\r
+       public abstract Amount<VolumetricDensity> getIdealDensity();\r
 \r
+       public String getName(){\r
+               return this.getClass().getSimpleName();\r
+       }\r
+       \r
+       public String toString(){\r
+               return getName();\r
+       }\r
 }\r