mission.py

Analysis routines for simulating a mission profile with climb, cruise, and descent

class openconcept.analysis.mission.MissionFlightConditions(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Generates vectors of flight conditions for a mission profile

Inputs:
  • mission|climb|vs (float) – Vertical speed in the climb segment (scalar, m/s)
  • mission|descent|vs (float) – Vertical speed in the descent segment (should be neg; scalar, m/s)
  • mission|climb|Ueas (float) – Indicated/equiv. airspeed during climb (scalar, m/s)
  • mission|cruise|Ueas (float) – Indicated/equiv. airspeed in cruise (scalar, m/s)
  • mission|descent|Ueas (float) – Indicated/equiv. airspeed during descent (scalar, m/s)
  • mission|takeoff|h (float) – Takeoff (and landing, for now) altitude (scalar, m)
  • mission|cruise|h (float) – Cruise altitude (scalar, m)
Outputs:
  • fltcond|mission|vs (float) – Vertical speed vector for all mission phases / analysis points (vector, m/s)
  • fltcond|mission|Ueas (float) – Equivalent airspeed vector for all mission phases / analysis points (vector, m/s)
  • fltcond|mission|h (float) – Altitude at each analysis point (vector, m)
  • mission|climb|time (float) – Time to ascent from end of takeoff to start of cruise (scalar, s)
  • mission|descent|time (float) – Time to descend from end of cruise to landing (scalar, s)
  • mission|climb|dt (float) – Timestep length during climb phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
  • mission|descent|dt (float) – Timestep length during descent phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionNoReserves(**kwargs)[source]

Bases: openmdao.core.group.Group

This analysis group calculates energy/fuel consumption and feasibility for a given mission profile.

This component should be instantiated in the top-level aircraft analysis / optimization script. Suggested variable promotion list: “ac|aero|*”, “ac|geom|*”, “fltcond|mission|*”, “mission|*”

Inputs List:

From aircraft config:
  • ac|aero|polar|CD0_cruise
  • ac|aero|polar|e
  • ac|geom|wing|S_ref
  • ac|geom|wing|AR
From mission config:
  • mission|weight_initial
From mission flight condition generator:
  • fltcond|mission|vs
  • mission|climb|time
  • mission|climb|dt
  • mission|descent|time
  • mission|descent|dt
From standard atmosphere model/splitter:
  • fltcond|mission|Utrue
  • fltcond|mission|q
From propulsion model:
  • mission|battery_load
  • mission|fuel_flow
  • mission|thrust
Outputs:
  • mission|total_fuel (float) – Total fuel burn for climb, cruise, and descent (scalar, kg)
  • mission|total_battery_energy (float) – Total energy consumption for climb, cruise, and descent (scalar, kJ)
  • thrust_resid.thrust_residual (float) – Imbalance between thrust and drag for use with Newton solver (scalar, N)
class openconcept.analysis.mission.ExplicitThrustResidual(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes force imbalance in the aircraft x axis. Enables Newton solve for throttle at steady flight.

Inputs:
  • drag (float) – Aircraft drag force at each analysis point (vector, N)
  • fltcond|mission|singamma (float) – Sine of the flight path angle for all mission phases (vector, dimensionless)
  • mission|weights (float) – Aircraft weight at each analysis point (vector, kg)
  • mission|thrust (float) – Aircraft thrust force at each analysis point (vector, N)
Outputs:

thrust_residual (float) – Imbalance in x-axis force at each analysis point (vector, N)

Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.ComputeDesignMissionResiduals(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes weight margins to ensure feasible mission profiles

For aircraft including battery energy, use ComputeDesignMissionResidualsBattery instead

Inputs:
  • ac|weights|MTOW (float) – Maximum takeoff weight (scalar, kg)
  • ac|weights|W_fuel_max (float) – Max fuel weight (inc. vol limits; scalar, kg)
  • mission|payload (float) – Payload weight including pax (scalar, kg)
  • mission|total_fuel (float) – Fuel consume during the mission profile (not including TO; scalar, kg)
  • OEW (float) – Operational empty weight (scalar, kg)
  • takeoff|total_fuel (float) – Fuel consumed during takeoff (only if include_takeoff option is True)
Outputs:
  • mission|fuel_capacity_margin (float) – Excess fuel capacity for this mission (scalar, kg) Positive is good
  • mission|MTOW_margin (float) – Excess takeoff weight avail. for this mission (scalar, kg) Positive is good
  • fuel_burn (float) – Total fuel burn including takeoff and the mission (scalar, kg) Only when include_takeoff is True
Options:

include_takeoff (bool) – Set to True to enable takeoff fuel burn input

class openconcept.analysis.mission.ComputeDesignMissionResidualsBattery(**kwargs)[source]

Bases: openconcept.analysis.mission.ComputeDesignMissionResiduals

Computes weight and energy margins to ensure feasible mission profiles.

This routine is applicable to electric and hybrid architectures. For fuel-only designs, use ComputeDesignMissionResiduals instead.

Inputs:
  • ac|weights|MTOW (float) – Maximum takeoff weight (scalar, kg)
  • ac|weights|W_battery (float) – Battery weight (scalar, kg)
  • ac|weights|W_fuel_max (float) – Max fuel weight (inc. vol limits; scalar, kg)
  • battery_max_energy (float) – Maximum energy of the battery at 100% SOC (scalar, MJ)
  • mission|payload (float) – Payload weight including pax (scalar, kg)
  • mission|total_battery_energy (float) – Battery energy consumed during the mission profile (scalar, MJ)
  • mission|total_fuel (float) – Fuel consumed during the mission profile (not including TO; scalar, kg)
  • OEW (float) – Operational empty weight (scalar, kg)
  • takeoff|total_battery_energy (float) – Battery energy consumed during takeoff (only if include_takeoff option is True)
  • takeoff|total_fuel (float) – Fuel consumed during takeoff (only if include_takeoff option is True)
Outputs:
  • mission|battery_margin (float) – Excess battery energy for this mission (scalar, kg)
  • mission|fuel_capacity_margin (float) – Excess fuel capacity for this mission (scalar, kg) Positive is good
  • mission|MTOW_margin (float) – Excess takeoff weight avail. for this mission (scalar, kg) Positive is good
  • battery_energy_used (float) – Total battery energy used including takeoff and the mission (scalar, MJ) Only when include_takeoff is True
  • fuel_burn (float) – Total fuel burn including takeoff and the mission (scalar, kg) Only when include_takeoff is True
Options:

include_takeoff (bool) – Set to True to enable takeoff fuel burn input

class openconcept.analysis.mission.MissionGroundspeeds(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes groundspeed for vectorial true airspeed and true vertical speed.

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Inputs:
  • fltcond|mission|vs (float) – Vertical speed for all mission phases (vector, m/s)
  • fltcond|mission|Utrue (float) – True airspeed for all mission phases (vector, m/s)
Outputs:
  • mission|groundspeed (float) – True groundspeed for all mission phases (vector, m/s)
  • fltcond|mission|cosgamma (float) – Cosine of the flght path angle for all mission phases (vector, dimensionless)
  • fltcond|mission|singamma (float) – Sine of the flight path angle for all mission phases (vector, dimensionless)
Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionClimbDescentRanges(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes range over the ground during the climb and descent phases

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Inputs:
  • mission|groundspeed (float) – True groundspeed for all mission phases (vector, m/s)
  • mission|climb|time (float) – Time elapsed during the climb phase (scalar, s)
  • mission|descent|time (float) – Time elapsed during the descent phase (scalar, s)
Outputs:
  • mission|climb|range (float) – Distance over the ground during climb phase (scalar, m)
  • mission|descent|range (float) – Distance over the ground during descent phase (scalar , m)
Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionTimings(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes cruise distance, time, and dt for a given total mission range

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Inputs:
  • mission|range (float) – Total specified range for the given mission (vector, m)
  • mission|groundspeed (float) – True groundspeed for all mission phases (vector, m/s)
  • mission|climb|range (float) – Distance over the ground during climb phase (scalar, m)
  • mission|descent|range (float) – Distance over the ground during descent phase (scalar , m)
Outputs:
  • mission|cruise|range (float) – Distance over the ground during the cruise phase (scalar, m)
  • mission|cruise|time (float) – Time elapsed during cruise phase (scalar, s)
  • mission|cruise|dt (float) – Simpson subinterval timestep during the cruise phase (scalar, s)
Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionSegmentFuelBurns(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Integrates delta fuel between each analysis point

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Takes 3 * nn fuel flow rates; produces 3 * (nn - 1) fuel burns

Inputs:
  • mission|fuel_flow (float) – Fuel flow rate for all analysis points (vector, kg/s)
  • mission|climb|dt (float) – Timestep length during climb phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
  • mission|cruise|dt (float) – Timestep length during descent phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
  • mission|descent|dt (float) – Timestep length during descent phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
Outputs:

mission|segment_fuel (float) – Fuel burn increment between each analysis point (vector, kg) Note: if the number of analysis points in one phase is nn, the number of segment fuel burns is nn - 1

Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionSegmentBatteryEnergyUsed(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Integrates battery energy used between each analysis point

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Takes 3 * nn battery loads; produces 3 * (nn - 1) energy increments

Inputs:
  • mission|battery_load (float) – Battery load / power for all analysis points (vector, kW)
  • mission|climb|dt (float) – Timestep length during climb phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
  • mission|cruise|dt (float) – Timestep length during descent phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
  • mission|descent|dt (float) – Timestep length during descent phase (scalar, s) Note: this represents the timestep for the Simpson subinterval, not the whole inteval
Outputs:

mission|segment_battery_energy_used (float) – Battery energy increment between each analysis point (vector, kW*s) Note: if the number of analysis points in one phase is nn, the number of segment energies is nn - 1

Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionSegmentWeights(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes aircraft weight at each analysis point including fuel burned

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Inputs:
  • mission|segment_fuel (float) – Fuel burn increment between each analysis point (vector, kg) Note: if the number of analysis points in one phase is nn, the number of segment fuel burns is nn - 1
  • mission|weight_initial (float) – Weight immediately following takeoff (scalar, kg)
Outputs:

mission|weights (float) – Aircraft weight at each analysis point (vector, kg)

Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1

class openconcept.analysis.mission.MissionSegmentCL(**kwargs)[source]

Bases: openmdao.core.explicitcomponent.ExplicitComponent

Computes lift coefficient at each analysis point

This is a helper function for the main mission analysis routine MissionNoReserves and shouldn’t be instantiated directly.

Inputs:
  • mission|weights (float) – Aircraft weight at each analysis point (vector, kg)
  • fltcond|mission|q (float) – Dynamic pressure at each analysis point (vector, Pascal)
  • ac|geom|wing|S_ref (float) – Reference wing area (scalar, m**2)
  • fltcond|mission|cosgamma (float) – Cosine of the flght path angle for all mission phases (vector, dimensionless)
Outputs:

fltcond|mission|CL (float) – Lift coefficient (vector, dimensionless)

Options:

n_int_per_seg (int) – Number of Simpson’s rule intervals to use per mission segment. The total number of points is 2 * n_int_per_seg + 1