From 10909ccf2192243fe6aaf101ef99d25ac5cd562f Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 3 Jan 2024 15:30:49 -0700 Subject: [PATCH] Add logic to better support CHAD staging (booster with no fins). This will require more accurate thrust calculations to work properly. --- .../simulation/BasicEventSimulationEngine.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java b/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java index f9fd6d073..e63e470a0 100644 --- a/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java +++ b/core/src/net/sf/openrocket/simulation/BasicEventSimulationEngine.java @@ -612,7 +612,7 @@ public class BasicEventSimulationEngine implements SimulationEngine { currentStepper = tumbleStepper; currentStatus = currentStepper.initialize(currentStatus); - + final boolean tooMuchThrust = currentStatus.getFlightData().getLast(FlightDataType.TYPE_THRUST_FORCE) > THRUST_TUMBLE_CONDITION; if (tooMuchThrust) { currentStatus.abortSimulation(SimulationAbort.Cause.TUMBLE_UNDER_THRUST); @@ -679,12 +679,18 @@ public class BasicEventSimulationEngine implements SimulationEngine { currentStatus.abortSimulation(SimulationAbort.Cause.ACTIVELENGTHZERO); } - // Can't calculate stability + // Can't calculate stability. If it's the sustainer we'll abort; if a booster + // we'll just transition to tumbling (if it's a booster and under thrust code elsewhere + // will abort). if (currentStatus.getSimulationConditions().getAerodynamicCalculator() .getCP(currentStatus.getConfiguration(), new FlightConditions(currentStatus.getConfiguration()), new WarningSet()).weight < MathUtil.EPSILON) { - currentStatus.abortSimulation(SimulationAbort.Cause.NOCP); + if (currentStatus.getConfiguration().isStageActive(0)) { + currentStatus.abortSimulation(SimulationAbort.Cause.NOCP); + } else { + currentStatus.addEvent(new FlightEvent(FlightEvent.Type.TUMBLE, currentStatus.getSimulationTime())); + } } }