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.SimulationException;
11 import net.sf.openrocket.simulation.exception.SimulationLaunchException;
12 import net.sf.openrocket.startup.Application;
13 import net.sf.openrocket.unit.UnitGroup;
16 * An optimization parameter that computes the speed the rocket hits the ground.
18 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
20 public class GroundHitVelocityParameter implements OptimizableParameter {
22 private static final LogHelper log = Application.getLogger();
23 private static final Translator trans = Application.getTranslator();
26 public String getName() {
27 return trans.get("name");
31 public double computeValue(Simulation simulation) throws OptimizationException {
33 log.debug("Running simulation to evaluate ground hit speed");
34 simulation.simulate();
35 double value = simulation.getSimulatedData().getBranch(0).getLast(FlightDataType.TYPE_VELOCITY_TOTAL);
36 log.debug("Ground hit speed was " + value);
38 } catch (MotorIgnitionException e) {
39 // A problem with motor ignition will cause optimization to fail
40 throw new OptimizationException(e);
41 } catch (SimulationLaunchException e) {
42 // Other launch exceptions result in zero altitude
44 } catch (SimulationException e) {
45 // Other exceptions fail
46 throw new OptimizationException(e);
51 public UnitGroup getUnitGroup() {
52 return UnitGroup.UNITS_VELOCITY;