]> git.gag.com Git - sw/motorsim/commitdiff
New fuel type
authorBill Kuker <bkuker@billkuker.com>
Mon, 13 Apr 2009 12:20:27 +0000 (12:20 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 13 Apr 2009 12:20:27 +0000 (12:20 +0000)
src/com/billkuker/rocketry/motorsim/Burn.java
src/com/billkuker/rocketry/motorsim/fuel/KNSB.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/fuel/PiecewiseSaintRobertFuel.java [new file with mode: 0644]

index 64f8b53dd92082fb6665b7908476cdbf31c99ec2..e2ea10d14a73fbcf6f606632fc8f95a121d2eed1 100644 (file)
@@ -23,6 +23,7 @@ import org.apache.log4j.Logger;
 import org.jscience.physics.amount.Amount;\r
 import org.jscience.physics.amount.Constants;\r
 \r
+import com.billkuker.rocketry.motorsim.fuel.KNSB;\r
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
 import com.billkuker.rocketry.motorsim.grain.CompoundGrain;\r
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
@@ -219,7 +220,7 @@ public class Burn {
                m.setFuel(new KNSU());\r
                \r
                CylindricalChamber c = new CylindricalChamber();\r
-               c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+               c.setLength(Amount.valueOf(400, SI.MILLIMETER));\r
                c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
                m.setChamber(c);\r
                \r
@@ -241,16 +242,18 @@ public class Burn {
                g2.setID(Amount.valueOf(0, SI.MILLIMETER));\r
                g2.inhibit(true, false, true);\r
                \r
-               CompoundGrain cg = new CompoundGrain(g1, g2);\r
+               CompoundGrain cg = new CompoundGrain();\r
+               cg.add(g1);\r
+               cg.add(g2);\r
                \r
-               m.setGrain( new MultiGrain(cg, 2) );\r
+               //m.setGrain( new MultiGrain(cg, 2) );\r
                \r
-               //m.setGrain(new MultiGrain(g,2));\r
+               m.setGrain(new MultiGrain(g,4));\r
                \r
                //m.setGrain(new ExtrudedGrain());\r
                \r
                ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
-               n.setThroatDiameter(Amount.valueOf(8.500, SI.MILLIMETER));\r
+               n.setThroatDiameter(Amount.valueOf(5.500, SI.MILLIMETER));\r
                n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER));\r
                n.setEfficiency(.87);\r
                m.setNozzle(n);\r
diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java b/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java
new file mode 100644 (file)
index 0000000..0f0ed52
--- /dev/null
@@ -0,0 +1,78 @@
+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.NonSI;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Fuel.CombustionProduct;\r
+import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight;\r
+import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;\r
+import com.billkuker.rocketry.motorsim.visual.Chart;\r
+import com.billkuker.rocketry.motorsim.visual.Chart.IntervalDomain;\r
+\r
+public class KNSB extends PiecewiseSaintRobertFuel {\r
+\r
+       public KNSB() {\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
+               add(Amount.valueOf(             7.03, SI.MEGA(SI.PASCAL)),      3.907,  0.535);\r
+               add(Amount.valueOf(             10.67, SI.MEGA(SI.PASCAL)), 9.653,      0.064);\r
+       }\r
+\r
+       @Override\r
+       public Amount<VolumetricDensity> idealDensity() {\r
+               return Amount.valueOf(1841, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT);\r
+       }\r
+\r
+       @Override\r
+       public CombustionProduct getCombustionProduct() {\r
+               return new CombustionProduct(){ //TODO THIS IS THE KNSU STUFF\r
+                       \r
+                       @Override\r
+                       public Amount<Temperature> idealCombustionTemperature() {\r
+                               return Amount.valueOf(1600, SI.KELVIN);\r
+                       }\r
+               \r
+                       @Override\r
+                       public Amount<MolarWeight> effectiveMolarWeight() {\r
+                               return Amount.valueOf("39.9 kg/kmol").to(MolarWeight.UNIT);\r
+                       }\r
+               \r
+                       @Override\r
+                       public double ratioOfSpecificHeats() {\r
+                               return 1.1361;\r
+                       }\r
+               \r
+                       @Override\r
+                       public double ratioOfSpecificHeats2Phase() {\r
+                               return 1.042;\r
+                       }\r
+               };\r
+       }\r
+       \r
+       public static void main( String args[]) throws Exception{\r
+               KNSB f = new KNSB();\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
+}\r
diff --git a/src/com/billkuker/rocketry/motorsim/fuel/PiecewiseSaintRobertFuel.java b/src/com/billkuker/rocketry/motorsim/fuel/PiecewiseSaintRobertFuel.java
new file mode 100644 (file)
index 0000000..8ff4837
--- /dev/null
@@ -0,0 +1,53 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import java.util.NoSuchElementException;\r
+import java.util.SortedMap;\r
+import java.util.TreeMap;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.VolumetricDensity;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;\r
+\r
+public abstract class PiecewiseSaintRobertFuel extends SaintRobertFuel {\r
+\r
+       private class Entry{\r
+               double a;\r
+               double n;\r
+       }\r
+       \r
+       private SortedMap<Amount<Pressure>, Entry> entries = new TreeMap<Amount<Pressure>, Entry>();\r
+       \r
+       public PiecewiseSaintRobertFuel(Type t) {\r
+               super(t);\r
+       }\r
+       \r
+       public void add(Amount<Pressure> p, final double _a, final double _n){\r
+               entries.put(p, new Entry(){{a = _a; n = _n;}});\r
+       }\r
+\r
+       @Override\r
+       protected double burnrateCoefficient(Amount<Pressure> pressure) {\r
+               try {\r
+                       Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();\r
+                       Entry e = entries.get(samplePressure);\r
+                       return e.a;\r
+               } catch ( NoSuchElementException e ){\r
+                       return 0;\r
+               }\r
+       }\r
+\r
+       @Override\r
+       protected double burnrateExponent(Amount<Pressure> pressure) {\r
+               try {\r
+                       Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();\r
+                       Entry e = entries.get(samplePressure);\r
+                       return e.n;\r
+               } catch ( NoSuchElementException e ){\r
+                       return 0;\r
+               }\r
+       }\r
+\r
+}\r