1 package net.sf.openrocket.optimization.rocketoptimization.parameters;
3 import net.sf.openrocket.document.Simulation;
4 import net.sf.openrocket.l10n.Translator;
5 import net.sf.openrocket.logging.LogHelper;
6 import net.sf.openrocket.optimization.general.OptimizationException;
7 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter;
8 import net.sf.openrocket.simulation.FlightDataType;
9 import net.sf.openrocket.simulation.exception.MotorIgnitionException;
10 import net.sf.openrocket.simulation.exception.SimulationCancelledException;
11 import net.sf.openrocket.simulation.exception.SimulationException;
12 import net.sf.openrocket.simulation.exception.SimulationLaunchException;
13 import net.sf.openrocket.simulation.listeners.system.ApogeeEndListener;
14 import net.sf.openrocket.simulation.listeners.system.InterruptListener;
15 import net.sf.openrocket.startup.Application;
16 import net.sf.openrocket.unit.UnitGroup;
19 * An optimization parameter that computes the maximum altitude of a simulated flight.
21 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
23 public class MaximumAltitudeParameter implements OptimizableParameter {
25 private static final LogHelper log = Application.getLogger();
26 private static final Translator trans = Application.getTranslator();
29 public String getName() {
30 return trans.get("name");
34 public double computeValue(Simulation simulation) throws OptimizationException, InterruptedException {
36 log.debug("Running simulation to evaluate apogee altitude");
37 simulation.simulate(new ApogeeEndListener(), new InterruptListener());
38 log.debug("Maximum altitude was " + simulation.getSimulatedData().getBranch(0).getMaximum(FlightDataType.TYPE_ALTITUDE));
39 return simulation.getSimulatedData().getBranch(0).getMaximum(FlightDataType.TYPE_ALTITUDE);
40 } catch (MotorIgnitionException e) {
41 // A problem with motor ignition will cause optimization to fail
42 throw new OptimizationException(e);
43 } catch (SimulationLaunchException e) {
44 // Other launch exceptions result in zero altitude
46 } catch (SimulationCancelledException e) {
47 throw (InterruptedException) new InterruptedException("Optimization was interrupted").initCause(e);
48 } catch (SimulationException e) {
49 // Other exceptions fail
50 throw new OptimizationException(e);
55 public UnitGroup getUnitGroup() {
56 return UnitGroup.UNITS_DISTANCE;