Renamed some things, added some new fuels
authorBill Kuker <bkuker@billkuker.com>
Fri, 17 Apr 2009 20:34:10 +0000 (20:34 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 17 Apr 2009 20:34:10 +0000 (20:34 +0000)
src/com/billkuker/rocketry/motorsim/RocketScience.java
src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/fuel/KNDX.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/fuel/KNER.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/fuel/KNSB.java
src/com/billkuker/rocketry/motorsim/fuel/KNSU.java
src/com/billkuker/rocketry/motorsim/fuel/SaintRobertFuel.java
src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java

index aed135bfd3b056f9a5349bac5c6d31b597f8dc9e..a936bf0527cdadc500503d80980d128dc26f8718 100644 (file)
@@ -35,14 +35,14 @@ public class RocketScience {
                                javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL),\r
                                NEWTON_SECOND\r
                }),\r
-               NonSI(new Unit[]{\r
+               NONSI(new Unit[]{\r
                                javax.measure.unit.NonSI.INCH,\r
                                javax.measure.unit.NonSI.POUND_FORCE,\r
                                PSI,\r
                                NEWTON_SECOND\r
                });\r
                \r
-               public static UnitPreference preference = NonSI;\r
+               public static UnitPreference preference = NONSI;\r
                \r
                protected Set<Unit<?>> units = new HashSet<Unit<?>>();\r
                \r
diff --git a/src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java b/src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java
new file mode 100644 (file)
index 0000000..f5a7ed1
--- /dev/null
@@ -0,0 +1,127 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.Temperature;\r
+import javax.measure.quantity.VolumetricDensity;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight;\r
+import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;\r
+\r
+public class EditableFuel extends SaintRobertFuel {\r
+       private double a = 0.0665;\r
+       private double n = 0.319;\r
+       private double combustionEfficiency = .97;\r
+       private double densityRatio = .96;\r
+       private Amount<VolumetricDensity> idealDensity = Amount.valueOf(1889, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT);\r
+       CombustionProduct combustionProduct = new EditableCombustionProduct();\r
+       private SaintRobertFuel.Type type = SaintRobertFuel.Type.NONSI;\r
+       \r
+       public static class EditableCombustionProduct implements Fuel.CombustionProduct{\r
+               private Amount<MolarWeight> effectiveMolarWeight = Amount.valueOf("41.98 kg/kmol").to(MolarWeight.UNIT);;\r
+               private Amount<Temperature> idealCombustionTemperature = Amount.valueOf(1720, SI.KELVIN);;\r
+               private double ratioOfSpecificHeats = 1.133;\r
+               private double ratioOfSpecificHeats2Phase = 1.044;\r
+               public Amount<MolarWeight> getEffectiveMolarWeight() {\r
+                       return effectiveMolarWeight;\r
+               }\r
+               public void setEffectiveMolarWeight(Amount<MolarWeight> effectiveMolarWeight) {\r
+                       this.effectiveMolarWeight = effectiveMolarWeight;\r
+               }\r
+               public Amount<Temperature> getIdealCombustionTemperature() {\r
+                       return idealCombustionTemperature;\r
+               }\r
+               public void setIdealCombustionTemperature(\r
+                               Amount<Temperature> idealCombustionTemperature) {\r
+                       this.idealCombustionTemperature = idealCombustionTemperature;\r
+               }\r
+               public double getRatioOfSpecificHeats() {\r
+                       return ratioOfSpecificHeats;\r
+               }\r
+               public void setRatioOfSpecificHeats(double ratioOfSpecificHeats) {\r
+                       this.ratioOfSpecificHeats = ratioOfSpecificHeats;\r
+               }\r
+               public double getRatioOfSpecificHeats2Phase() {\r
+                       return ratioOfSpecificHeats2Phase;\r
+               }\r
+               public void setRatioOfSpecificHeats2Phase(double ratioOfSpecificHeats2Phase) {\r
+                       this.ratioOfSpecificHeats2Phase = ratioOfSpecificHeats2Phase;\r
+               }\r
+       }\r
+       \r
+       public EditableFuel() {\r
+               super(SaintRobertFuel.Type.NONSI);\r
+       }\r
+\r
+       @Override\r
+       protected double burnrateCoefficient(Amount<Pressure> pressure) {\r
+               return a;\r
+       }\r
+\r
+       @Override\r
+       protected double burnrateExponent(Amount<Pressure> pressure) {\r
+               return n;\r
+       }\r
+\r
+\r
+       public double getA() {\r
+               return a;\r
+       }\r
+\r
+       public void setA(double a) {\r
+               this.a = a;\r
+       }\r
+\r
+       public double getCombustionEfficiency() {\r
+               return combustionEfficiency;\r
+       }\r
+\r
+       public void setCombustionEfficiency(double combustionEfficiency) {\r
+               this.combustionEfficiency = combustionEfficiency;\r
+       }\r
+\r
+       public double getDensityRatio() {\r
+               return densityRatio;\r
+       }\r
+\r
+       public void setDensityRatio(double densityRatio) {\r
+               this.densityRatio = densityRatio;\r
+       }\r
+\r
+       public Amount<VolumetricDensity> getIdealDensity() {\r
+               return idealDensity;\r
+       }\r
+\r
+       public void setIdealDensity(Amount<VolumetricDensity> idealDensity) {\r
+               this.idealDensity = idealDensity;\r
+       }\r
+\r
+       public double getN() {\r
+               return n;\r
+       }\r
+\r
+       public void setN(double n) {\r
+               this.n = n;\r
+       }\r
+\r
+       public CombustionProduct getCombustionProduct() {\r
+               return combustionProduct;\r
+       }\r
+\r
+       public void setCombustionProduct(CombustionProduct combustionProduct) {\r
+               this.combustionProduct = combustionProduct;\r
+       }\r
+\r
+       public SaintRobertFuel.Type getType() {\r
+               return type;\r
+       }\r
+\r
+       public void setType(SaintRobertFuel.Type type) {\r
+               this.type = type;\r
+       }\r
+\r
+\r
+}\r
diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNDX.java b/src/com/billkuker/rocketry/motorsim/fuel/KNDX.java
new file mode 100644 (file)
index 0000000..cf1bc0a
--- /dev/null
@@ -0,0 +1,77 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.Temperature;\r
+import javax.measure.quantity.Velocity;\r
+import javax.measure.quantity.VolumetricDensity;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight;\r
+import com.billkuker.rocketry.motorsim.visual.Chart;\r
+\r
+public class KNDX extends PiecewiseSaintRobertFuel {\r
+\r
+       public KNDX() {\r
+               super(SaintRobertFuel.Type.SI);\r
+               add(Amount.valueOf(             .779, SI.MEGA(SI.PASCAL)),              8.875,  0.619);\r
+               add(Amount.valueOf(             2.572, SI.MEGA(SI.PASCAL)),     7.553,  -0.009);\r
+               add(Amount.valueOf(             5.93, SI.MEGA(SI.PASCAL)),              3.841,  0.688);\r
+               add(Amount.valueOf(             8.502, SI.MEGA(SI.PASCAL)),     17.20,  -0.148);\r
+               add(Amount.valueOf(             11.2, SI.MEGA(SI.PASCAL)),              4.775,  0.442);\r
+       }\r
+\r
+       @Override\r
+       public Amount<VolumetricDensity> getIdealDensity() {\r
+               return Amount.valueOf(1879, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT);\r
+       }\r
+\r
+       public CombustionProduct getCombustionProduct() {\r
+               return new CombustionProduct(){\r
+                       \r
+                       public Amount<Temperature> getIdealCombustionTemperature() {\r
+                               return Amount.valueOf(1710, SI.KELVIN);\r
+                       }\r
+               \r
+                       public Amount<MolarWeight> getEffectiveMolarWeight() {\r
+                               return Amount.valueOf("42.39 kg/kmol").to(MolarWeight.UNIT);\r
+                       }\r
+               \r
+                       public double getRatioOfSpecificHeats() {\r
+                               return 1.1308;\r
+                       }\r
+               \r
+                       public double getRatioOfSpecificHeats2Phase() {\r
+                               return 1.043;\r
+                       }\r
+               };\r
+       }\r
+       \r
+       public static void main( String args[]) throws Exception{\r
+               KNDX f = new KNDX();\r
+               \r
+               Chart<Pressure, Velocity> burnRate = new Chart<Pressure, Velocity>(\r
+                               SI.MEGA(SI.PASCAL),\r
+                               SI.METERS_PER_SECOND,\r
+                               f,\r
+                               "burnRate");\r
+               burnRate.setDomain(\r
+                               burnRate.new IntervalDomain(\r
+                                               Amount.valueOf(0, SI.MEGA(SI.PASCAL)),\r
+                                               Amount.valueOf(11, SI.MEGA(SI.PASCAL)),\r
+                                               20\r
+                                               ));\r
+               \r
+               burnRate.show();\r
+       }\r
+\r
+       public double getCombustionEfficiency() {\r
+               return .97;\r
+       }\r
+\r
+       public double getDensityRatio() {\r
+               return .96;\r
+       }\r
+\r
+}\r
diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNER.java b/src/com/billkuker/rocketry/motorsim/fuel/KNER.java
new file mode 100644 (file)
index 0000000..a80a485
--- /dev/null
@@ -0,0 +1,84 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.Temperature;\r
+import javax.measure.quantity.Velocity;\r
+import javax.measure.quantity.VolumetricDensity;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight;\r
+import com.billkuker.rocketry.motorsim.visual.Chart;\r
+\r
+public class KNER extends SaintRobertFuel {\r
+\r
+       public KNER() {\r
+               super(SaintRobertFuel.Type.NONSI);\r
+       }\r
+       \r
+\r
+       @Override\r
+       protected double burnrateCoefficient(Amount<Pressure> pressure) {\r
+               return .0037;\r
+       }\r
+\r
+       @Override\r
+       protected double burnrateExponent(Amount<Pressure> pressure) {\r
+               return .64;\r
+       }\r
+\r
+       @Override\r
+       public Amount<VolumetricDensity> getIdealDensity() {\r
+               return Amount.valueOf(1819.9, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT);\r
+       }\r
+\r
+       public CombustionProduct getCombustionProduct() {\r
+               return new CombustionProduct(){\r
+                       \r
+                       public Amount<Temperature> getIdealCombustionTemperature() {\r
+                               return Amount.valueOf(1600, SI.KELVIN);\r
+                       }\r
+               \r
+                       public Amount<MolarWeight> getEffectiveMolarWeight() {\r
+                               return Amount.valueOf("38.78 kg/kmol").to(MolarWeight.UNIT);\r
+                       }\r
+               \r
+                       public double getRatioOfSpecificHeats() {\r
+                               return 1.1391;\r
+                       }\r
+               \r
+                       public double getRatioOfSpecificHeats2Phase() {\r
+                               return 1.0426;\r
+                       }\r
+               };\r
+       }\r
+       \r
+       public static void main( String args[]) throws Exception{\r
+               KNER f = new KNER();\r
+               \r
+               Chart<Pressure, Velocity> burnRate = new Chart<Pressure, Velocity>(\r
+                               SI.MEGA(SI.PASCAL),\r
+                               SI.METERS_PER_SECOND,\r
+                               f,\r
+                               "burnRate");\r
+               burnRate.setDomain(\r
+                               burnRate.new IntervalDomain(\r
+                                               Amount.valueOf(0, SI.MEGA(SI.PASCAL)),\r
+                                               Amount.valueOf(11, SI.MEGA(SI.PASCAL)),\r
+                                               20\r
+                                               ));\r
+               \r
+               burnRate.show();\r
+       }\r
+\r
+       public double getCombustionEfficiency() {\r
+               return .97;\r
+       }\r
+\r
+       public double getDensityRatio() {\r
+               return .96;\r
+       }\r
+\r
+\r
+}\r
index d7c2b2192d14ed66e824b2ced497af3d42f5df1d..a1a323b02206a8af525d643a485390c340d1f796 100644 (file)
@@ -14,7 +14,7 @@ import com.billkuker.rocketry.motorsim.visual.Chart;
 public class KNSB extends PiecewiseSaintRobertFuel {\r
 \r
        public KNSB() {\r
-               super(SaintRobertFuel.Type.Si);\r
+               super(SaintRobertFuel.Type.SI);\r
                add(Amount.valueOf(             .807, SI.MEGA(SI.PASCAL)),      10.71,  0.625);\r
                add(Amount.valueOf(             1.5, SI.MEGA(SI.PASCAL)),       8.763, -0.314);\r
                add(Amount.valueOf(             3.79, SI.MEGA(SI.PASCAL)),      7.852,  -0.013);\r
index c99e8d4b583641f05ea1137c12a89ea55b64c4c3..cc7b3c4e8a9b0616371093e9555a7a1f1895726f 100644 (file)
@@ -12,7 +12,7 @@ import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight;
 public class KNSU extends SaintRobertFuel {\r
        \r
        public KNSU(){\r
-               super(Type.English);\r
+               super(Type.NONSI);\r
        }\r
 \r
        //@Override \r
index 284e1342701cef3e83b65e7d9e42bde0bdb9a439..13ba8a2558aede7c7ed23e577fb811e6e59ad16a 100644 (file)
@@ -15,11 +15,11 @@ import com.billkuker.rocketry.motorsim.RocketScience;
 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
+               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
@@ -32,20 +32,24 @@ 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
                this.t = t;\r
        }\r
+       \r
+       protected Type getType(){\r
+               return 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
index c075172760302e68877fef6f7e29aaab2b097433..59aecfdd1b28793c279fdf890cdd65016001a42e 100644 (file)
@@ -30,6 +30,7 @@ import com.billkuker.rocketry.motorsim.Motor;
 import com.billkuker.rocketry.motorsim.RocketScience;\r
 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.fuel.EditableFuel;\r
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
 import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
@@ -94,7 +95,7 @@ public class CrappyEditor extends JFrame {
                        });\r
                        n.addActionListener(new ActionListener(){\r
                                public void actionPerformed(ActionEvent arg0) {\r
-                                       UnitPreference.preference = UnitPreference.NonSI;       \r
+                                       UnitPreference.preference = UnitPreference.NONSI;       \r
                                }\r
                        });\r
                }\r