Minor cleanup / organization
authorBill Kuker <bkuker@billkuker.com>
Sat, 18 Apr 2009 18:19:42 +0000 (18:19 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sat, 18 Apr 2009 18:19:42 +0000 (18:19 +0000)
src/com/billkuker/rocketry/motorsim/Burn.java

index e867b616db451b04d6f3291acff56897ae8a43e0..96fd0ed60011b877b3d98dfc2dd626cd906a2572 100644 (file)
@@ -115,68 +115,43 @@ public class Burn {
                        \r
                        //TODO Amount<Volume> volumeBurnt = motor.getGrain().volume(prev.regression).minus(motor.getGrain().volume(next.regression));\r
                        Amount<Volume> volumeBurnt = motor.getGrain().surfaceArea(prev.regression).times(regStep).to(Volume.UNIT);\r
-                       \r
                        log.info("Volume Burnt: " + volumeBurnt.to(SI.MILLIMETER.pow(3)));\r
                        \r
                        Amount<MassFlowRate> mGenRate = volumeBurnt.times(motor.getFuel().getIdealDensity().times(motor.getFuel().getDensityRatio())).divide(dt).to(MassFlowRate.UNIT);\r
-                       \r
                        log.debug("Mass Gen Rate: " + mGenRate);\r
                        \r
+                       //Calculate specific gas constant\r
                        Amount specificGasConstant = Constants.R.divide(motor.getFuel().getCombustionProduct().getEffectiveMolarWeight());\r
+                       //This unit conversion helps JScience to convert nozzle flow rate to\r
+                       //kg/s a little later on I verified the conversion by hand and\r
+                       //JScience checks it too.\r
+                       specificGasConstant = convertSpecificGasConstantUnits(specificGasConstant);\r
+                       \r
+                       //Calculate chamber temperature\r
                        Amount<Temperature> chamberTemp = motor.getFuel().getCombustionProduct().getIdealCombustionTemperature().times(motor.getFuel().getCombustionEfficiency());\r
                        \r
                        Amount<MassFlowRate> mNozzle;\r
                        {\r
                                Amount<Pressure> pDiff = prev.chamberPressure.minus(atmosphereicPressure);\r
-                               \r
-                               //pDiff = Amount.valueOf(.7342, MPA).minus(atmosphereicPressure);\r
-                               \r
                                log.debug("Pdiff: " + pDiff);\r
-                               \r
                                Amount<Area> aStar = motor.getNozzle().throatArea();\r
-                               \r
                                double k = motor.getFuel().getCombustionProduct().getRatioOfSpecificHeats();\r
-                               \r
-                               log.debug("K: " + k);\r
-                               \r
-                               double kSide = Math.sqrt(k) * Math.pow((2/(k+1)) , (((k+1)/2)/(k-1))); //Math.pow(2/k+1, (k+1)/(2*(k-1)));\r
-                               \r
-                               log.debug("K-Part: (good)" + kSide);\r
-                               \r
-                               \r
-                               \r
-                               //This unit conversion helps JScience to convert nozzle flow rate to\r
-                               //kg/s a little later on I verified the conversion by hand and\r
-                               //JScience checks it too.\r
-                               specificGasConstant = convertSpecificGasConstantUnits(specificGasConstant);\r
-                               \r
-                               log.debug("Specific Gas Constant: (good)" + specificGasConstant);\r
-                               \r
+                               double kSide = Math.sqrt(k) * Math.pow((2/(k+1)) , (((k+1)/2)/(k-1)));\r
                                Amount sqrtPart = specificGasConstant.times(chamberTemp).sqrt();\r
-\r
-                               //Unit x = SI.JOULE.divide(SI.KILOGRAM).root(2);\r
-                               \r
-                               //sqrtPart = sqrtPart.times(Amount.valueOf(1, x));\r
-                               \r
-                               log.debug("Square Root Part: " + sqrtPart);\r
-                               \r
                                mNozzle = pDiff.times(aStar).times(kSide).divide(sqrtPart).to(MassFlowRate.UNIT);\r
-                               \r
-                               log.debug("Nozzle Flow: " + mNozzle);\r
-                               \r
-                               log.debug("Nozzle Flow: " + mNozzle.to(MassFlowRate.UNIT));\r
-                               \r
-                               \r
-                               \r
-                               \r
+                               log.debug("Mass Exit Rate: " + mNozzle.to(MassFlowRate.UNIT));          \r
                        }\r
                        \r
                        Amount<MassFlowRate> massStorageRate = mGenRate.minus(mNozzle);\r
                        \r
-                       log.debug("Chamber Product rate: " + massStorageRate);\r
-                       \r
+                       log.debug("Mass Storage Rate: " + massStorageRate);\r
+\r
                        next.chamberProduct = prev.chamberProduct.plus(massStorageRate.times(dt));\r
                        \r
+                       //Product can not go negative!\r
+                       if ( next.chamberProduct.isLessThan(Amount.valueOf(0, SI.KILOGRAM)) )\r
+                               next.chamberProduct = Amount.valueOf(0, SI.KILOGRAM);\r
+                       \r
                        log.debug("Chamber Product: " + next.chamberProduct);\r
                        \r
                        Amount<VolumetricDensity> combustionProductDensity = next.chamberProduct.divide(motor.getChamber().chamberVolume().minus(motor.getGrain().volume(next.regression))).to(VolumetricDensity.UNIT);\r
@@ -191,7 +166,7 @@ public class Burn {
                        \r
                        next.thrust = motor.getNozzle().thrust(next.chamberPressure, atmosphereicPressure, atmosphereicPressure, motor.getFuel().getCombustionProduct().getRatioOfSpecificHeats2Phase());\r
                        \r
-                       if ( next.chamberPressure.approximates(atmosphereicPressure)){\r
+                       if ( i > 100 && next.chamberPressure.approximates(atmosphereicPressure)){\r
                                log.info("Pressure at Patm on step " + i);\r
                                break;\r
                        }\r