From 2b0401d784f086f673587dc016432791bcf46db1 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Fri, 17 Apr 2009 20:34:10 +0000 Subject: [PATCH] Renamed some things, added some new fuels --- .../rocketry/motorsim/RocketScience.java | 4 +- .../rocketry/motorsim/fuel/EditableFuel.java | 127 ++++++++++++++++++ .../rocketry/motorsim/fuel/KNDX.java | 77 +++++++++++ .../rocketry/motorsim/fuel/KNER.java | 84 ++++++++++++ .../rocketry/motorsim/fuel/KNSB.java | 2 +- .../rocketry/motorsim/fuel/KNSU.java | 2 +- .../motorsim/fuel/SaintRobertFuel.java | 20 +-- .../motorsim/visual/CrappyEditor.java | 3 +- 8 files changed, 306 insertions(+), 13 deletions(-) create mode 100644 src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java create mode 100644 src/com/billkuker/rocketry/motorsim/fuel/KNDX.java create mode 100644 src/com/billkuker/rocketry/motorsim/fuel/KNER.java diff --git a/src/com/billkuker/rocketry/motorsim/RocketScience.java b/src/com/billkuker/rocketry/motorsim/RocketScience.java index aed135b..a936bf0 100644 --- a/src/com/billkuker/rocketry/motorsim/RocketScience.java +++ b/src/com/billkuker/rocketry/motorsim/RocketScience.java @@ -35,14 +35,14 @@ public class RocketScience { javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL), NEWTON_SECOND }), - NonSI(new Unit[]{ + NONSI(new Unit[]{ javax.measure.unit.NonSI.INCH, javax.measure.unit.NonSI.POUND_FORCE, PSI, NEWTON_SECOND }); - public static UnitPreference preference = NonSI; + public static UnitPreference preference = NONSI; protected Set> units = new HashSet>(); diff --git a/src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java b/src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java new file mode 100644 index 0000000..f5a7ed1 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/fuel/EditableFuel.java @@ -0,0 +1,127 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Temperature; +import javax.measure.quantity.VolumetricDensity; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.Fuel; +import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight; +import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type; + +public class EditableFuel extends SaintRobertFuel { + private double a = 0.0665; + private double n = 0.319; + private double combustionEfficiency = .97; + private double densityRatio = .96; + private Amount idealDensity = Amount.valueOf(1889, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT); + CombustionProduct combustionProduct = new EditableCombustionProduct(); + private SaintRobertFuel.Type type = SaintRobertFuel.Type.NONSI; + + public static class EditableCombustionProduct implements Fuel.CombustionProduct{ + private Amount effectiveMolarWeight = Amount.valueOf("41.98 kg/kmol").to(MolarWeight.UNIT);; + private Amount idealCombustionTemperature = Amount.valueOf(1720, SI.KELVIN);; + private double ratioOfSpecificHeats = 1.133; + private double ratioOfSpecificHeats2Phase = 1.044; + public Amount getEffectiveMolarWeight() { + return effectiveMolarWeight; + } + public void setEffectiveMolarWeight(Amount effectiveMolarWeight) { + this.effectiveMolarWeight = effectiveMolarWeight; + } + public Amount getIdealCombustionTemperature() { + return idealCombustionTemperature; + } + public void setIdealCombustionTemperature( + Amount idealCombustionTemperature) { + this.idealCombustionTemperature = idealCombustionTemperature; + } + public double getRatioOfSpecificHeats() { + return ratioOfSpecificHeats; + } + public void setRatioOfSpecificHeats(double ratioOfSpecificHeats) { + this.ratioOfSpecificHeats = ratioOfSpecificHeats; + } + public double getRatioOfSpecificHeats2Phase() { + return ratioOfSpecificHeats2Phase; + } + public void setRatioOfSpecificHeats2Phase(double ratioOfSpecificHeats2Phase) { + this.ratioOfSpecificHeats2Phase = ratioOfSpecificHeats2Phase; + } + } + + public EditableFuel() { + super(SaintRobertFuel.Type.NONSI); + } + + @Override + protected double burnrateCoefficient(Amount pressure) { + return a; + } + + @Override + protected double burnrateExponent(Amount pressure) { + return n; + } + + + public double getA() { + return a; + } + + public void setA(double a) { + this.a = a; + } + + public double getCombustionEfficiency() { + return combustionEfficiency; + } + + public void setCombustionEfficiency(double combustionEfficiency) { + this.combustionEfficiency = combustionEfficiency; + } + + public double getDensityRatio() { + return densityRatio; + } + + public void setDensityRatio(double densityRatio) { + this.densityRatio = densityRatio; + } + + public Amount getIdealDensity() { + return idealDensity; + } + + public void setIdealDensity(Amount idealDensity) { + this.idealDensity = idealDensity; + } + + public double getN() { + return n; + } + + public void setN(double n) { + this.n = n; + } + + public CombustionProduct getCombustionProduct() { + return combustionProduct; + } + + public void setCombustionProduct(CombustionProduct combustionProduct) { + this.combustionProduct = combustionProduct; + } + + public SaintRobertFuel.Type getType() { + return type; + } + + public void setType(SaintRobertFuel.Type type) { + this.type = type; + } + + +} diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNDX.java b/src/com/billkuker/rocketry/motorsim/fuel/KNDX.java new file mode 100644 index 0000000..cf1bc0a --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/fuel/KNDX.java @@ -0,0 +1,77 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Temperature; +import javax.measure.quantity.Velocity; +import javax.measure.quantity.VolumetricDensity; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight; +import com.billkuker.rocketry.motorsim.visual.Chart; + +public class KNDX extends PiecewiseSaintRobertFuel { + + public KNDX() { + super(SaintRobertFuel.Type.SI); + add(Amount.valueOf( .779, SI.MEGA(SI.PASCAL)), 8.875, 0.619); + add(Amount.valueOf( 2.572, SI.MEGA(SI.PASCAL)), 7.553, -0.009); + add(Amount.valueOf( 5.93, SI.MEGA(SI.PASCAL)), 3.841, 0.688); + add(Amount.valueOf( 8.502, SI.MEGA(SI.PASCAL)), 17.20, -0.148); + add(Amount.valueOf( 11.2, SI.MEGA(SI.PASCAL)), 4.775, 0.442); + } + + @Override + public Amount getIdealDensity() { + return Amount.valueOf(1879, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT); + } + + public CombustionProduct getCombustionProduct() { + return new CombustionProduct(){ + + public Amount getIdealCombustionTemperature() { + return Amount.valueOf(1710, SI.KELVIN); + } + + public Amount getEffectiveMolarWeight() { + return Amount.valueOf("42.39 kg/kmol").to(MolarWeight.UNIT); + } + + public double getRatioOfSpecificHeats() { + return 1.1308; + } + + public double getRatioOfSpecificHeats2Phase() { + return 1.043; + } + }; + } + + public static void main( String args[]) throws Exception{ + KNDX f = new KNDX(); + + Chart burnRate = new Chart( + SI.MEGA(SI.PASCAL), + SI.METERS_PER_SECOND, + f, + "burnRate"); + burnRate.setDomain( + burnRate.new IntervalDomain( + Amount.valueOf(0, SI.MEGA(SI.PASCAL)), + Amount.valueOf(11, SI.MEGA(SI.PASCAL)), + 20 + )); + + burnRate.show(); + } + + public double getCombustionEfficiency() { + return .97; + } + + public double getDensityRatio() { + return .96; + } + +} diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNER.java b/src/com/billkuker/rocketry/motorsim/fuel/KNER.java new file mode 100644 index 0000000..a80a485 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/fuel/KNER.java @@ -0,0 +1,84 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Temperature; +import javax.measure.quantity.Velocity; +import javax.measure.quantity.VolumetricDensity; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight; +import com.billkuker.rocketry.motorsim.visual.Chart; + +public class KNER extends SaintRobertFuel { + + public KNER() { + super(SaintRobertFuel.Type.NONSI); + } + + + @Override + protected double burnrateCoefficient(Amount pressure) { + return .0037; + } + + @Override + protected double burnrateExponent(Amount pressure) { + return .64; + } + + @Override + public Amount getIdealDensity() { + return Amount.valueOf(1819.9, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT); + } + + public CombustionProduct getCombustionProduct() { + return new CombustionProduct(){ + + public Amount getIdealCombustionTemperature() { + return Amount.valueOf(1600, SI.KELVIN); + } + + public Amount getEffectiveMolarWeight() { + return Amount.valueOf("38.78 kg/kmol").to(MolarWeight.UNIT); + } + + public double getRatioOfSpecificHeats() { + return 1.1391; + } + + public double getRatioOfSpecificHeats2Phase() { + return 1.0426; + } + }; + } + + public static void main( String args[]) throws Exception{ + KNER f = new KNER(); + + Chart burnRate = new Chart( + SI.MEGA(SI.PASCAL), + SI.METERS_PER_SECOND, + f, + "burnRate"); + burnRate.setDomain( + burnRate.new IntervalDomain( + Amount.valueOf(0, SI.MEGA(SI.PASCAL)), + Amount.valueOf(11, SI.MEGA(SI.PASCAL)), + 20 + )); + + burnRate.show(); + } + + public double getCombustionEfficiency() { + return .97; + } + + public double getDensityRatio() { + return .96; + } + + +} diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java b/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java index d7c2b21..a1a323b 100644 --- a/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java +++ b/src/com/billkuker/rocketry/motorsim/fuel/KNSB.java @@ -14,7 +14,7 @@ import com.billkuker.rocketry.motorsim.visual.Chart; public class KNSB extends PiecewiseSaintRobertFuel { public KNSB() { - super(SaintRobertFuel.Type.Si); + super(SaintRobertFuel.Type.SI); add(Amount.valueOf( .807, SI.MEGA(SI.PASCAL)), 10.71, 0.625); add(Amount.valueOf( 1.5, SI.MEGA(SI.PASCAL)), 8.763, -0.314); add(Amount.valueOf( 3.79, SI.MEGA(SI.PASCAL)), 7.852, -0.013); diff --git a/src/com/billkuker/rocketry/motorsim/fuel/KNSU.java b/src/com/billkuker/rocketry/motorsim/fuel/KNSU.java index c99e8d4..cc7b3c4 100644 --- a/src/com/billkuker/rocketry/motorsim/fuel/KNSU.java +++ b/src/com/billkuker/rocketry/motorsim/fuel/KNSU.java @@ -12,7 +12,7 @@ import com.billkuker.rocketry.motorsim.RocketScience.MolarWeight; public class KNSU extends SaintRobertFuel { public KNSU(){ - super(Type.English); + super(Type.NONSI); } //@Override diff --git a/src/com/billkuker/rocketry/motorsim/fuel/SaintRobertFuel.java b/src/com/billkuker/rocketry/motorsim/fuel/SaintRobertFuel.java index 284e134..13ba8a2 100644 --- a/src/com/billkuker/rocketry/motorsim/fuel/SaintRobertFuel.java +++ b/src/com/billkuker/rocketry/motorsim/fuel/SaintRobertFuel.java @@ -15,11 +15,11 @@ import com.billkuker.rocketry.motorsim.RocketScience; public abstract class SaintRobertFuel implements Fuel { protected enum Type{ - Si( - SI.MILLIMETER.divide(SI.SECOND).asType(Velocity.class), - SI.MEGA(SI.PASCAL).asType(Pressure.class)), - English( - NonSI.INCH.divide(SI.SECOND).asType(Velocity.class), + SI( + javax.measure.unit.SI.MILLIMETER.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class), + javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL).asType(Pressure.class)), + NONSI( + NonSI.INCH.divide(javax.measure.unit.SI.SECOND).asType(Velocity.class), RocketScience.PSI) ; @@ -32,20 +32,24 @@ public abstract class SaintRobertFuel implements Fuel { } } - private Type t = Type.Si; + private Type t = Type.SI; public SaintRobertFuel(Type t){ this.t = t; } + + protected Type getType(){ + return t; + } public Amount burnRate(Amount pressure) { - double p = pressure.doubleValue(t.p); + double p = pressure.doubleValue(getType().p); double a = burnrateCoefficient(pressure); double n = burnrateExponent(pressure); - return burnrateConstant().plus(Amount.valueOf( a*Math.pow(p,n), t.v )); + return burnrateConstant().plus(Amount.valueOf( a*Math.pow(p,n), getType().v )); } protected abstract double burnrateCoefficient(Amount pressure); diff --git a/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java b/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java index c075172..59aecfd 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java @@ -30,6 +30,7 @@ import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.RocketScience; import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference; import com.billkuker.rocketry.motorsim.fuel.KNSU; +import com.billkuker.rocketry.motorsim.fuel.EditableFuel; import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; import com.billkuker.rocketry.motorsim.grain.MultiGrain; import com.billkuker.rocketry.motorsim.io.MotorIO; @@ -94,7 +95,7 @@ public class CrappyEditor extends JFrame { }); n.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { - UnitPreference.preference = UnitPreference.NonSI; + UnitPreference.preference = UnitPreference.NONSI; } }); } -- 2.47.2