package net.sf.openrocket.optimization.rocketoptimization.parameters;
-import net.sf.openrocket.document.Simulation;
import net.sf.openrocket.l10n.Translator;
-import net.sf.openrocket.logging.LogHelper;
-import net.sf.openrocket.optimization.general.OptimizationException;
-import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter;
+import net.sf.openrocket.simulation.FlightData;
import net.sf.openrocket.simulation.FlightDataType;
-import net.sf.openrocket.simulation.exception.MotorIgnitionException;
-import net.sf.openrocket.simulation.exception.SimulationException;
-import net.sf.openrocket.simulation.exception.SimulationLaunchException;
+import net.sf.openrocket.simulation.listeners.SimulationListener;
import net.sf.openrocket.simulation.listeners.system.ApogeeEndListener;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
-public class MaximumVelocityParameter implements OptimizableParameter {
+public class MaximumVelocityParameter extends SimulationBasedParameter {
- private static final LogHelper log = Application.getLogger();
private static final Translator trans = Application.getTranslator();
@Override
}
@Override
- public double computeValue(Simulation simulation) throws OptimizationException {
- try {
- log.debug("Running simulation to evaluate maximum velocity");
- simulation.simulate(new ApogeeEndListener());
- double value = simulation.getSimulatedData().getBranch(0).getMaximum(FlightDataType.TYPE_VELOCITY_TOTAL);
- log.debug("Maximum velocity was " + value);
- return value;
- } catch (MotorIgnitionException e) {
- // A problem with motor ignition will cause optimization to fail
- throw new OptimizationException(e);
- } catch (SimulationLaunchException e) {
- // Other launch exceptions result in zero velocity
- return Double.NaN;
- } catch (SimulationException e) {
- // Other exceptions fail
- throw new OptimizationException(e);
- }
+ protected SimulationListener[] getSimulationListeners() {
+ return new SimulationListener[] { new ApogeeEndListener() };
+ }
+
+ @Override
+ protected double getResultValue(FlightData simulatedData) {
+ return simulatedData.getBranch(0).getMaximum(FlightDataType.TYPE_VELOCITY_TOTAL);
}
@Override