Off-Design Missions#
Overview#
Off-design missions are missions that take an already designed and sized aircraft and attempt to run different mission trajectories, different payload quantities, or both.
There are two types of off-design missions supported in Aviary:
OFF_DESIGN_MIN_FUELMissions: the mission’s target range and aircraft payload mass are inputs and the fuel mass required is solved for.OFF_DESIGN_MAX_RANGEMissions: the aircraft payload and gross mass are inputs and the range of the aircraft is solved for.
There are 2 methods of running off-design missions:
Modifying
settings:problem_typevariable in an aviary input .csv or aviary values object.Calling
run_off_design_mission()after sizing an aircraft using the python api.
Running Off-Design Using the settings:problem_type Variable:#
The settings:problem_type variable provides a convenient way for the user to set common combinations of design variables, constraints and objective function for solving aircraft design or performance evaluation problems.
SIZINGMissions allow the optimizer to control bothaircraft:design:gross_massandmission:gross_massfor the given mission and objective.OFF_DESIGN_MIN_FUELMissions allow the optimizer to only control themission:gross_massto converge for a specified target range.aircraft:design:gross_massis fixed for an already sized aircraft.OFF_DESIGN_MAX_RANGEMissions allow the optimizer to maximizemission:rangefor a given inputmission:gross_mass.aircraft:design:gross_massis fixed for an already sized aircraft.MULTI_MISSIONtypically allow the optimizer to controlaircraft:design:gross_massand themission:gross_massfor each of the missions within multimission. See multi_mission documentation for full details.
This table contains a summary of the preset combinations of objectives, design variables and constraints.
|
objective |
design variables |
constraints |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
No additional design variables |
No additional constraints |
|
No default, user specified |
Custom setup - see multimission documentation |
Custom setup - see multimission documentation |
Note
This table does not show all the design variables for the problem, only those altered by the settings:problem_type variable.
Dymos will add additional design variables and constraints depending on number of phases, whether mach and altitude are to be optimized during those phases and any additional constraints in each phase.
For TWO_DEGREES_OF_FREEDOM equations of motion, there are additional design variables due to increased fidelity of the trajectory modelling.
The settings:problem_type variable can be set for off design missions in the aviary input .csv file:
settings:problem_type,off_design_min_fuel,unitless
If manually creating an aviary values object then it can be set before calling load_inputs():
from aviary.variable_info.enums import ProblemType
aviary_values.set_val(Settings.PROBLEM_TYPE, ProblemType.OFF_DESIGN_MAX_RANGE)
Note
MULTI_MISSION problem type must be set earlier when initializing the Aviary problem object itself, see multi mission documentation for more details.
Run the rest of the aviary problem as normal from this point and Aviary will take care of adding the appropriate objective, design variables, and constraints as detailed in the table above.
Note
Since Aviary is not re-sizing the aircraft it is important that all the variables in the aviary_values or .csv input contian the appropriate values to define an already sized aircraft.
Running Off-Design using the Python API run_off_design_mission() method:#
Following the successful convergence of a SIZING type aircraft and misison optimization, the run_off_design_mission() method can be run from the same python script.
Note
If the SIZING mission did not converge to a valid aircraft design, any off-design analysis will be invalid even if the off-design missions themselves converged.
This method has a number of arguments that tell aviary the conditions required for the off_design_mission. A simple example is shown in the off_design_mission example
If any of the arguments are unspecified or None then Aviary will assume the same values as for the SIZING problem. Full details of all the arguments can be found in the source docs.
The key arguments allow the user to set the problem_type, phase_info, payload (passengers + cargo) and fuel loading or mission range depending on the problem type.
There are 2 additional flags that allow the user to add aditional design variables to maximise gross mass or maximise cargo mass for a particular off-design mission.
The phase_info argument allows the user to specify different phase information for an off-design mission trajectory, more information can be found in The phase_info Format.
This can be required to achieve convergence when the off-design mission has a significantly different trajectory shape or duration compared to the the sizing mission.
For example, an aircraft sized for a very long-range mission might need its climb and descent profiles modified to operate on a shorter route.
Note
Off-design missions are run with the assumption that the sizing mission’s aircraft:design:gross_mass is the maximum structural mass the aircraft can support.
However, since mission:constraints:mass_residual is not added as a constraint for off-design, Aviary is capable of running and converging off-design missions with mission:gross_mass values greater than aircraft:design:gross_mass. The user is responsible for checking that they have run valid off-design missions.
Saving and Loading the sized aircraft#
The save_results() method can be used to save the Aviary problem to a JSON file so that it can be loaded and used for off-design mission analysis.
prob.save_results(json_filename = 'sizing_problem.json')
Note
This doesn’t actually save all the values in the Aviary problem, but saves the aviary_inputs and value of the Aircraft.Design.GROSS_MASS variable (which is all that is required for an off_design_mission). The Aviary team is working on a more complete method of saving the design aircraft details.
The _read_sizing_json() method can be used to create an aviary values object from the data saved into a JSON file using the save_results() method.
aviary_values = _read_sizing_json(json_filename = 'sizing_problem.json')
This aviary values object can then be fed into an aviary problem using the load_inputs() method.
The off-design mission analysis can then be run using method 1 above.
Note
Off-design missions cannot be run with more passengers than the original sizing mission.
For example, if aircraft:crew_and_payload:num_first_class within the Aviary inputs csv was set to 3, an off-design mission cannot be run where aircraft:crew_and_payload:num_first_class = 8 as the cabin for first class was sized for precisely 3 passengers.
Note
In cases where passengers or cargo are changed and the user has not specified a aircraft:crew_and_payload:cargo_container_mass in the Aviary input deck, this value is recalculated in the off-design mission.
It is the only parameter within the operating mass that gets recalculated between off-design and sizing. If this behavior is undesirable then a fixed override for aircraft:crew_and_payload:cargo_container_mass should be used.
Payload Range Diagram Functionality#
The Off-Design functionality is key for the generation of Payload Range Diagrams. See payload range documentation for more details.