X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fnet%2Fsf%2Fopenrocket%2Fsimulation%2FRK4SimulationStepper.java;h=07020f2252c0c3eda1a3c64755c4d083a4b7206b;hb=bc75b89ed43a676df56a654bfe5ad6f54cc83423;hp=8d5e27dbf94264479d1d27bea78074e420a57e0a;hpb=879b214e60c09d53b18f24116fbfae08fa10604c;p=debian%2Fopenrocket diff --git a/src/net/sf/openrocket/simulation/RK4SimulationStepper.java b/src/net/sf/openrocket/simulation/RK4SimulationStepper.java index 8d5e27db..07020f22 100644 --- a/src/net/sf/openrocket/simulation/RK4SimulationStepper.java +++ b/src/net/sf/openrocket/simulation/RK4SimulationStepper.java @@ -8,6 +8,7 @@ import net.sf.openrocket.aerodynamics.FlightConditions; import net.sf.openrocket.aerodynamics.WarningSet; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.models.atmosphere.AtmosphericConditions; +import net.sf.openrocket.simulation.exception.SimulationCalculationException; import net.sf.openrocket.simulation.exception.SimulationException; import net.sf.openrocket.simulation.listeners.SimulationListenerHelper; import net.sf.openrocket.startup.Application; @@ -255,6 +256,13 @@ public class RK4SimulationStepper extends AbstractSimulationStepper { status.setSimulationTime(status.getSimulationTime() + store.timestep); status.setPreviousTimeStep(store.timestep); + + // Verify that values don't run out of range + if (status.getRocketVelocity().length2() > 1e18 || + status.getRocketPosition().length2() > 1e18 || + status.getRocketRotationVelocity().length2() > 1e18) { + throw new SimulationCalculationException("Simulation values exceeded limits"); + } } @@ -360,7 +368,8 @@ public class RK4SimulationStepper extends AbstractSimulationStepper { // Compute acceleration in rocket coordinates store.angularAcceleration = new Coordinate(momX / store.massData.getLongitudinalInertia(), - momY / store.massData.getLongitudinalInertia(), momZ / store.massData.getRotationalInertia()); + momY / store.massData.getLongitudinalInertia(), + momZ / store.massData.getRotationalInertia()); store.rollAcceleration = store.angularAcceleration.z; // TODO: LOW: This should be hypot, but does it matter?