[test] Moved fins from core-body to booster-body; (they are now doubly-instanced); adjusted tests to accept this.

This commit is contained in:
Daniel_M_Williams 2018-08-04 15:56:55 -04:00
parent 4cb8a03454
commit e6b788cb0b
5 changed files with 133 additions and 125 deletions

View File

@ -942,21 +942,6 @@ public class TestRockets {
FlightConfigurationId motorConfigId = selFCID; FlightConfigurationId motorConfigId = selFCID;
coreBody.setMotorConfig( coreMotorConfig, motorConfigId); coreBody.setMotorConfig( coreMotorConfig, motorConfigId);
TrapezoidFinSet coreFins = new TrapezoidFinSet();
coreBody.addChild(coreFins);
coreFins.setName("Core Fins");
coreFins.setFinCount(4);
coreFins.setBaseRotation( Math.PI / 4);
coreFins.setThickness(0.003);
coreFins.setCrossSection(CrossSection.ROUNDED);
coreFins.setRootChord(0.32);
coreFins.setTipChord(0.12);
coreFins.setHeight(0.12);
coreFins.setSweep(0.18);
coreFins.setAxialMethod(AxialMethod.BOTTOM);
coreFins.setAxialOffset(0.0);
// ====== Booster Stage Set ====== // ====== Booster Stage Set ======
// ====== ====== ====== ====== // ====== ====== ====== ======
ParallelStage boosterStage = new ParallelStage(); ParallelStage boosterStage = new ParallelStage();
@ -966,6 +951,7 @@ public class TestRockets {
boosterStage.setAxialOffset(0.0); boosterStage.setAxialOffset(0.0);
boosterStage.setInstanceCount(2); boosterStage.setInstanceCount(2);
boosterStage.setRadius( RadiusMethod.SURFACE, 0.0 ); boosterStage.setRadius( RadiusMethod.SURFACE, 0.0 );
boosterStage.setAngleMethod( AngleMethod.RELATIVE );
{ {
NoseCone boosterCone = new NoseCone(Transition.Shape.POWER, 0.08, 0.0385); NoseCone boosterCone = new NoseCone(Transition.Shape.POWER, 0.08, 0.0385);
@ -1001,6 +987,20 @@ public class TestRockets {
boosterMotorConfig.setMotor( boosterMotor ); boosterMotorConfig.setMotor( boosterMotor );
boosterMotorTubes.setMotorConfig( boosterMotorConfig, motorConfigId); boosterMotorTubes.setMotorConfig( boosterMotorConfig, motorConfigId);
boosterMotorTubes.setMotorOverhang(0.01234); boosterMotorTubes.setMotorOverhang(0.01234);
TrapezoidFinSet boosterFins = new TrapezoidFinSet();
boosterBody.addChild(boosterFins);
boosterFins.setName("Booster Fins");
boosterFins.setFinCount(3);
boosterFins.setBaseRotation( Math.PI / 4);
boosterFins.setThickness(0.003);
boosterFins.setCrossSection(CrossSection.ROUNDED);
boosterFins.setRootChord(0.32);
boosterFins.setTipChord(0.12);
boosterFins.setHeight(0.12);
boosterFins.setSweep(0.18);
boosterFins.setAxialMethod(AxialMethod.BOTTOM);
boosterFins.setAxialOffset(0.0);
} }
} }

View File

@ -15,6 +15,7 @@ import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.plugin.PluginModule; import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.rocketcomponent.AxialStage; import net.sf.openrocket.rocketcomponent.AxialStage;
import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.FlightConfiguration; import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.NoseCone; import net.sf.openrocket.rocketcomponent.NoseCone;
import net.sf.openrocket.rocketcomponent.ParallelStage; import net.sf.openrocket.rocketcomponent.ParallelStage;
@ -180,7 +181,9 @@ public class BarrowmanCalculatorTest {
Rocket rocket = TestRockets.makeFalcon9Heavy(); Rocket rocket = TestRockets.makeFalcon9Heavy();
AerodynamicCalculator calc = new BarrowmanCalculator(); AerodynamicCalculator calc = new BarrowmanCalculator();
ParallelStage booster = (ParallelStage)rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage)rocket.getChild(1);
final ParallelStage booster = (ParallelStage)coreStage.getChild(0).getChild(0);
NoseCone nose = (NoseCone)booster.getChild(0); NoseCone nose = (NoseCone)booster.getChild(0);
BodyTube body = (BodyTube)booster.getChild(1); BodyTube body = (BodyTube)booster.getChild(1);

View File

@ -5,6 +5,7 @@ import org.junit.Test;
import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.rocketcomponent.AxialStage; import net.sf.openrocket.rocketcomponent.AxialStage;
import net.sf.openrocket.rocketcomponent.BodyComponent;
import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.FinSet; import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.FlightConfiguration; import net.sf.openrocket.rocketcomponent.FlightConfiguration;
@ -190,22 +191,17 @@ public class MassCalculatorTest extends BaseTestCase {
// ====== Core Stage ====== // ====== Core Stage ======
// ====== ====== ====== // ====== ====== ======
final AxialStage coreStage = (AxialStage)rkt.getChild(1);
{ {
expMass = 0.1298860066700161; expMass = 0.1298860066700161;
cc= rkt.getChild(1).getChild(0); final BodyComponent coreBody = (BodyComponent)coreStage.getChild(0);
compMass = cc.getComponentMass(); compMass = coreBody.getComponentMass();
assertEquals(cc.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON); assertEquals(coreBody.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON);
expMass = 0.21326976;
cc= rkt.getChild(1).getChild(0).getChild(0);
compMass = cc.getComponentMass();
assertEquals(cc.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON);
} }
// ====== Booster Set Stage ====== // ====== Booster Set Stage ======
// ====== ====== ====== // ====== ====== ======
ParallelStage boosters = (ParallelStage) rkt.getChild(1).getChild(0).getChild(1); ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
{ {
expMass = 0.0222459863653; expMass = 0.0222459863653;
// think of the casts as an assert that ( child instanceof NoseCone) == true // think of the casts as an assert that ( child instanceof NoseCone) == true
@ -222,6 +218,11 @@ public class MassCalculatorTest extends BaseTestCase {
InnerTube mmt = (InnerTube)boosters.getChild(1).getChild(0); InnerTube mmt = (InnerTube)boosters.getChild(1).getChild(0);
compMass = mmt.getComponentMass(); compMass = mmt.getComponentMass();
assertEquals( mmt.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON); assertEquals( mmt.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON);
expMass = 0.15995232;
final FinSet boosterFins = (FinSet)boosters.getChild(1).getChild(1);
compMass = boosterFins.getComponentMass();
assertEquals(boosterFins.getName()+" mass calculated incorrectly: ", expMass, compMass, EPSILON);
} }
} }
@ -274,21 +275,17 @@ public class MassCalculatorTest extends BaseTestCase {
// ====== Core Stage ====== // ====== Core Stage ======
// ====== ====== ====== // ====== ====== ======
final AxialStage coreStage = (AxialStage)rkt.getChild(1);
{ {
expCMx = 0.4; expCMx = 0.4;
BodyTube coreBody = (BodyTube)rkt.getChild(1).getChild(0); BodyTube coreBody = (BodyTube)coreStage.getChild(0);
actCMx = coreBody.getComponentCG().x; actCMx = coreBody.getComponentCG().x;
assertEquals("Core Body CMx calculated incorrectly: ", expCMx, actCMx, EPSILON); assertEquals("Core Body CMx calculated incorrectly: ", expCMx, actCMx, EPSILON);
expCMx = 0.19393939;
FinSet coreFins = (FinSet)rkt.getChild(1).getChild(0).getChild(0);
actCMx = coreFins .getComponentCG().x;
assertEquals("Core Fins CMx calculated incorrectly: ", expCMx, actCMx, EPSILON);
} }
// ====== Booster Set Stage ====== // ====== Booster Set Stage ======
// ====== ====== ====== // ====== ====== ======
ParallelStage boosters = (ParallelStage) rkt.getChild(1).getChild(0).getChild(1); ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
{ {
expCMx = 0.055710581052; expCMx = 0.055710581052;
// think of the casts as an assert that ( child instanceof NoseCone) == true // think of the casts as an assert that ( child instanceof NoseCone) == true
@ -305,6 +302,11 @@ public class MassCalculatorTest extends BaseTestCase {
InnerTube mmt = (InnerTube)boosters.getChild(1).getChild(0); InnerTube mmt = (InnerTube)boosters.getChild(1).getChild(0);
actCMx = mmt.getComponentCG().x; actCMx = mmt.getComponentCG().x;
assertEquals(" Motor Mount Tube CMx calculated incorrectly: ", expCMx, actCMx, EPSILON); assertEquals(" Motor Mount Tube CMx calculated incorrectly: ", expCMx, actCMx, EPSILON);
expCMx = 0.19393939;
FinSet boosterFins = (FinSet) boosters.getChild(1).getChild(1);
actCMx = boosterFins .getComponentCG().x;
assertEquals("Core Fins CMx calculated incorrectly: ", expCMx, actCMx, EPSILON);
} }
} }
@ -385,44 +387,37 @@ public class MassCalculatorTest extends BaseTestCase {
// ====== Core Stage ====== // ====== Core Stage ======
// ====== ====== ====== // ====== ====== ======
final AxialStage coreStage = (AxialStage)rocket.getChild(1);
{ {
cc= rocket.getChild(1).getChild(0); final BodyTube coreBody = (BodyTube)coreStage.getChild(0);
expInertia = 0.000187588; expInertia = 0.000187588;
compInertia = cc.getRotationalInertia(); compInertia = coreBody.getRotationalInertia();
assertEquals(cc.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(coreBody.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
expInertia = 0.00702105; expInertia = 0.00702105;
compInertia = cc.getLongitudinalInertia(); compInertia = coreBody.getLongitudinalInertia();
assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(coreBody.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
cc= rocket.getChild(1).getChild(0).getChild(0);
expInertia = 0.00734753;
compInertia = cc.getRotationalInertia();
assertEquals(cc.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
expInertia = 0.02160236691801411;
compInertia = cc.getLongitudinalInertia();
assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
} }
// ====== Booster Set Stage ====== // ====== Booster Set Stage ======
// ====== ====== ====== // ====== ====== ======
ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
{ {
cc= boosters.getChild(0); final NoseCone boosterNose = (NoseCone)boosters.getChild(0);
expInertia = 1.82665797857e-5; expInertia = 1.82665797857e-5;
compInertia = cc.getRotationalInertia(); compInertia = boosterNose.getRotationalInertia();
assertEquals(cc.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(boosterNose.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
expInertia = 1.96501191666e-7; expInertia = 1.96501191666e-7;
compInertia = cc.getLongitudinalInertia(); compInertia = boosterNose.getLongitudinalInertia();
assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(boosterNose.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
cc= boosters.getChild(1); final BodyTube boosterBody = (BodyTube)boosters.getChild(1);
expInertia = 1.875878651e-4; expInertia = 1.875878651e-4;
compInertia = cc.getRotationalInertia(); compInertia = boosterBody.getRotationalInertia();
assertEquals(cc.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(boosterBody.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
expInertia = 0.00702104762; expInertia = 0.00702104762;
compInertia = cc.getLongitudinalInertia(); compInertia = boosterBody.getLongitudinalInertia();
assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(boosterBody.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
cc= boosters.getChild(1).getChild(0); cc= boosters.getChild(1).getChild(0);
expInertia = 4.11444e-6; expInertia = 4.11444e-6;
@ -431,6 +426,15 @@ public class MassCalculatorTest extends BaseTestCase {
expInertia = 3.75062e-5; expInertia = 3.75062e-5;
compInertia = cc.getLongitudinalInertia(); compInertia = cc.getLongitudinalInertia();
assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON); assertEquals(cc.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
final FinSet boosterFins = (FinSet)boosters.getChild(1).getChild(1);
expInertia = 0.00413298;
compInertia = boosterFins.getRotationalInertia();
assertEquals(boosterFins.getName()+" Rotational MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
expInertia = 0.01215133;
compInertia = boosterFins.getLongitudinalInertia();
assertEquals(boosterFins.getName()+" Longitudinal MOI calculated incorrectly: ", expInertia, compInertia, EPSILON);
} }
} }
@ -469,8 +473,8 @@ public class MassCalculatorTest extends BaseTestCase {
final RigidBody actualData = MassCalculator.calculateStructure( config ); final RigidBody actualData = MassCalculator.calculateStructure( config );
final Coordinate actualCM = actualData.cm; final Coordinate actualCM = actualData.cm;
double expMass = 0.343156; double expMass = 0.12988600;
double expCMx = 1.134252; double expCMx = 0.964;
assertEquals("Upper Stage Mass is incorrect: ", expMass, actualCM.weight, EPSILON); assertEquals("Upper Stage Mass is incorrect: ", expMass, actualCM.weight, EPSILON);
assertEquals("Upper Stage CM.x is incorrect: ", expCMx, actualCM.x, EPSILON); assertEquals("Upper Stage CM.x is incorrect: ", expCMx, actualCM.x, EPSILON);
@ -535,14 +539,13 @@ public class MassCalculatorTest extends BaseTestCase {
FlightConfiguration config = rocket.getEmptyConfiguration(); FlightConfiguration config = rocket.getEmptyConfiguration();
ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); config.setOnlyStage( TestRockets.FALCON_9H_BOOSTER_STAGE_NUMBER );
config.setOnlyStage( boosters.getStageNumber() );
final RigidBody actualData = MassCalculator.calculateStructure( config ); final RigidBody actualData = MassCalculator.calculateStructure( config );
final Coordinate actualCM = actualData.getCM(); final Coordinate actualCM = actualData.getCM();
double expMass = 0.34207619524942634; double expMass = 0.66198084;
double expCMx = 0.9447396557660297; double expCMx = 1.08642949;
assertEquals("Heavy Booster Mass is incorrect: ", expMass, actualCM.weight, EPSILON); assertEquals("Heavy Booster Mass is incorrect: ", expMass, actualCM.weight, EPSILON);
assertEquals("Heavy Booster CM.x is incorrect: ", expCMx, actualCM.x, EPSILON); assertEquals("Heavy Booster CM.x is incorrect: ", expCMx, actualCM.x, EPSILON);
@ -561,11 +564,11 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody actualBoosterLaunchData = MassCalculator.calculateLaunch( config ); RigidBody actualBoosterLaunchData = MassCalculator.calculateLaunch( config );
double actualMass = actualBoosterLaunchData.getMass(); double actualMass = actualBoosterLaunchData.getMass();
double expectedMass = 1.3260761952; double expectedMass = 1.64598084;
assertEquals(" Booster Launch Mass is incorrect: ", expectedMass, actualMass, EPSILON); assertEquals(" Booster Launch Mass is incorrect: ", expectedMass, actualMass, EPSILON);
final Coordinate actualCM = actualBoosterLaunchData.getCM(); final Coordinate actualCM = actualBoosterLaunchData.getCM();
double expectedCMx = 1.21899745; double expectedCMx = 1.22267891;
Coordinate expCM = new Coordinate(expectedCMx,0,0, expectedMass); Coordinate expCM = new Coordinate(expectedCMx,0,0, expectedMass);
assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, actualCM.x, EPSILON); assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, actualCM.x, EPSILON);
assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, actualCM.y, EPSILON); assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, actualCM.y, EPSILON);
@ -585,8 +588,8 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody spentData = MassCalculator.calculateBurnout( config ); RigidBody spentData = MassCalculator.calculateBurnout( config );
Coordinate spentCM = spentData.getCM(); Coordinate spentCM = spentData.getCM();
double expSpentMass = 0.8540761952494624; double expSpentMass = 1.17398084;
double expSpentCMx = 1.166306978799226; double expSpentCMx = 1.18582650;
Coordinate expLaunchCM = new Coordinate( expSpentCMx, 0, 0, expSpentMass); Coordinate expLaunchCM = new Coordinate( expSpentCMx, 0, 0, expSpentMass);
assertEquals(" Booster Launch Mass is incorrect: ", expLaunchCM.weight, spentCM.weight, EPSILON); assertEquals(" Booster Launch Mass is incorrect: ", expLaunchCM.weight, spentCM.weight, EPSILON);
assertEquals(" Booster Launch CM.x is incorrect: ", expLaunchCM.x, spentCM.x, EPSILON); assertEquals(" Booster Launch CM.x is incorrect: ", expLaunchCM.x, spentCM.x, EPSILON);
@ -606,7 +609,8 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody actualPropellant = MassCalculator.calculateMotor( config ); RigidBody actualPropellant = MassCalculator.calculateMotor( config );
final Coordinate actCM= actualPropellant.getCM(); final Coordinate actCM= actualPropellant.getCM();
ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
final MotorMount mnt = (MotorMount)boosters.getChild(1).getChild(0); final MotorMount mnt = (MotorMount)boosters.getChild(1).getChild(0);
final Motor boosterMotor = mnt.getMotorConfig( config.getFlightConfigurationID()).getMotor(); final Motor boosterMotor = mnt.getMotorConfig( config.getFlightConfigurationID()).getMotor();
@ -650,11 +654,11 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody spent = MassCalculator.calculateBurnout( config); RigidBody spent = MassCalculator.calculateBurnout( config);
double expMOIRotational = 0.00576797953; double expMOIRotational = 0.01593066;
double boosterMOIRotational = spent.getRotationalInertia(); double boosterMOIRotational = spent.getRotationalInertia();
assertEquals(" Booster x-axis MOI is incorrect: ", expMOIRotational, boosterMOIRotational, EPSILON); assertEquals(" Booster x-axis MOI is incorrect: ", expMOIRotational, boosterMOIRotational, EPSILON);
double expMOI_tr = 0.054690069584; double expMOI_tr = 0.08018692435877221;
double boosterMOI_tr= spent.getLongitudinalInertia(); double boosterMOI_tr= spent.getLongitudinalInertia();
assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON); assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON);
} }
@ -670,9 +674,9 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody launchData = MassCalculator.calculateLaunch( config); RigidBody launchData = MassCalculator.calculateLaunch( config);
final double expIxx = 0.00882848653; final double expIxx = 0.01899116;
final double actIxx= launchData.getRotationalInertia(); final double actIxx= launchData.getRotationalInertia();
final double expIyy = 0.061981403261; final double expIyy = 0.08637653;
final double actIyy= launchData.getLongitudinalInertia(); final double actIyy= launchData.getLongitudinalInertia();
assertEquals(" Booster x-axis MOI is incorrect: ", expIxx, actIxx, EPSILON); assertEquals(" Booster x-axis MOI is incorrect: ", expIxx, actIxx, EPSILON);
@ -689,7 +693,8 @@ public class MassCalculatorTest extends BaseTestCase {
rocket.setSelectedConfiguration( config.getId() ); rocket.setSelectedConfiguration( config.getId() );
config.setOnlyStage( TestRockets.FALCON_9H_BOOSTER_STAGE_NUMBER ); config.setOnlyStage( TestRockets.FALCON_9H_BOOSTER_STAGE_NUMBER );
final ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
final double overrideMass = 0.5; final double overrideMass = 0.5;
boosters.setOverrideSubcomponents(true); boosters.setOverrideSubcomponents(true);
boosters.setMassOverridden(true); boosters.setMassOverridden(true);
@ -712,11 +717,11 @@ public class MassCalculatorTest extends BaseTestCase {
assertEquals(" Booster Launch CM is incorrect: ", expCM, boosterSetCM); assertEquals(" Booster Launch CM is incorrect: ", expCM, boosterSetCM);
// Validate MOI // Validate MOI
double expMOI_axial = 0.0024481075335; double expMOI_axial = 0.01261079;
double boosterMOI_xx= burnout.getRotationalInertia(); double boosterMOI_xx= burnout.getRotationalInertia();
assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON); assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON);
double expMOI_tr = 8.885103994735; double expMOI_tr = 16.163954943504205;
double boosterMOI_tr= burnout.getLongitudinalInertia(); double boosterMOI_tr= burnout.getLongitudinalInertia();
assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON); assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON);
} }
@ -729,7 +734,8 @@ public class MassCalculatorTest extends BaseTestCase {
FlightConfiguration config = rocket.getEmptyConfiguration(); FlightConfiguration config = rocket.getEmptyConfiguration();
rocket.setSelectedConfiguration( config.getId() ); rocket.setSelectedConfiguration( config.getId() );
ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
config.setOnlyStage( boosters.getStageNumber() ); config.setOnlyStage( boosters.getStageNumber() );
NoseCone nose = (NoseCone)boosters.getChild(0); NoseCone nose = (NoseCone)boosters.getChild(0);
@ -747,10 +753,10 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody boosterData = MassCalculator.calculateStructure( config ); RigidBody boosterData = MassCalculator.calculateStructure( config );
Coordinate boosterCM = boosterData.getCM(); Coordinate boosterCM = boosterData.getCM();
double expTotalMass = 3.09; double expTotalMass = 3.40990464;
assertEquals(" Booster Launch Mass is incorrect: ", expTotalMass, boosterData.getMass(), EPSILON); assertEquals(" Booster Launch Mass is incorrect: ", expTotalMass, boosterData.getMass(), EPSILON);
double expCMx = 0.81382493; double expCMx = 0.85361377;
Coordinate expCM = new Coordinate( expCMx, 0, 0, expTotalMass); Coordinate expCM = new Coordinate( expCMx, 0, 0, expTotalMass);
assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, boosterCM.x, EPSILON); assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, boosterCM.x, EPSILON);
assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, boosterCM.y, EPSILON); assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, boosterCM.y, EPSILON);
@ -758,11 +764,11 @@ public class MassCalculatorTest extends BaseTestCase {
assertEquals(" Booster Launch CM is incorrect: ", expCM, boosterCM); assertEquals(" Booster Launch CM is incorrect: ", expCM, boosterCM);
// Validate MOI // Validate MOI
double expMOI_axial = 0.0213759528078421; double expMOI_axial = 0.031538609;
double boosterMOI_xx= boosterData.getRotationalInertia(); double boosterMOI_xx= boosterData.getRotationalInertia();
assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON); assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON);
double expMOI_tr = 0.299042045787; double expMOI_tr = 0.37548843;
double boosterMOI_tr= boosterData.getLongitudinalInertia(); double boosterMOI_tr= boosterData.getLongitudinalInertia();
assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON); assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON);
} }
@ -776,7 +782,8 @@ public class MassCalculatorTest extends BaseTestCase {
rocket.setSelectedConfiguration( config.getId() ); rocket.setSelectedConfiguration( config.getId() );
config.setOnlyStage( TestRockets.FALCON_9H_BOOSTER_STAGE_NUMBER ); config.setOnlyStage( TestRockets.FALCON_9H_BOOSTER_STAGE_NUMBER );
ParallelStage boosters = (ParallelStage) rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
NoseCone nose = (NoseCone)boosters.getChild(0); NoseCone nose = (NoseCone)boosters.getChild(0);
nose.setCGOverridden(true); nose.setCGOverridden(true);
@ -792,11 +799,11 @@ public class MassCalculatorTest extends BaseTestCase {
RigidBody structure = MassCalculator.calculateStructure( config); RigidBody structure = MassCalculator.calculateStructure( config);
double expMass = 0.34207619524942634; final double expMass = 0.66198084;
double calcTotalMass = structure.getMass(); double calcTotalMass = structure.getMass();
assertEquals(" Booster Launch Mass is incorrect: ", expMass, calcTotalMass, EPSILON); assertEquals(" Booster Launch Mass is incorrect: ", expMass, calcTotalMass, EPSILON);
double expCMx = 1.0265399801199806; final double expCMx = 1.12869951;
Coordinate expCM = new Coordinate( expCMx, 0, 0, expMass); Coordinate expCM = new Coordinate( expCMx, 0, 0, expMass);
assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, structure.getCM().x, EPSILON); assertEquals(" Booster Launch CM.x is incorrect: ", expCM.x, structure.getCM().x, EPSILON);
assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, structure.getCM().y, EPSILON); assertEquals(" Booster Launch CM.y is incorrect: ", expCM.y, structure.getCM().y, EPSILON);
@ -804,11 +811,11 @@ public class MassCalculatorTest extends BaseTestCase {
assertEquals(" Booster Launch CM is incorrect: ", expCM, structure.getCM()); assertEquals(" Booster Launch CM is incorrect: ", expCM, structure.getCM());
// Validate MOI // Validate MOI
double expMOI_axial = 0.002448107533; final double expMOI_axial = 0.012610790;
double boosterMOI_xx= structure.getRotationalInertia(); double boosterMOI_xx= structure.getRotationalInertia();
assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON); assertEquals(" Booster x-axis MOI is incorrect: ", expMOI_axial, boosterMOI_xx, EPSILON);
double expMOI_tr = 0.031800928766; final double expMOI_tr = 0.063491225;
double boosterMOI_tr= structure.getLongitudinalInertia(); double boosterMOI_tr= structure.getLongitudinalInertia();
assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON); assertEquals(" Booster transverse MOI is incorrect: ", expMOI_tr, boosterMOI_tr, EPSILON);
} }

View File

@ -134,14 +134,6 @@ public class ParallelStageTest extends BaseTestCase {
Assert.assertEquals( coreBody.getPosition().x, 0.0, EPSILON); Assert.assertEquals( coreBody.getPosition().x, 0.0, EPSILON);
Assert.assertEquals( coreBody.getComponentLocations()[0].x, expectedCoreStageX, EPSILON); Assert.assertEquals( coreBody.getComponentLocations()[0].x, expectedCoreStageX, EPSILON);
FinSet coreFins = (FinSet)coreBody.getChild(0);
// default is offset=0, method=BOTTOM
assertEquals( AxialMethod.BOTTOM, coreFins.getAxialMethod() );
assertEquals( 0.0, coreFins.getAxialOffset(), EPSILON);
assertEquals( 0.480, coreFins.getPosition().x, EPSILON);
assertEquals( 1.044, coreFins.getComponentLocations()[0].x, EPSILON);
} }
@ -151,7 +143,7 @@ public class ParallelStageTest extends BaseTestCase {
AxialStage sustainer = (AxialStage) rocket.getChild(0); AxialStage sustainer = (AxialStage) rocket.getChild(0);
AxialStage coreStage = (AxialStage) rocket.getChild(1); AxialStage coreStage = (AxialStage) rocket.getChild(1);
AxialStage booster = (AxialStage) coreStage.getChild(0).getChild(1); AxialStage booster = (AxialStage) coreStage.getChild(0).getChild(0);
AxialStage sustainerPrev = sustainer.getUpperStage(); AxialStage sustainerPrev = sustainer.getUpperStage();
assertThat("sustainer parent is not found correctly: ", sustainerPrev, equalTo(null)); assertThat("sustainer parent is not found correctly: ", sustainerPrev, equalTo(null));
@ -194,7 +186,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testBoosterInitializationFREERadius() { public void testBoosterInitializationFREERadius() {
final Rocket rocket = TestRockets.makeFalcon9Heavy(); final Rocket rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage parallelBoosterSet = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage parallelBoosterSet = (ParallelStage)coreStage.getChild(0).getChild(0);
// vvvv function under test // vvvv function under test
parallelBoosterSet.setRadiusMethod( RadiusMethod.FREE ); parallelBoosterSet.setRadiusMethod( RadiusMethod.FREE );
@ -214,7 +206,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testBoosterInitializationSURFACERadius() { public void testBoosterInitializationSURFACERadius() {
final Rocket rocket = TestRockets.makeFalcon9Heavy(); final Rocket rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage parallelBoosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage parallelBoosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
final BodyTube coreBody = (BodyTube)coreStage.getChild(0); final BodyTube coreBody = (BodyTube)coreStage.getChild(0);
final BodyTube boosterBody = (BodyTube)parallelBoosterStage.getChild(1); final BodyTube boosterBody = (BodyTube)parallelBoosterStage.getChild(1);
@ -257,7 +249,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testBoosterInitializationRELATIVERadius() { public void testBoosterInitializationRELATIVERadius() {
final Rocket rocket = TestRockets.makeFalcon9Heavy(); final Rocket rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage parallelBoosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage parallelBoosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
final BodyTube coreBody = (BodyTube)coreStage.getChild(0); final BodyTube coreBody = (BodyTube)coreStage.getChild(0);
final BodyTube boosterBody = (BodyTube)parallelBoosterStage.getChild(1); final BodyTube boosterBody = (BodyTube)parallelBoosterStage.getChild(1);
@ -299,7 +291,7 @@ public class ParallelStageTest extends BaseTestCase {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final BodyTube coreBody = (BodyTube)coreStage.getChild(0); final BodyTube coreBody = (BodyTube)coreStage.getChild(0);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
final BodyTube boosterBody = (BodyTube)boosterStage.getChild(1); final BodyTube boosterBody = (BodyTube)boosterStage.getChild(1);
// vv function under test // vv function under test
@ -335,7 +327,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetStagePosition_outsideABSOLUTE() { public void testSetStagePosition_outsideABSOLUTE() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final BodyTube coreBody= (BodyTube) rocket.getChild(1).getChild(0); final BodyTube coreBody= (BodyTube) rocket.getChild(1).getChild(0);
final ParallelStage boosterStage = (ParallelStage)coreBody.getChild(1); final ParallelStage boosterStage = (ParallelStage)coreBody.getChild(0);
double targetAbsoluteX = 0.8; double targetAbsoluteX = 0.8;
double expectedRelativeX = 0.236; double expectedRelativeX = 0.236;
@ -386,7 +378,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetStagePosition_outsideTOP() { public void testSetStagePosition_outsideTOP() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
double targetOffset = 0.2; double targetOffset = 0.2;
@ -417,7 +409,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetMIDDLE() { public void testSetMIDDLE() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
// when 'external' the stage should be freely movable // when 'external' the stage should be freely movable
// vv function under test // vv function under test
@ -436,7 +428,8 @@ public class ParallelStageTest extends BaseTestCase {
@Test @Test
public void testSetBOTTOM() { public void testSetBOTTOM() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final ParallelStage boosterStage = (ParallelStage)rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
// vv function under test // vv function under test
double targetOffset = 0.2; double targetOffset = 0.2;
@ -454,7 +447,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetTOP_getABSOLUTE() { public void testSetTOP_getABSOLUTE() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
double targetOffset = 0.2; double targetOffset = 0.2;
@ -480,7 +473,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetTOP_getAFTER() { public void testSetTOP_getAFTER() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
double targetOffset = 0.2; double targetOffset = 0.2;
@ -503,7 +496,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetTOP_getMIDDLE() { public void testSetTOP_getMIDDLE() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
double targetOffset = 0.2; double targetOffset = 0.2;
@ -525,7 +518,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testSetTOP_getBOTTOM() { public void testSetTOP_getBOTTOM() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
double targetOffset = 0.2; double targetOffset = 0.2;
@ -547,7 +540,8 @@ public class ParallelStageTest extends BaseTestCase {
@Test @Test
public void testSetBOTTOM_getTOP() { public void testSetBOTTOM_getTOP() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final ParallelStage boosterStage = (ParallelStage)rocket.getChild(1).getChild(0).getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
// vv function under test // vv function under test
double targetOffset = 0.2; double targetOffset = 0.2;
@ -568,7 +562,7 @@ public class ParallelStageTest extends BaseTestCase {
public void testOutsideStageRepositionTOPAfterAdd() { public void testOutsideStageRepositionTOPAfterAdd() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(1); final ParallelStage boosterStage = (ParallelStage)coreStage.getChild(0).getChild(0);
final double targetOffset = +2.50; final double targetOffset = +2.50;
final AxialMethod targetMethod = AxialMethod.TOP; final AxialMethod targetMethod = AxialMethod.TOP;
@ -597,7 +591,9 @@ public class ParallelStageTest extends BaseTestCase {
@Test @Test
public void testStageInitializationMethodValueOrder() { public void testStageInitializationMethodValueOrder() {
final RocketComponent rocket = TestRockets.makeFalcon9Heavy(); final RocketComponent rocket = TestRockets.makeFalcon9Heavy();
final BodyTube coreBody = (BodyTube) rocket.getChild(1).getChild(0); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final BodyTube coreBody = (BodyTube)coreStage.getChild(0);
ParallelStage boosterA = createExtraBooster(); ParallelStage boosterA = createExtraBooster();
boosterA.setName("Booster A Stage"); boosterA.setName("Booster A Stage");
@ -632,7 +628,7 @@ public class ParallelStageTest extends BaseTestCase {
final AxialStage coreStage = (AxialStage) rocket.getChild(1); final AxialStage coreStage = (AxialStage) rocket.getChild(1);
final BodyTube coreBody = (BodyTube) coreStage.getChild(0); final BodyTube coreBody = (BodyTube) coreStage.getChild(0);
ParallelStage boosterA = (ParallelStage)coreBody.getChild(1); ParallelStage boosterA = (ParallelStage)coreBody.getChild(0);
ParallelStage boosterB = createExtraBooster(); ParallelStage boosterB = createExtraBooster();
boosterB.setName("Booster A Stage"); boosterB.setName("Booster A Stage");
@ -665,8 +661,8 @@ public class ParallelStageTest extends BaseTestCase {
actualStageNumber = boosterC.getStageNumber(); actualStageNumber = boosterC.getStageNumber();
assertEquals(" init order error: Booster B: resultant positions: ", expectedStageNumber, actualStageNumber); assertEquals(" init order error: Booster B: resultant positions: ", expectedStageNumber, actualStageNumber);
// remove Booster A // remove Booster B
coreBody.removeChild(2); coreBody.removeChild(1);
String treedump = rocket.toDebugTree(); String treedump = rocket.toDebugTree();
int expectedStageCount = 4; int expectedStageCount = 4;

View File

@ -242,7 +242,7 @@ public class RocketTest extends BaseTestCase {
// ====== Booster Set Stage ====== // ====== Booster Set Stage ======
// ====== ====== ====== // ====== ====== ======
ParallelStage boosters = (ParallelStage) coreBody.getChild(1); ParallelStage boosters = (ParallelStage) coreBody.getChild(0);
{ {
assertEquals( RadiusMethod.SURFACE, boosters.getRadiusMethod() ); assertEquals( RadiusMethod.SURFACE, boosters.getRadiusMethod() );
assertEquals( AngleMethod.RELATIVE, boosters.getAngleMethod() ); assertEquals( AngleMethod.RELATIVE, boosters.getAngleMethod() );
@ -277,15 +277,14 @@ public class RocketTest extends BaseTestCase {
loc = boosterBody.getComponentLocations()[0]; loc = boosterBody.getComponentLocations()[0];
assertEquals(boosterBody.getName()+" offset is incorrect: ", 0.08, offset.x, EPSILON); assertEquals(boosterBody.getName()+" offset is incorrect: ", 0.08, offset.x, EPSILON);
assertEquals(boosterBody.getName()+" location is incorrect: ", 0.564, loc.x, EPSILON); assertEquals(boosterBody.getName()+" location is incorrect: ", 0.564, loc.x, EPSILON);
{
InnerTube mmt = (InnerTube)boosters.getChild(1).getChild(0); InnerTube mmt = (InnerTube)boosterBody.getChild(0);
offset = mmt.getPosition(); offset = mmt.getPosition();
loc = mmt.getComponentLocations()[0]; loc = mmt.getComponentLocations()[0];
assertEquals(mmt.getName()+" offset is incorrect: ", 0.65, offset.x, EPSILON); assertEquals(mmt.getName()+" offset is incorrect: ", 0.65, offset.x, EPSILON);
assertEquals(mmt.getName()+" location is incorrect: ", 1.214, loc.x, EPSILON); assertEquals(mmt.getName()+" location is incorrect: ", 1.214, loc.x, EPSILON);
}
FinSet coreFins = (FinSet)rocket.getChild(1).getChild(0).getChild(0); final FinSet coreFins = (FinSet)boosterBody.getChild(1);
offset = coreFins.getPosition(); offset = coreFins.getPosition();
loc = coreFins.getComponentLocations()[0]; loc = coreFins.getComponentLocations()[0];
assertEquals(coreFins.getName()+" offset is incorrect: ", 0.480, offset.x, EPSILON); assertEquals(coreFins.getName()+" offset is incorrect: ", 0.480, offset.x, EPSILON);
@ -293,4 +292,7 @@ public class RocketTest extends BaseTestCase {
} }
} }
}
}
} }