From 504062a853909de177515d0a5d3f07700206ef3f Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Fri, 8 Mar 2024 08:44:44 -0700 Subject: [PATCH] slight tweak -- end a timestep just before scheduled events to better capture their effect --- .../openrocket/simulation/AbstractEulerStepper.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/AbstractEulerStepper.java b/core/src/net/sf/openrocket/simulation/AbstractEulerStepper.java index c59025989..71739e9d4 100644 --- a/core/src/net/sf/openrocket/simulation/AbstractEulerStepper.java +++ b/core/src/net/sf/openrocket/simulation/AbstractEulerStepper.java @@ -80,8 +80,15 @@ public abstract class AbstractEulerStepper extends AbstractSimulationStepper { timeStep = Math.min(timeStep, 1.0/absAccel); } - // Honor max step size passed in - timeStep = Math.min(timeStep, maxTimeStep); + // Honor max step size passed in. If the time to next time step is greater than our minimum + // we'll set our next step to just before it in order to better capture discontinuities in things like chute opening + if (maxTimeStep < timeStep) { + if (maxTimeStep > MIN_TIME_STEP) { + timeStep = maxTimeStep - MIN_TIME_STEP; + } else { + timeStep = maxTimeStep; + } + } // but don't let it get *too* small timeStep = Math.max(timeStep, MIN_TIME_STEP);