Added some tests and fix for edge cases where in and out of cored grain are inhibited...
authorBill Kuker <bkuker@billkuker.com>
Thu, 2 Dec 2010 01:04:08 +0000 (01:04 +0000)
committerBill Kuker <bkuker@billkuker.com>
Thu, 2 Dec 2010 01:04:08 +0000 (01:04 +0000)
src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java
test/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java

index 6248239d292b9dd1bc611448aca3f93a490f9707..3fdb4dc2a684b7f7639ca2b828290d04212a4204 100644 (file)
@@ -144,20 +144,20 @@ public class CoredCylindricalGrain extends ExtrudedGrain implements Validating {
        }\r
 \r
        public Amount<Length> webThickness() {\r
-               if ( innerSurfaceInhibited && outerSurfaceInhibited ){\r
-                       return oD; //TODO gotta move this to the end\r
-               }\r
+               \r
+               Amount<Length> axial = null;\r
+               if ( numberOfBurningEnds(Amount.valueOf(0, SI.MILLIMETER)) != 0 )\r
+                       axial = getLength().divide(numberOfBurningEnds(Amount.valueOf(0, SI.MILLIMETER)));\r
                \r
                Amount<Length> radial = null;\r
-               if ( !innerSurfaceInhibited && !outerSurfaceInhibited )\r
+               if ( !innerSurfaceInhibited && !outerSurfaceInhibited ){\r
                        radial = oD.minus(iD).divide(4); //Outer and inner exposed\r
-               else if ( !innerSurfaceInhibited || !outerSurfaceInhibited )\r
+               } else if ( !innerSurfaceInhibited || !outerSurfaceInhibited ){\r
                        radial = oD.minus(iD).divide(2); //Outer or inner exposed\r
+               } else if ( innerSurfaceInhibited && outerSurfaceInhibited ){\r
+                       return axial;\r
+               } \r
                \r
-               Amount<Length> axial = null;\r
-               \r
-               if ( numberOfBurningEnds(Amount.valueOf(0, SI.MILLIMETER)) != 0 )\r
-                       axial = getLength().divide(numberOfBurningEnds(Amount.valueOf(0, SI.MILLIMETER)));\r
                \r
                if ( axial == null )\r
                        return radial;\r
index e461f557751be6696fd83d6ddabc2e890653f9b3..9bddb05096bcf6dfb3e40dd882ba154304435f42 100644 (file)
@@ -50,7 +50,67 @@ public class CoredCylindricalGrainTest extends AbstractRocketTest {
                \r
                assertApproximate(g.webThickness(), Amount.valueOf("50mm"));\r
        }\r
+       \r
+       @Test\r
+       public void testWebThicknessSkinny2Ends() throws PropertyVetoException {\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               \r
+               //thin and long\r
+               g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+               g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+               g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
+               g.setInnerSurfaceInhibited(true);\r
+               g.setOuterSurfaceInhibited(true);\r
+               \r
+               assertApproximate(g.webThickness(), Amount.valueOf("50mm"));\r
 \r
+       }\r
+       \r
+       @Test\r
+       public void testWebThicknessSkinny1End() throws PropertyVetoException {\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               \r
+               //thin and long\r
+               g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+               g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+               g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
+               g.setInnerSurfaceInhibited(true);\r
+               g.setOuterSurfaceInhibited(true);\r
+               g.setForeEndInhibited(true);\r
+               \r
+               assertApproximate(g.webThickness(), Amount.valueOf("100mm"));\r
+\r
+       }\r
+\r
+       @Test\r
+       public void testWebThicknessFat2Ends() throws PropertyVetoException {\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               \r
+               g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+               g.setOD(Amount.valueOf(60, SI.MILLIMETER));\r
+               g.setID(Amount.valueOf(20, SI.MILLIMETER));\r
+               g.setInnerSurfaceInhibited(true);\r
+               g.setOuterSurfaceInhibited(true);\r
+               \r
+               assertApproximate(g.webThickness(), Amount.valueOf("50mm"));\r
+\r
+       }\r
+       \r
+       @Test\r
+       public void testWebThicknessFat1End() throws PropertyVetoException {\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               \r
+               g.setLength(Amount.valueOf(20, SI.MILLIMETER));\r
+               g.setOD(Amount.valueOf(60, SI.MILLIMETER));\r
+               g.setID(Amount.valueOf(20, SI.MILLIMETER));\r
+               g.setInnerSurfaceInhibited(true);\r
+               g.setOuterSurfaceInhibited(true);\r
+               g.setForeEndInhibited(true);\r
+               \r
+               assertApproximate(g.webThickness(), Amount.valueOf("20mm"));\r
+\r
+       }\r
+       \r
        @Test\r
        public void testVolume() throws PropertyVetoException {\r
                CoredCylindricalGrain g = new CoredCylindricalGrain();\r