\r
import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
import com.billkuker.rocketry.motorsim.grain.BurnPanel;\r
+import com.billkuker.rocketry.motorsim.grain.CompoundGrain;\r
import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
import com.billkuker.rocketry.motorsim.grain.ExtrudedGrain;\r
import com.billkuker.rocketry.motorsim.grain.GrainPanel;\r
g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
m.setGrain(g);\r
\r
- m.setGrain(new MultiGrain(g,2));\r
+ CoredCylindricalGrain g1 = new CoredCylindricalGrain();\r
+ g1.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+ g1.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+ g1.setID(Amount.valueOf(18, SI.MILLIMETER));\r
+ m.setGrain(g);\r
+ \r
+ CoredCylindricalGrain g2 = new CoredCylindricalGrain();\r
+ g2.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+ g2.setOD(Amount.valueOf(12, SI.MILLIMETER));\r
+ g2.setID(Amount.valueOf(0, SI.MILLIMETER));\r
+ g2.inhibit(true, false, false);\r
+ m.setGrain(g);\r
+ \r
+ CompoundGrain cg = new CompoundGrain(g1, g2);\r
+ \r
+ m.setGrain( cg );\r
+ \r
+ //m.setGrain(new MultiGrain(g,2));\r
\r
//m.setGrain(new ExtrudedGrain());\r
\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.grain;\r
+\r
+import java.awt.geom.Area;\r
+\r
+import javax.measure.quantity.Length;\r
+import javax.measure.quantity.Volume;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Grain;\r
+\r
+public class CompoundGrain implements Grain {\r
+ \r
+ private Grain a, b;\r
+ \r
+ public CompoundGrain(Grain a, Grain b){\r
+ this.a = a;\r
+ this.b = b;\r
+ }\r
+\r
+ public Area getCrossSection(Amount<Length> regression) {\r
+ Area aa = a.getCrossSection(regression);\r
+ aa.add(b.getCrossSection(regression));\r
+ return aa;\r
+ }\r
+\r
+ public Area getSideView(Amount<Length> regression) {\r
+ Area aa = a.getSideView(regression);\r
+ aa.add(b.getSideView(regression));\r
+ return aa;\r
+ }\r
+\r
+ public Amount<javax.measure.quantity.Area> surfaceArea(\r
+ Amount<Length> regression) {\r
+ return a.surfaceArea(regression).plus(b.surfaceArea(regression));\r
+ }\r
+\r
+ public Amount<Volume> volume(Amount<Length> regression) {\r
+ return a.volume(regression).plus(b.volume(regression));\r
+ }\r
+\r
+ public Amount<Length> webThickness() {\r
+ Amount<Length> l = a.webThickness();\r
+ if ( b.webThickness().isGreaterThan(l) )\r
+ return b.webThickness();\r
+ return l;\r
+ }\r
+\r
+}\r
public CoredCylindricalGrain() {\r
\r
}\r
+ \r
+ public void inhibit(boolean in, boolean out, boolean end){\r
+ oInh = out;\r
+ iInh = in;\r
+ eInh = end;\r
+ }\r
\r
@Override\r
public Amount<Area> surfaceArea(Amount<Length> regression) {\r