Level 2#

We have discussed Level 1 in great detail. As we have seen, Level 1 is relatively simple.

In Level 2, we see more flexibility and additional choices. You will be exposed to some simple Python code and see how Aviary establishes a problem from beginning to end. Each step is built upon the capabilities of Level 3. Users will be led to Level 3 in a natural way.

Level 2 is defined in the aviary/interface/methods_for_level1.py file and it has a single method run_aviary() with a few arguments. If you examine interface/level1.py you see that Level 1 prepares those arguments and then call run_aviary(). For aviary run_mission aircraft_for_bench_GwGm examples, those arguments are:

  • aircraft_filename: aircraft_for_bench_GwGm

  • phase_info: phase_info (loaded from aviary/interface/default_phase_info/gasp.py)

  • optimizer: IPOPT (the default is None)

  • analysis_scheme: AnalysisScheme.COLLOCATION (the default)

  • objective_type: None (default)

  • record_filename: problem_history.db (the default)

  • restart_filename: None (the default)

  • max_iter: 50 (the default)

All the above arguments are straightforward except objective_type. Even though objective_type is None, it is not treated as None. In this scenario, the objective is set based on problem_type when using the GASP-based mission method, but not the FLOPS-based mission. There are three options for problem_type. Aviary has the following mapping when objective_type is not set by user and mission_method is EquationsOfMotion.TWO_DEGREES_OF_FREEDOM:

problem_type

objective

SIZING

Mission.Objectives.FUEL

ALTERNATE

Mission.Objectives.FUEL

FALLOUT

Mission.Objectives.RANGE

In Aviary, problem_type is set to SIZING when it creates a vehicle (see create_vehicle). As you can see, since problem_type is SIZING by default in our case and we don’t manually alter this setting, Aviary set objective to Mission.Objectives.FUEL. We will discuss more options of objective_type later on.

Note

If you want to use a custom objective function, you can set any arbitrary variable to be the objective by directly calling the OpenMDAO add_objective method instead of using Aviary’s built-in add_objective() method.

In our onboarding runs, we want to limit the number of iterations to 1 so that they all run faster. As a result, we will not consider whether the optimization converges. So, we will have

`max_iter`: 1

Level 2 cannot be run via aviary command on the command line. Users must develop level 2 Python code. The good news is that the Python code is pretty small. You can follow the following steps in order (we do not include function arguments for simplicity):

  • prob = AviaryProblem()

  • prob.load_inputs()

  • prob.check_and_preprocess_inputs()

  • prob.add_pre_mission_systems()

  • prob.add_phases()

  • prob.add_post_mission_systems()

  • prob.link_phases()

  • prob.add_driver()

  • prob.add_design_variables()

  • prob.add_objective()

  • prob.setup()

  • prob.set_initial_guesses()

  • prob.run_aviary_problem()

In the rest of this page, we will show a few examples to demonstrate how level 2 runs these steps. We start from rebuilding aircraft_for_bench_GwGm model in great details.

Build level 2 for the same aircraft_for_bench_GwGm Model#

We create a level 2 Python script to reproduce the aircraft_for_bench_GwGm model run that was used as an example in the level 1 document (this time we won’t use the level 1 functionality). The methods listed above are defined in level 3 (namely, interface/methods_for_level2.py). You can run the code as follows:

from aviary.api import Aircraft, Mission
import aviary.api as av
from copy import deepcopy


# inputs that run_aviary() requires
aircraft_filename = "models/test_aircraft/aircraft_for_bench_GwGm.csv"
optimizer = "IPOPT"
analysis_scheme = av.AnalysisScheme.COLLOCATION
objective_type = None
record_filename = 'aviary_history.db'
restart_filename = None
max_iter = 0
phase_info = deepcopy(av.default_2DOF_phase_info)

# Build problem
prob = av.AviaryProblem(analysis_scheme)

# Load aircraft and options data from user
# Allow for user overrides here
prob.load_inputs(aircraft_filename, phase_info)

# Preprocess inputs
prob.check_and_preprocess_inputs()

# adds a pre-mission group (propulsion, geometry, aerodynamics, and mass)
prob.add_pre_mission_systems()

# adds a sequence of core mission phases.
prob.add_phases()

# adds a landing phase
prob.add_post_mission_systems()

# Link phases and variables
prob.link_phases()

# adds an optimizer to the driver
prob.add_driver(optimizer, max_iter=max_iter)

# adds relevant design variables
prob.add_design_variables()

# Load optimization problem formulation
# Detail which variables the optimizer can control
prob.add_objective(objective_type=objective_type)

# setup the problem
prob.setup()

# set initial guesses of states and controls variables
prob.set_initial_guesses()

# run the problem we just set up
prob.run_aviary_problem(record_filename, restart_filename=restart_filename)
/home/runner/work/Aviary/Aviary/aviary/utils/preprocessors.py:272: UserWarning: Mount location for engines of type <turbofan_23k_1> not specified. Wing-mounted engines are assumed.
  warnings.warn(
The following variables have been overridden:
  'aircraft:fuselage:wetted_area  4000  ft**2
  'aircraft:horizontal_tail:form_factor  1.25  unitless
  'aircraft:nacelle:form_factor  [1.5]  unitless
  'aircraft:strut:fuselage_interference_factor  0  unitless
  'aircraft:vertical_tail:form_factor  1.25  unitless
  'aircraft:wing:form_factor  1.25  unitless
--- Constraint Report [traj] ---
    --- groundroll ---
        None
    --- rotation ---
        [final]   0.0000e+00 == normal_force [lbf]
    --- ascent ---
        [final]   5.0000e+02 == altitude [ft]
        [path]    0.0000e+00 <= load_factor <= 1.1000e+00  [unitless]
        [path]    0.0000e+00 <= fuselage_pitch <= 1.5000e+01  [deg]
    --- accel ---
        [final]   2.5000e+02 == EAS [kn]
    --- climb1 ---
        [final]   1.0000e+04 == altitude [ft]
    --- climb2 ---
        [final]   3.7500e+04 == altitude [ft]
        [final]   1.0000e-01 <= altitude_rate  [ft/min]
        [final]   8.0000e-01 == mach [unitless]
    --- cruise ---
        None
    --- desc1 ---
        [final]   1.0000e+04 == altitude [ft]
    --- desc2 ---
        [final]   1.0000e+03 == altitude [ft]
'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.ascent' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.


'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.climb1' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.


'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.desc1' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'problem4' was computed 3 times, taking 1.9497615330000144 seconds.
Total jacobian shape: (238, 212) 
Jacobian shape: (238, 212)  (7.98% nonzero)
FWD solves: 48   REV solves: 0
Total colors vs. total size: 48 vs 212  (77.36% improvement)

Sparsity computed using tolerance: 1e-25
Time to compute sparsity:   1.9498 sec
Time to compute coloring:   0.1949 sec
Memory to compute coloring:   1.2500 MB
Coloring created on: 2024-11-04 17:21:23
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/total_jac.py:1646: DerivativesWarning:Constraints or objectives [('traj.phases.climb2->final_boundary_constraint->mach', inds=[(11, 0)])] cannot be impacted by the design variables of the problem.
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.

Number of nonzeros in equality constraint Jacobian...:     2827
Number of nonzeros in inequality constraint Jacobian.:      599
Number of nonzeros in Lagrangian Hessian.............:        0

Total number of variables............................:      212
                     variables with only lower bounds:        2
                variables with lower and upper bounds:      210
                     variables with only upper bounds:        0
Total number of equality constraints.................:      204
Total number of inequality constraints...............:       33
        inequality constraints with only lower bounds:        1
   inequality constraints with lower and upper bounds:       32
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  5.2731333e+00 1.74e+03 1.65e+01  -5.0 0.00e+00    -  0.00e+00 0.00e+00   0

Number of Iterations....: 0

                                   (scaled)                 (unscaled)
Objective...............:   5.2731333333333330e+00    5.2731333333333330e+00
Dual infeasibility......:   1.6500000000000000e+01    1.6500000000000000e+01
Constraint violation....:   3.4448886382184898e+00    1.7364599999999916e+03
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   7.1428571428571420e+15    7.1428571428571420e+15
Overall NLP error.......:   7.1428571428571420e+15    7.1428571428571420e+15


Number of objective function evaluations             = 1
Number of objective gradient evaluations             = 1
Number of equality constraint evaluations            = 1
Number of inequality constraint evaluations          = 1
Number of equality constraint Jacobian evaluations   = 1
Number of inequality constraint Jacobian evaluations = 1
Number of Lagrangian Hessian evaluations             = 0
Total seconds in IPOPT                               = 1.434

EXIT: Maximum Number of Iterations Exceeded.
minimal_print is not available for this solution


Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
    Objective Function: _objfunc

    Solution: 
--------------------------------------------------------------------------------
    Total Time:                    1.4347
       User Objective Time :       0.2002
       User Sensitivity Time :     1.2162
       Interface Time :            0.0115
       Opt Solver Time:            0.0067
    Calls to Objective Function :       2
    Calls to Sens Function :            2


   Objectives
      Index  Name                               Value
          0  mission:objectives:fuel     5.273133E+00

   Variables (c - continuous, i - integer, d - discrete)
      Index  Name                                      Type      Lower Bound            Value      Upper Bound     Status
          0  mission:design:gross_mass_0                  c     5.714286E-05     1.002286E+00     1.000000E+30           
          1  mission:summary:gross_mass_0                 c     5.714286E-05     1.002286E+00     1.000000E+30           
          2  mission:takeoff:ascent_t_initial_0           c     0.000000E+00     3.333333E-01     3.333333E+00           
          3  mission:takeoff:ascent_duration_0            c     1.000000E-01     2.500000E+00     1.000000E+02           
          4  tau_gear_0                                   c     1.000000E-02     2.000000E-01     1.000000E+00           
          5  tau_flaps_0                                  c     1.000000E-02     9.000000E-01     1.000000E+00           
          6  traj.accel.t_duration_0                      c     9.950249E-03     1.293532E-01     1.990050E+00           
          7  traj.accel.states:velocity_0                 c     0.000000E+00     5.807832E-01     1.200000E+00           
          8  traj.accel.states:velocity_1                 c     0.000000E+00     8.992168E-01     1.200000E+00           
          9  traj.accel.states:velocity_2                 c     0.000000E+00     1.000000E+00     1.200000E+00           
         10  traj.accel.states:mass_0                     c     0.000000E+00     1.157640E+00     6.666667E+15           
         11  traj.accel.states:mass_1                     c     0.000000E+00     1.157640E+00     6.666667E+15           
         12  traj.accel.states:mass_2                     c     0.000000E+00     1.157640E+00     6.666667E+15           
         13  traj.accel.states:mass_3                     c     0.000000E+00     1.157640E+00     6.666667E+15           
         14  traj.accel.states:distance_0                 c     0.000000E+00     4.460254E-01     3.000000E+01           
         15  traj.accel.states:distance_1                 c     0.000000E+00     6.072791E-01     3.000000E+01           
         16  traj.accel.states:distance_2                 c     0.000000E+00     6.583153E-01     3.000000E+01           
         17  traj.ascent.states:flight_path_angle_0       c    -9.999996E+00     1.239361E-02     1.999999E+01           
         18  traj.ascent.states:flight_path_angle_1       c    -9.999996E+00     2.949427E-02     1.999999E+01           
         19  traj.ascent.states:flight_path_angle_2       c    -9.999996E+00     3.490657E-02     1.999999E+01           
         20  traj.ascent.states:flight_path_angle_3       c    -9.999996E+00     4.730019E-02     1.999999E+01           
         21  traj.ascent.states:flight_path_angle_4       c    -9.999996E+00     6.440085E-02     1.999999E+01           
         22  traj.ascent.states:flight_path_angle_5       c    -9.999996E+00     6.981315E-02     1.999999E+01           
         23  traj.ascent.states:flight_path_angle_6       c    -9.999996E+00     8.220676E-02     1.999999E+01           
         24  traj.ascent.states:flight_path_angle_7       c    -9.999996E+00     9.930742E-02     1.999999E+01           
         25  traj.ascent.states:flight_path_angle_8       c    -9.999996E+00     1.047197E-01     1.999999E+01           
         26  traj.ascent.states:flight_path_angle_9       c    -9.999996E+00     1.171133E-01     1.999999E+01           
         27  traj.ascent.states:flight_path_angle_10      c    -9.999996E+00     1.342140E-01     1.999999E+01           
         28  traj.ascent.states:flight_path_angle_11      c    -9.999996E+00     1.396263E-01     1.999999E+01           
         29  traj.ascent.states:altitude_0                c     0.000000E+00     6.999990E-03     7.000000E-01           
         30  traj.ascent.states:altitude_1                c     0.000000E+00     4.438138E-02     7.000000E-01           
         31  traj.ascent.states:altitude_2                c     0.000000E+00     1.056186E-01     7.000000E-01           
         32  traj.ascent.states:altitude_3                c     0.000000E+00     1.250000E-01     7.000000E-01           
         33  traj.ascent.states:altitude_4                c     0.000000E+00     1.693814E-01     7.000000E-01           
         34  traj.ascent.states:altitude_5                c     0.000000E+00     2.306186E-01     7.000000E-01           
         35  traj.ascent.states:altitude_6                c     0.000000E+00     2.500000E-01     7.000000E-01           
         36  traj.ascent.states:altitude_7                c     0.000000E+00     2.943814E-01     7.000000E-01           
         37  traj.ascent.states:altitude_8                c     0.000000E+00     3.556186E-01     7.000000E-01           
         38  traj.ascent.states:altitude_9                c     0.000000E+00     3.750000E-01     7.000000E-01           
         39  traj.ascent.states:altitude_10               c     0.000000E+00     4.193814E-01     7.000000E-01           
         40  traj.ascent.states:altitude_11               c     0.000000E+00     4.806186E-01     7.000000E-01           
         41  traj.ascent.states:altitude_12               c     0.000000E+00     5.000000E-01     7.000000E-01           
         42  traj.ascent.states:velocity_0                c     0.000000E+00     7.655335E-01     3.500000E+00           
         43  traj.ascent.states:velocity_1                c     0.000000E+00     7.869665E-01     3.500000E+00           
         44  traj.ascent.states:velocity_2                c     0.000000E+00     7.937500E-01     3.500000E+00           
         45  traj.ascent.states:velocity_3                c     0.000000E+00     8.092835E-01     3.500000E+00           
         46  traj.ascent.states:velocity_4                c     0.000000E+00     8.307165E-01     3.500000E+00           
         47  traj.ascent.states:velocity_5                c     0.000000E+00     8.375000E-01     3.500000E+00           
         48  traj.ascent.states:velocity_6                c     0.000000E+00     8.530335E-01     3.500000E+00           
         49  traj.ascent.states:velocity_7                c     0.000000E+00     8.744665E-01     3.500000E+00           
         50  traj.ascent.states:velocity_8                c     0.000000E+00     8.812500E-01     3.500000E+00           
         51  traj.ascent.states:velocity_9                c     0.000000E+00     8.967835E-01     3.500000E+00           
         52  traj.ascent.states:velocity_10               c     0.000000E+00     9.182165E-01     3.500000E+00           
         53  traj.ascent.states:velocity_11               c     0.000000E+00     9.250000E-01     3.500000E+00           
         54  traj.ascent.states:mass_0                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         55  traj.ascent.states:mass_1                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         56  traj.ascent.states:mass_2                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         57  traj.ascent.states:mass_3                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         58  traj.ascent.states:mass_4                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         59  traj.ascent.states:mass_5                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         60  traj.ascent.states:mass_6                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         61  traj.ascent.states:mass_7                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         62  traj.ascent.states:mass_8                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         63  traj.ascent.states:mass_9                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         64  traj.ascent.states:mass_10                   c     0.000000E+00     1.157640E+00     6.666667E+15           
         65  traj.ascent.states:mass_11                   c     0.000000E+00     1.157640E+00     6.666667E+15           
         66  traj.ascent.states:mass_12                   c     0.000000E+00     1.157640E+00     6.666667E+15           
         67  traj.ascent.states:distance_0                c     0.000000E+00     4.532577E-01     1.500000E+00           
         68  traj.ascent.states:distance_1                c     0.000000E+00     5.267423E-01     1.500000E+00           
         69  traj.ascent.states:distance_2                c     0.000000E+00     5.500000E-01     1.500000E+00           
         70  traj.ascent.states:distance_3                c     0.000000E+00     6.032577E-01     1.500000E+00           
         71  traj.ascent.states:distance_4                c     0.000000E+00     6.767423E-01     1.500000E+00           
         72  traj.ascent.states:distance_5                c     0.000000E+00     7.000000E-01     1.500000E+00           
         73  traj.ascent.states:distance_6                c     0.000000E+00     7.532577E-01     1.500000E+00           
         74  traj.ascent.states:distance_7                c     0.000000E+00     8.267423E-01     1.500000E+00           
         75  traj.ascent.states:distance_8                c     0.000000E+00     8.500000E-01     1.500000E+00           
         76  traj.ascent.states:distance_9                c     0.000000E+00     9.032577E-01     1.500000E+00           
         77  traj.ascent.states:distance_10               c     0.000000E+00     9.767423E-01     1.500000E+00           
         78  traj.ascent.states:distance_11               c     0.000000E+00     1.000000E+00     1.500000E+00           
         79  traj.ascent.controls:alpha_0                 c    -6.000000E+00     5.000000E-01     6.000000E+00           
         80  traj.ascent.controls:alpha_1                 c    -6.000000E+00     4.822474E-01     6.000000E+00           
         81  traj.ascent.controls:alpha_2                 c    -6.000000E+00     4.577526E-01     6.000000E+00           
         82  traj.ascent.controls:alpha_3                 c    -6.000000E+00     4.500000E-01     6.000000E+00           
         83  traj.ascent.controls:alpha_4                 c    -6.000000E+00     4.322474E-01     6.000000E+00           
         84  traj.ascent.controls:alpha_5                 c    -6.000000E+00     4.077526E-01     6.000000E+00           
         85  traj.ascent.controls:alpha_6                 c    -6.000000E+00     4.000000E-01     6.000000E+00           
         86  traj.ascent.controls:alpha_7                 c    -6.000000E+00     3.822474E-01     6.000000E+00           
         87  traj.ascent.controls:alpha_8                 c    -6.000000E+00     3.577526E-01     6.000000E+00           
         88  traj.ascent.controls:alpha_9                 c    -6.000000E+00     3.500000E-01     6.000000E+00           
         89  traj.ascent.controls:alpha_10                c    -6.000000E+00     3.322474E-01     6.000000E+00           
         90  traj.ascent.controls:alpha_11                c    -6.000000E+00     3.077526E-01     6.000000E+00           
         91  traj.climb1.t_duration_0                     c     1.818182E-01     7.272727E-01     1.818182E+00           
         92  traj.climb1.states:altitude_0                c     4.000000E-02     5.000000E-02     1.100000E+00           
         93  traj.climb1.states:altitude_1                c     4.000000E-02     3.872985E-01     1.100000E+00           
         94  traj.climb1.states:altitude_2                c     4.000000E-02     8.527015E-01     1.100000E+00           
         95  traj.climb1.states:altitude_3                c     4.000000E-02     1.000000E+00     1.100000E+00           
         96  traj.climb1.states:mass_0                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         97  traj.climb1.states:mass_1                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         98  traj.climb1.states:mass_2                    c     0.000000E+00     1.157640E+00     6.666667E+15           
         99  traj.climb1.states:mass_3                    c     0.000000E+00     1.157640E+00     6.666667E+15           
        100  traj.climb1.states:distance_0                c     0.000000E+00     7.966287E-01     5.000000E+01           
        101  traj.climb1.states:distance_1                c     0.000000E+00     1.441643E+00     5.000000E+01           
        102  traj.climb1.states:distance_2                c     0.000000E+00     1.645788E+00     5.000000E+01           
        103  traj.climb2.t_duration_0                     c     2.325581E-02     1.511628E-01     1.976744E+00           
        104  traj.climb2.states:altitude_0                c     3.000000E-01     4.418211E-01     1.333333E+00           
        105  traj.climb2.states:altitude_1                c     3.000000E-01     5.915122E-01     1.333333E+00           
        106  traj.climb2.states:altitude_2                c     3.000000E-01     6.388889E-01     1.333333E+00           
        107  traj.climb2.states:altitude_3                c     3.000000E-01     7.473767E-01     1.333333E+00           
        108  traj.climb2.states:altitude_4                c     3.000000E-01     8.970677E-01     1.333333E+00           
        109  traj.climb2.states:altitude_5                c     3.000000E-01     9.444444E-01     1.333333E+00           
        110  traj.climb2.states:altitude_6                c     3.000000E-01     1.052932E+00     1.333333E+00           
        111  traj.climb2.states:altitude_7                c     3.000000E-01     1.202623E+00     1.333333E+00           
        112  traj.climb2.states:altitude_8                c     3.000000E-01     1.250000E+00     1.333333E+00           
        113  traj.climb2.states:mass_0                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        114  traj.climb2.states:mass_1                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        115  traj.climb2.states:mass_2                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        116  traj.climb2.states:mass_3                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        117  traj.climb2.states:mass_4                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        118  traj.climb2.states:mass_5                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        119  traj.climb2.states:mass_6                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        120  traj.climb2.states:mass_7                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        121  traj.climb2.states:mass_8                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        122  traj.climb2.states:mass_9                    c     0.000000E+00     1.146064E+00     6.666667E+15           
        123  traj.climb2.states:distance_0                c     2.000000E-02     3.681136E-02     2.000000E+00           
        124  traj.climb2.states:distance_1                c     2.000000E-02     4.218648E-02     2.000000E+00           
        125  traj.climb2.states:distance_2                c     2.000000E-02     4.388769E-02     2.000000E+00           
        126  traj.climb2.states:distance_3                c     2.000000E-02     4.778328E-02     2.000000E+00           
        127  traj.climb2.states:distance_4                c     2.000000E-02     5.315840E-02     2.000000E+00           
        128  traj.climb2.states:distance_5                c     2.000000E-02     5.485961E-02     2.000000E+00           
        129  traj.climb2.states:distance_6                c     2.000000E-02     5.875520E-02     2.000000E+00           
        130  traj.climb2.states:distance_7                c     2.000000E-02     6.413033E-02     2.000000E+00           
        131  traj.climb2.states:distance_8                c     2.000000E-02     6.583153E-02     2.000000E+00           
        132  traj.cruise.t_initial_0                      c     0.000000E+00     1.714810E+00     1.000000E+02           
        133  traj.cruise.t_duration_0                     c    -2.000000E+02    -7.000000E-01    -2.000000E-05           
        134  traj.desc1.t_duration_0                      c     5.000000E-01     8.333333E-01     1.500000E+00           
        135  traj.desc1.states:altitude_0                 c     3.333333E-02     1.250000E+00     1.333333E+00           
        136  traj.desc1.states:altitude_1                 c     3.333333E-02     1.141512E+00     1.333333E+00           
        137  traj.desc1.states:altitude_2                 c     3.333333E-02     9.918211E-01     1.333333E+00           
        138  traj.desc1.states:altitude_3                 c     3.333333E-02     9.444444E-01     1.333333E+00           
        139  traj.desc1.states:altitude_4                 c     3.333333E-02     8.359566E-01     1.333333E+00           
        140  traj.desc1.states:altitude_5                 c     3.333333E-02     6.862656E-01     1.333333E+00           
        141  traj.desc1.states:altitude_6                 c     3.333333E-02     6.388889E-01     1.333333E+00           
        142  traj.desc1.states:altitude_7                 c     3.333333E-02     5.304011E-01     1.333333E+00           
        143  traj.desc1.states:altitude_8                 c     3.333333E-02     3.807100E-01     1.333333E+00           
        144  traj.desc1.states:altitude_9                 c     3.333333E-02     3.333333E-01     1.333333E+00           
        145  traj.desc1.states:mass_0                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        146  traj.desc1.states:mass_1                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        147  traj.desc1.states:mass_2                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        148  traj.desc1.states:mass_3                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        149  traj.desc1.states:mass_4                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        150  traj.desc1.states:mass_5                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        151  traj.desc1.states:mass_6                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        152  traj.desc1.states:mass_7                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        153  traj.desc1.states:mass_8                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        154  traj.desc1.states:mass_9                     c     0.000000E+00     9.714286E-01     7.142857E+15           
        155  traj.desc1.states:distance_0                 c     8.163265E-01     9.247340E-01     1.360544E+00           
        156  traj.desc1.states:distance_1                 c     8.163265E-01     9.312660E-01     1.360544E+00           
        157  traj.desc1.states:distance_2                 c     8.163265E-01     9.333333E-01     1.360544E+00           
        158  traj.desc1.states:distance_3                 c     8.163265E-01     9.380673E-01     1.360544E+00           
        159  traj.desc1.states:distance_4                 c     8.163265E-01     9.445993E-01     1.360544E+00           
        160  traj.desc1.states:distance_5                 c     8.163265E-01     9.466667E-01     1.360544E+00           
        161  traj.desc1.states:distance_6                 c     8.163265E-01     9.514007E-01     1.360544E+00           
        162  traj.desc1.states:distance_7                 c     8.163265E-01     9.579327E-01     1.360544E+00           
        163  traj.desc1.states:distance_8                 c     8.163265E-01     9.600000E-01     1.360544E+00           
        164  traj.desc2.t_duration_0                      c     3.921569E-02     1.960784E-01     1.960784E+00           
        165  traj.desc2.states:altitude_0                 c    -5.555556E-02     9.269457E-01     1.111111E+00           
        166  traj.desc2.states:altitude_1                 c    -5.555556E-02     7.692339E-01     1.111111E+00           
        167  traj.desc2.states:altitude_2                 c    -5.555556E-02     5.586715E-01     1.111111E+00           
        168  traj.desc2.states:altitude_3                 c    -5.555556E-02     3.369847E-01     1.111111E+00           
        169  traj.desc2.states:altitude_4                 c    -5.555556E-02     1.480786E-01     1.111111E+00           
        170  traj.desc2.states:altitude_5                 c    -5.555556E-02     2.931643E-02     1.111111E+00           
        171  traj.desc2.states:altitude_6                 c    -5.555556E-02     0.000000E+00     1.111111E+00           
        172  traj.desc2.states:mass_0                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        173  traj.desc2.states:mass_1                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        174  traj.desc2.states:mass_2                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        175  traj.desc2.states:mass_3                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        176  traj.desc2.states:mass_4                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        177  traj.desc2.states:mass_5                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        178  traj.desc2.states:mass_6                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        179  traj.desc2.states:mass_7                     c     0.000000E+00     9.066667E-01     6.666667E+15           
        180  traj.desc2.states:distance_0                 c     0.000000E+00     1.011068E+00     1.428571E+00           
        181  traj.desc2.states:distance_1                 c     0.000000E+00     1.017692E+00     1.428571E+00           
        182  traj.desc2.states:distance_2                 c     0.000000E+00     1.026536E+00     1.428571E+00           
        183  traj.desc2.states:distance_3                 c     0.000000E+00     1.035847E+00     1.428571E+00           
        184  traj.desc2.states:distance_4                 c     0.000000E+00     1.043781E+00     1.428571E+00           
        185  traj.desc2.states:distance_5                 c     0.000000E+00     1.048769E+00     1.428571E+00           
        186  traj.desc2.states:distance_6                 c     0.000000E+00     1.050000E+00     1.428571E+00           
        187  traj.groundroll.t_duration_0                 c     1.980198E-02     7.920792E-01     1.980198E+00           
        188  traj.groundroll.states:velocity_0            c     0.000000E+00     3.390025E-01     6.666667E+00           
        189  traj.groundroll.states:velocity_1            c     0.000000E+00     8.061495E-01     6.666667E+00           
        190  traj.groundroll.states:velocity_2            c     0.000000E+00     9.540000E-01     6.666667E+00           
        191  traj.groundroll.states:mass_0                c     0.000000E+00     1.157640E+00     6.666667E+15           
        192  traj.groundroll.states:mass_1                c     0.000000E+00     1.157640E+00     6.666667E+15           
        193  traj.groundroll.states:mass_2                c     0.000000E+00     1.157640E+00     6.666667E+15           
        194  traj.groundroll.states:mass_3                c     0.000000E+00     1.157640E+00     6.666667E+15           
        195  traj.groundroll.states:distance_0            c     0.000000E+00     1.183503E-01     3.333333E+00           
        196  traj.groundroll.states:distance_1            c     0.000000E+00     2.816497E-01     3.333333E+00           
        197  traj.groundroll.states:distance_2            c     0.000000E+00     3.333333E-01     3.333333E+00           
        198  traj.rotation.t_duration_0                   c     1.980198E-02     9.900990E-02     1.980198E+00           
        199  traj.rotation.states:alpha_0                 c     0.000000E+00     9.999990E-03     1.000000E+00           
        200  traj.rotation.states:alpha_1                 c     0.000000E+00     9.999990E-03     1.000000E+00           
        201  traj.rotation.states:alpha_2                 c     0.000000E+00     9.999990E-03     1.000000E+00           
        202  traj.rotation.states:velocity_0              c     0.000000E+00     1.454854E+00     1.000000E+01           
        203  traj.rotation.states:velocity_1              c     0.000000E+00     1.489146E+00     1.000000E+01           
        204  traj.rotation.states:velocity_2              c     0.000000E+00     1.500000E+00     1.000000E+01           
        205  traj.rotation.states:mass_0                  c     0.000000E+00     1.157640E+00     6.666667E+15           
        206  traj.rotation.states:mass_1                  c     0.000000E+00     1.157640E+00     6.666667E+15           
        207  traj.rotation.states:mass_2                  c     0.000000E+00     1.157640E+00     6.666667E+15           
        208  traj.rotation.states:mass_3                  c     0.000000E+00     1.157640E+00     6.666667E+15           
        209  traj.rotation.states:distance_0              c     0.000000E+00     7.587713E-01     2.000000E+00           
        210  traj.rotation.states:distance_1              c     0.000000E+00     7.900883E-01     2.000000E+00           
        211  traj.rotation.states:distance_2              c     0.000000E+00     8.000000E-01     2.000000E+00           

   Constraints (i - inequality, e - equality)
      Index  Name                                                          Type          Lower           Value           Upper    Status  Lagrange Multiplier (N/A)
          0  mission:constraints:range_residual                               e   0.000000E+00    4.547474E-14    0.000000E+00              9.00000E+100
          1  h_fit.h_init_gear                                                e   1.000000E+00   -7.943950E+00    1.000000E+00         E    9.00000E+100
          2  h_fit.h_init_flaps                                               e   1.000000E+00   -5.161972E-01    1.000000E+00         E    9.00000E+100
          3  groundroll_boundary.velocity                                     e   0.000000E+00   -2.184640E-02    0.000000E+00         E    9.00000E+100
          4  gtow_constraint.GTOW                                             e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
          5  mission:constraints:mass_residual                                e   0.000000E+00    8.367697E-03    0.000000E+00         E    9.00000E+100
          6  taxi_groundroll_mass_constraint.mass                             e   0.000000E+00   -1.545558E-01    0.000000E+00         E    9.00000E+100
          7  traj.linkages.groundroll:mass_final|rotation:mass_initial        e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
          8  traj.linkages.rotation:mass_final|ascent:mass_initial            e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
          9  traj.linkages.rotation:alpha_final|ascent:alpha_initial          e   0.000000E+00    6.366719E-03    0.000000E+00         E    9.00000E+100
         10  traj.linkages.ascent:mass_final|accel:mass_initial               e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         11  traj.linkages.accel:mass_final|climb1:mass_initial               e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         12  traj.linkages.climb1:mass_final|climb2:mass_initial              e   0.000000E+00    1.736460E+03    0.000000E+00         E    9.00000E+100
         13  traj.linkages.climb2:mass_final|cruise:mass_initial              e   0.000000E+00    4.285400E-03    0.000000E+00         E    9.00000E+100
         14  traj.linkages.cruise:mass_final|desc1:mass_initial               e   0.000000E+00    4.810000E-03    0.000000E+00         E    9.00000E+100
         15  traj.linkages.desc1:mass_final|desc2:mass_initial                e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         16  traj.phases.accel->final_boundary_constraint->EAS                e   1.000000E+00    9.927554E-01    1.000000E+00         E    9.00000E+100
         17  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00    5.831548E-02    0.000000E+00         E    9.00000E+100
         18  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00    5.874534E-02    0.000000E+00         E    9.00000E+100
         19  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00    6.150213E-02    0.000000E+00         E    9.00000E+100
         20  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00    1.596440E-04    0.000000E+00         E    9.00000E+100
         21  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00    1.608753E-04    0.000000E+00         E    9.00000E+100
         22  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00    1.626472E-04    0.000000E+00         E    9.00000E+100
         23  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    9.777328E-02    0.000000E+00         E    9.00000E+100
         24  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    8.943944E-02    0.000000E+00         E    9.00000E+100
         25  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    7.794045E-02    0.000000E+00         E    9.00000E+100
         26  traj.phases.ascent->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
         27  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.271955E-01    0.000000E+00         E    9.00000E+100
         28  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.239933E-01    0.000000E+00         E    9.00000E+100
         29  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.153738E-01    0.000000E+00         E    9.00000E+100
         30  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.124579E-01    0.000000E+00         E    9.00000E+100
         31  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.058678E-01    0.000000E+00         E    9.00000E+100
         32  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.971449E-01    0.000000E+00         E    9.00000E+100
         33  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.944935E-01    0.000000E+00         E    9.00000E+100
         34  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.886165E-01    0.000000E+00         E    9.00000E+100
         35  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.809362E-01    0.000000E+00         E    9.00000E+100
         36  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.786054E-01    0.000000E+00         E    9.00000E+100
         37  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.734429E-01    0.000000E+00         E    9.00000E+100
         38  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    2.667063E-01    0.000000E+00         E    9.00000E+100
         39  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    4.500002E-02    0.000000E+00         E    9.00000E+100
         40  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    4.880564E-02    0.000000E+00         E    9.00000E+100
         41  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    3.890488E-02    0.000000E+00         E    9.00000E+100
         42  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    3.327824E-02    0.000000E+00         E    9.00000E+100
         43  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    2.213497E-02    0.000000E+00         E    9.00000E+100
         44  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    6.104057E-03    0.000000E+00         E    9.00000E+100
         45  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    8.727384E-04    0.000000E+00         E    9.00000E+100
         46  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.139040E-02    0.000000E+00         E    9.00000E+100
         47  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -2.895648E-02    0.000000E+00         E    9.00000E+100
         48  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -3.467113E-02    0.000000E+00         E    9.00000E+100
         49  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -4.803617E-02    0.000000E+00         E    9.00000E+100
         50  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -6.711102E-02    0.000000E+00         E    9.00000E+100
         51  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -3.730269E-02    0.000000E+00         E    9.00000E+100
         52  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -3.222433E-02    0.000000E+00         E    9.00000E+100
         53  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -2.621911E-02    0.000000E+00         E    9.00000E+100
         54  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -2.437244E-02    0.000000E+00         E    9.00000E+100
         55  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -2.016566E-02    0.000000E+00         E    9.00000E+100
         56  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -1.438596E-02    0.000000E+00         E    9.00000E+100
         57  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -1.256933E-02    0.000000E+00         E    9.00000E+100
         58  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -8.413797E-03    0.000000E+00         E    9.00000E+100
         59  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -2.689611E-03    0.000000E+00         E    9.00000E+100
         60  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -8.803422E-04    0.000000E+00         E    9.00000E+100
         61  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    3.257993E-03    0.000000E+00         E    9.00000E+100
         62  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    8.956421E-03    0.000000E+00         E    9.00000E+100
         63  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.679909E-05    0.000000E+00         E    9.00000E+100
         64  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.681276E-05    0.000000E+00         E    9.00000E+100
         65  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.680776E-05    0.000000E+00         E    9.00000E+100
         66  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.680384E-05    0.000000E+00         E    9.00000E+100
         67  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.679065E-05    0.000000E+00         E    9.00000E+100
         68  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.676870E-05    0.000000E+00         E    9.00000E+100
         69  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.676740E-05    0.000000E+00         E    9.00000E+100
         70  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.676449E-05    0.000000E+00         E    9.00000E+100
         71  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.676058E-05    0.000000E+00         E    9.00000E+100
         72  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.675938E-05    0.000000E+00         E    9.00000E+100
         73  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.675667E-05    0.000000E+00         E    9.00000E+100
         74  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    7.675305E-05    0.000000E+00         E    9.00000E+100
         75  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -4.116087E-03    0.000000E+00         E    9.00000E+100
         76  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -5.748483E-03    0.000000E+00         E    9.00000E+100
         77  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -7.979510E-03    0.000000E+00         E    9.00000E+100
         78  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -8.680185E-03    0.000000E+00         E    9.00000E+100
         79  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.027431E-02    0.000000E+00         E    9.00000E+100
         80  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.244906E-02    0.000000E+00         E    9.00000E+100
         81  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.313109E-02    0.000000E+00         E    9.00000E+100
         82  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.468101E-02    0.000000E+00         E    9.00000E+100
         83  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.679134E-02    0.000000E+00         E    9.00000E+100
         84  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.745215E-02    0.000000E+00         E    9.00000E+100
         85  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.895200E-02    0.000000E+00         E    9.00000E+100
         86  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -2.098984E-02    0.000000E+00         E    9.00000E+100
         87  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         88  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00   -5.556536E-17    0.000000E+00              9.00000E+100
         89  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         90  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00    1.387779E-17    0.000000E+00              9.00000E+100
         91  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         92  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
         93  traj.phases.climb1->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
         94  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00    1.295515E-01    0.000000E+00         E    9.00000E+100
         95  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00    1.349127E-01    0.000000E+00         E    9.00000E+100
         96  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00    1.615414E-01    0.000000E+00         E    9.00000E+100
         97  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00    1.507414E-03    0.000000E+00         E    9.00000E+100
         98  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00    1.426534E-03    0.000000E+00         E    9.00000E+100
         99  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00    1.317088E-03    0.000000E+00         E    9.00000E+100
        100  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00    2.424766E-01    0.000000E+00         E    9.00000E+100
        101  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00    2.206075E-01    0.000000E+00         E    9.00000E+100
        102  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00    1.873288E-01    0.000000E+00         E    9.00000E+100
        103  traj.phases.climb2->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        104  traj.phases.climb2->final_boundary_constraint->mach              e   8.000000E-01    8.000000E-01    8.000000E-01              9.00000E+100
        105  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -2.308981E-01    0.000000E+00         E    9.00000E+100
        106  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.993872E-01    0.000000E+00         E    9.00000E+100
        107  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.543238E-01    0.000000E+00         E    9.00000E+100
        108  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.414243E-01    0.000000E+00         E    9.00000E+100
        109  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.059912E-01    0.000000E+00         E    9.00000E+100
        110  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -5.304664E-02    0.000000E+00         E    9.00000E+100
        111  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -3.776842E-02    0.000000E+00         E    9.00000E+100
        112  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00    9.545807E-04    0.000000E+00         E    9.00000E+100
        113  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00    8.172580E-02    0.000000E+00         E    9.00000E+100
        114  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    4.674561E-03    0.000000E+00         E    9.00000E+100
        115  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    4.369745E-03    0.000000E+00         E    9.00000E+100
        116  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    3.964637E-03    0.000000E+00         E    9.00000E+100
        117  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    3.872597E-03    0.000000E+00         E    9.00000E+100
        118  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    3.618909E-03    0.000000E+00         E    9.00000E+100
        119  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    3.286245E-03    0.000000E+00         E    9.00000E+100
        120  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    3.191289E-03    0.000000E+00         E    9.00000E+100
        121  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    2.964754E-03    0.000000E+00         E    9.00000E+100
        122  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    2.548933E-03    0.000000E+00         E    9.00000E+100
        123  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -3.214100E-02    0.000000E+00         E    9.00000E+100
        124  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -3.418797E-02    0.000000E+00         E    9.00000E+100
        125  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -3.727218E-02    0.000000E+00         E    9.00000E+100
        126  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -3.831655E-02    0.000000E+00         E    9.00000E+100
        127  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -4.085065E-02    0.000000E+00         E    9.00000E+100
        128  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -4.470143E-02    0.000000E+00         E    9.00000E+100
        129  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -4.601426E-02    0.000000E+00         E    9.00000E+100
        130  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -4.921350E-02    0.000000E+00         E    9.00000E+100
        131  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -4.974632E-02    0.000000E+00         E    9.00000E+100
        132  traj.phases.desc1->final_boundary_constraint->altitude           e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        133  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -4.272478E-02    0.000000E+00         E    9.00000E+100
        134  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -3.895675E-02    0.000000E+00         E    9.00000E+100
        135  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -2.786826E-02    0.000000E+00         E    9.00000E+100
        136  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -2.331792E-02    0.000000E+00         E    9.00000E+100
        137  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -1.101520E-02    0.000000E+00         E    9.00000E+100
        138  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00    5.426408E-03    0.000000E+00         E    9.00000E+100
        139  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00    1.289020E-03    0.000000E+00         E    9.00000E+100
        140  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -7.777022E-03    0.000000E+00         E    9.00000E+100
        141  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -1.947472E-02    0.000000E+00         E    9.00000E+100
        142  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    7.116896E-05    0.000000E+00         E    9.00000E+100
        143  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    8.239956E-05    0.000000E+00         E    9.00000E+100
        144  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    9.936115E-05    0.000000E+00         E    9.00000E+100
        145  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.054056E-04    0.000000E+00         E    9.00000E+100
        146  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.200624E-04    0.000000E+00         E    9.00000E+100
        147  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.416797E-04    0.000000E+00         E    9.00000E+100
        148  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.467613E-04    0.000000E+00         E    9.00000E+100
        149  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.591485E-04    0.000000E+00         E    9.00000E+100
        150  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.785953E-04    0.000000E+00         E    9.00000E+100
        151  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00   -4.846509E+00    0.000000E+00         E    9.00000E+100
        152  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00   -9.120876E-01    0.000000E+00         E    9.00000E+100
        153  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    3.883865E-01    0.000000E+00         E    9.00000E+100
        154  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.352695E-01    0.000000E+00         E    9.00000E+100
        155  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.337867E-01    0.000000E+00         E    9.00000E+100
        156  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.331703E-01    0.000000E+00         E    9.00000E+100
        157  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.358305E-01    0.000000E+00         E    9.00000E+100
        158  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.415816E-01    0.000000E+00         E    9.00000E+100
        159  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.488110E-01    0.000000E+00         E    9.00000E+100
        160  traj.phases.desc2->final_boundary_constraint->altitude           e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        161  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    1.250854E-01    0.000000E+00         E    9.00000E+100
        162  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    1.172884E-01    0.000000E+00         E    9.00000E+100
        163  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    1.005456E-01    0.000000E+00         E    9.00000E+100
        164  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    7.900763E-02    0.000000E+00         E    9.00000E+100
        165  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    5.692021E-02    0.000000E+00         E    9.00000E+100
        166  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    3.874380E-02    0.000000E+00         E    9.00000E+100
        167  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    2.751219E-02    0.000000E+00         E    9.00000E+100
        168  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    4.638632E-04    0.000000E+00         E    9.00000E+100
        169  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    4.729111E-04    0.000000E+00         E    9.00000E+100
        170  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    4.941796E-04    0.000000E+00         E    9.00000E+100
        171  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    5.229304E-04    0.000000E+00         E    9.00000E+100
        172  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    5.557022E-04    0.000000E+00         E    9.00000E+100
        173  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    5.846184E-04    0.000000E+00         E    9.00000E+100
        174  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    6.038235E-04    0.000000E+00         E    9.00000E+100
        175  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.332068E-01    0.000000E+00         E    9.00000E+100
        176  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.352741E-01    0.000000E+00         E    9.00000E+100
        177  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.396322E-01    0.000000E+00         E    9.00000E+100
        178  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.452353E-01    0.000000E+00         E    9.00000E+100
        179  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.508831E-01    0.000000E+00         E    9.00000E+100
        180  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.555022E-01    0.000000E+00         E    9.00000E+100
        181  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.583195E-01    0.000000E+00         E    9.00000E+100
        182  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00   -1.689955E-01    0.000000E+00         E    9.00000E+100
        183  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00   -1.065200E-01    0.000000E+00         E    9.00000E+100
        184  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00    2.199958E-03    0.000000E+00         E    9.00000E+100
        185  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00    4.765410E-04    0.000000E+00         E    9.00000E+100
        186  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00    4.811469E-04    0.000000E+00         E    9.00000E+100
        187  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00    4.875537E-04    0.000000E+00         E    9.00000E+100
        188  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00    1.659240E-01    0.000000E+00         E    9.00000E+100
        189  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00   -4.055050E-01    0.000000E+00         E    9.00000E+100
        190  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00   -1.193960E+00    0.000000E+00         E    9.00000E+100
        191  traj.phases.rotation->final_boundary_constraint->normal_force    e   0.000000E+00    8.409179E+00    0.000000E+00         E    9.00000E+100
        192  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -4.059757E-03    0.000000E+00         E    9.00000E+100
        193  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -2.379375E-02    0.000000E+00         E    9.00000E+100
        194  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -3.032572E-02    0.000000E+00         E    9.00000E+100
        195  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00   -4.947590E-02    0.000000E+00         E    9.00000E+100
        196  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00   -4.694172E-02    0.000000E+00         E    9.00000E+100
        197  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00   -4.521174E-02    0.000000E+00         E    9.00000E+100
        198  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00    6.132037E-05    0.000000E+00         E    9.00000E+100
        199  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00    6.136432E-05    0.000000E+00         E    9.00000E+100
        200  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00    6.142751E-05    0.000000E+00         E    9.00000E+100
        201  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00    1.251386E+00    0.000000E+00         E    9.00000E+100
        202  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00    1.914830E-01    0.000000E+00         E    9.00000E+100
        203  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00   -1.615733E-01    0.000000E+00         E    9.00000E+100
        204  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.206914E-01    1.100000E+00              9.00000E+100
        205  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.127141E-01    1.100000E+00              9.00000E+100
        206  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.131475E-01    1.100000E+00              9.00000E+100
        207  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.139957E-01    1.100000E+00              9.00000E+100
        208  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.139957E-01    1.100000E+00              9.00000E+100
        209  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.161165E-01    1.100000E+00              9.00000E+100
        210  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.189456E-01    1.100000E+00              9.00000E+100
        211  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.197486E-01    1.100000E+00              9.00000E+100
        212  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.197486E-01    1.100000E+00              9.00000E+100
        213  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.214011E-01    1.100000E+00              9.00000E+100
        214  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.232370E-01    1.100000E+00              9.00000E+100
        215  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.237063E-01    1.100000E+00              9.00000E+100
        216  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.237063E-01    1.100000E+00              9.00000E+100
        217  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.245697E-01    1.100000E+00              9.00000E+100
        218  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.252587E-01    1.100000E+00              9.00000E+100
        219  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.253505E-01    1.100000E+00              9.00000E+100
        220  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    1.000000E+00    1.500000E+01              9.00000E+100
        221  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    1.621339E+00    1.500000E+01              9.00000E+100
        222  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.478661E+00    1.500000E+01              9.00000E+100
        223  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.750000E+00    1.500000E+01              9.00000E+100
        224  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.750000E+00    1.500000E+01              9.00000E+100
        225  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    3.371339E+00    1.500000E+01              9.00000E+100
        226  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    4.228661E+00    1.500000E+01              9.00000E+100
        227  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    4.500000E+00    1.500000E+01              9.00000E+100
        228  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    4.500000E+00    1.500000E+01              9.00000E+100
        229  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    5.121339E+00    1.500000E+01              9.00000E+100
        230  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    5.978661E+00    1.500000E+01              9.00000E+100
        231  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.250000E+00    1.500000E+01              9.00000E+100
        232  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.250000E+00    1.500000E+01              9.00000E+100
        233  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.871339E+00    1.500000E+01              9.00000E+100
        234  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    7.728661E+00    1.500000E+01              9.00000E+100
        235  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    8.000000E+00    1.500000E+01              9.00000E+100
        236  traj.phases.climb2->final_boundary_constraint->altitude_rate     i   1.000000E-01    3.314185E+02    1.000000E+30              9.00000E+100

--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.

In this code, you do the same import as methods_for_level1.py does and set the values of all the arguments in run_aviary(). Now we will go through each line in detail to explain each step:

Dissection of level 2 for the same aircraft_for_bench_GwGm model#

All the methods of prob object (including its creation) are defined in level 3 (methods_for_level2.py). We now look at each of them.

We add other inputs that run_aviary() requires:

aircraft_filename = "models/test_aircraft/aircraft_for_bench_GwGm.csv"
optimizer = "IPOPT"
analysis_scheme = av.AnalysisScheme.COLLOCATION
objective_type = None
record_filename = 'aviary_history.db'
restart_filename = None
max_iter = 1

prob = av.AviaryProblem(analysis_scheme)

Several objects are initialized in this step:

self.model = om.Group()
self.pre_mission = PreMissionGroup()
self.post_mission = PostMissionGroup()
self.aviary_inputs = None
self.phase_info = phase_info
self.traj = None
self.analysis_scheme = analysis_scheme
self.pre_mission_info = self.phase_info.pop('pre_mission')
self.post_mission_info = self.phase_info.pop('post_mission')

phase_info is a user defined dictionary (in a Python file) that controls the profile of the mission to be simulated (e.g. climb, cruise, descent segments etc).

For analysis_scheme, the two options are: AnalysisScheme.COLLOCATION (default) and AnalysisScheme.SHOOTING which are defined and described in variables_info/enums.py`:

  • COLLOCATION uses the collocation method to optimize all points simultaneously.

  • SHOOTING is a forward in time integration method that simulates the trajectory.

In this onboarding document, only the COLLOCATION scheme will be discussed. The line

phase_info = deepcopy(av.default_2DOF_phase_info)
prob.load_inputs(aircraft_filename, phase_info)
{'aircraft:blended_wing_body_design:num_bays': (0, 'unitless'), 'aircraft:crew_and_payload:mass_per_passenger': (165.0, 'lbm'), 'aircraft:crew_and_payload:num_business_class': (0, 'unitless'), 'aircraft:crew_and_payload:num_first_class': (0, 'unitless'), 'aircraft:crew_and_payload:num_passengers': (180, 'unitless'), 'aircraft:crew_and_payload:num_tourist_class': (0, 'unitless'), 'aircraft:crew_and_payload:passenger_mass_with_bags': (200, 'lbm'), 'aircraft:design:compute_htail_volume_coeff': (False, 'unitless'), 'aircraft:design:compute_vtail_volume_coeff': (False, 'unitless'), 'aircraft:design:part25_structural_category': (3, 'unitless'), 'aircraft:design:reserve_fuel_additional': (4998, 'lbm'), 'aircraft:design:reserve_fuel_fraction': (0, 'unitless'), 'aircraft:design:smooth_mass_discontinuities': (False, 'unitless'), 'aircraft:design:ulf_calculated_from_maneuver': (False, 'unitless'), 'aircraft:design:use_alt_mass': (False, 'unitless'), 'aircraft:electrical:has_hybrid_system': (False, 'unitless'), 'aircraft:engine:compute_propeller_installation_loss': (True, 'unitless'), 'aircraft:engine:constant_fuel_consumption': (0.0, 'lbm/h'), 'aircraft:engine:flight_idle_max_fraction': (1.0, 'unitless'), 'aircraft:engine:flight_idle_min_fraction': (0.08, 'unitless'), 'aircraft:engine:flight_idle_thrust_fraction': (0.0, 'unitless'), 'aircraft:engine:fuel_flow_scaler_constant_term': (0.0, 'unitless'), 'aircraft:engine:fuel_flow_scaler_linear_term': (0.0, 'unitless'), 'aircraft:engine:generate_flight_idle': (False, 'unitless'), 'aircraft:engine:geopotential_alt': (False, 'unitless'), 'aircraft:engine:has_propellers': (False, 'unitless'), 'aircraft:engine:ignore_negative_thrust': (False, 'unitless'), 'aircraft:engine:interpolation_method': ('slinear', 'unitless'), 'aircraft:engine:num_engines': (2, 'unitless'), 'aircraft:engine:num_fuselage_engines': (0, 'unitless'), 'aircraft:engine:num_propeller_blades': (0, 'unitless'), 'aircraft:engine:num_wing_engines': (0, 'unitless'), 'aircraft:engine:scale_mass': (True, 'unitless'), 'aircraft:engine:scale_performance': (True, 'unitless'), 'aircraft:engine:subsonic_fuel_flow_scaler': (1.0, 'unitless'), 'aircraft:engine:supersonic_fuel_flow_scaler': (1.0, 'unitless'), 'aircraft:engine:type': (<GASPEngineType.TURBOJET: 7>, 'unitless'), 'aircraft:engine:use_propeller_map': (False, 'unitless'), 'aircraft:engine:shaft_power_design': (1.0, 'kW'), 'aircraft:fins:num_fins': (0, 'unitless'), 'aircraft:fuel:num_tanks': (7, 'unitless'), 'aircraft:fuselage:aisle_width': (24, 'inch'), 'aircraft:fuselage:military_cargo_floor': (False, 'unitless'), 'aircraft:fuselage:num_aisles': (1, 'unitless'), 'aircraft:fuselage:num_fuselages': (1, 'unitless'), 'aircraft:fuselage:num_seats_abreast': (6, 'unitless'), 'aircraft:fuselage:seat_pitch': (29, 'inch'), 'aircraft:fuselage:seat_width': (20.2, 'inch'), 'aircraft:landing_gear:carrier_based': (False, 'unitless'), 'aircraft:landing_gear:drag_coefficient': (0.0, 'unitless'), 'aircraft:landing_gear:fixed_gear': (False, 'unitless'), 'aircraft:strut:dimensional_location_specified': (False, 'unitless'), 'aircraft:vertical_tail:num_tails': (1, 'unitless'), 'aircraft:wing:airfoil_technology': (1.0, 'unitless'), 'aircraft:wing:choose_fold_location': (True, 'unitless'), 'aircraft:wing:detailed_wing': (False, 'unitless'), 'aircraft:wing:flap_type': (<FlapType.DOUBLE_SLOTTED: 4>, 'unitless'), 'aircraft:wing:fold_dimensional_location_specified': (False, 'unitless'), 'aircraft:wing:has_fold': (False, 'unitless'), 'aircraft:wing:has_strut': (False, 'unitless'), 'aircraft:wing:load_distribution_control': (2.0, 'unitless'), 'aircraft:wing:loading_above_20': (True, 'unitless'), 'aircraft:wing:num_flap_segments': (2, 'unitless'), 'aircraft:wing:num_integration_stations': (50, 'unitless'), 'aircraft:wing:span_efficiency_reduction': (False, 'unitless'), 'mission:design:cruise_altitude': (37500, 'ft'), 'mission:design:rate_of_climb_at_top_of_climb': (0.0, 'ft/min'), 'mission:summary:fuel_flow_scaler': (1, 'unitless'), 'mission:takeoff:angle_of_attack_runway': (0.0, 'deg'), 'mission:takeoff:obstacle_height': (35.0, 'ft'), 'mission:takeoff:thrust_incidence': (0.0, 'deg'), 'mission:taxi:duration': (0.1677, 'h'), 'mission:taxi:mach': (0.0001, 'unitless'), 'settings:verbosity': (<Verbosity.BRIEF: 1>, 'unitless'), 'INGASP.JENGSZ': (4, 'unitless'), 'test_mode': (False, 'unitless'), 'use_surrogates': (True, 'unitless'), 'mass_defect': (10000, 'lbm'), 'settings:problem_type': (<ProblemType.SIZING: 'sizing'>, 'unitless'), 'aircraft:air_conditioning:mass_coefficient': (1.65, 'unitless'), 'aircraft:anti_icing:mass': (551, 'lbm'), 'aircraft:apu:mass': (928, 'lbm'), 'aircraft:avionics:mass': (1959, 'lbm'), 'aircraft:controls:cockpit_control_mass_scaler': (1, 'unitless'), 'aircraft:controls:control_mass_increment': (0, 'lbm'), 'aircraft:controls:stability_augmentation_system_mass': (0, 'lbm'), 'aircraft:controls:stability_augmentation_system_mass_scaler': (1, 'unitless'), 'aircraft:crew_and_payload:cargo_mass': (10040, 'lbm'), 'aircraft:crew_and_payload:catering_items_mass_per_passenger': (7.6, 'lbm'), 'aircraft:crew_and_payload:passenger_service_mass_per_passenger': (5, 'lbm'), 'aircraft:crew_and_payload:water_mass_per_occupant': (3, 'lbm'), 'aircraft:design:cg_delta': (0.25, 'unitless'), 'aircraft:design:cockpit_control_mass_coefficient': (16.5, 'unitless'), 'aircraft:design:drag_increment': (0.00175, 'unitless'), 'aircraft:design:emergency_equipment_mass': (50, 'lbm'), 'aircraft:design:max_structural_speed': (402.5, 'mi/h'), 'aircraft:design:static_margin': (0.03, 'unitless'), 'aircraft:design:structural_mass_increment': (0, 'lbm'), 'aircraft:design:supercritical_drag_shift': (0.033, 'unitless'), 'aircraft:engine:additional_mass_fraction': (0.135, 'unitless'), 'aircraft:engine:data_file': ('models/engines/turbofan_23k_1.deck', 'unitless'), 'aircraft:engine:mass_scaler': (1, 'unitless'), 'aircraft:engine:mass_specific': (0.21366, 'lbm/lbf'), 'aircraft:engine:pod_mass_scaler': (1, 'unitless'), 'aircraft:engine:pylon_factor': (1.25, 'unitless'), 'aircraft:engine:reference_diameter': (5.8, 'ft'), 'aircraft:engine:reference_sls_thrust': (28690, 'lbf'), 'aircraft:engine:scale_factor': (1, 'unitless'), 'aircraft:engine:scaled_sls_thrust': (28690, 'lbf'), 'aircraft:engine:wing_locations': ([0.35], 'unitless'), 'aircraft:fuel:density': (6.687, 'lbm/galUS'), 'aircraft:fuel:fuel_margin': (0, 'unitless'), 'aircraft:fuel:fuel_system_mass_coefficient': (0.041, 'unitless'), 'aircraft:fuel:fuel_system_mass_scaler': (1, 'unitless'), 'aircraft:fuel:unusable_fuel_mass_coefficient': (12, 'unitless'), 'aircraft:fuel:wing_fuel_fraction': (0.6, 'unitless'), 'aircraft:furnishings:mass': (11192, 'lbm'), 'aircraft:fuselage:delta_diameter': (4.5, 'ft'), 'aircraft:fuselage:flat_plate_area_increment': (0.25, 'ft**2'), 'aircraft:fuselage:form_factor': (1.25, 'unitless'), 'aircraft:fuselage:mass_coefficient': (128, 'unitless'), 'aircraft:fuselage:nose_fineness': (1, 'unitless'), 'aircraft:fuselage:pilot_compartment_length': (9.5, 'ft'), 'aircraft:fuselage:pressure_differential': (7.5, 'psi'), 'aircraft:fuselage:tail_fineness': (3, 'unitless'), 'aircraft:fuselage:wetted_area': (4000, 'ft**2'), 'aircraft:horizontal_tail:area': (0, 'ft**2'), 'aircraft:horizontal_tail:aspect_ratio': (4.75, 'unitless'), 'aircraft:horizontal_tail:form_factor': (1.25, 'unitless'), 'aircraft:horizontal_tail:mass_coefficient': (0.232, 'unitless'), 'aircraft:horizontal_tail:moment_ratio': (0.2307, 'unitless'), 'aircraft:horizontal_tail:sweep': (25, 'deg'), 'aircraft:horizontal_tail:taper_ratio': (0.352, 'unitless'), 'aircraft:horizontal_tail:thickness_to_chord': (0.12, 'unitless'), 'aircraft:horizontal_tail:vertical_tail_fraction': (0, 'unitless'), 'aircraft:horizontal_tail:volume_coefficient': (1.189, 'unitless'), 'aircraft:hydraulics:flight_control_mass_coefficient': (0.112, 'unitless'), 'aircraft:hydraulics:gear_mass_coefficient': (0.14, 'unitless'), 'aircraft:instruments:mass_coefficient': (0.0736, 'unitless'), 'aircraft:landing_gear:main_gear_location': (0.15, 'unitless'), 'aircraft:landing_gear:main_gear_mass_coefficient': (0.85, 'unitless'), 'aircraft:landing_gear:mass_coefficient': (0.04, 'unitless'), 'aircraft:landing_gear:tail_hook_mass_scaler': (1, 'unitless'), 'aircraft:landing_gear:total_mass_scaler': (1, 'unitless'), 'aircraft:nacelle:clearance_ratio': (0.2, 'unitless'), 'aircraft:nacelle:core_diameter_ratio': (1.25, 'unitless'), 'aircraft:nacelle:fineness': (2, 'unitless'), 'aircraft:nacelle:form_factor': (1.5, 'unitless'), 'aircraft:nacelle:mass_specific': (3, 'lbm/ft**2'), 'aircraft:strut:area_ratio': (0, 'unitless'), 'aircraft:strut:attachment_location': (0, 'ft'), 'aircraft:strut:attachment_location_dimensionless': (0, 'unitless'), 'aircraft:strut:fuselage_interference_factor': (0, 'unitless'), 'aircraft:strut:mass_coefficient': (0, 'unitless'), 'aircraft:strut:thickness_to_chord': (0, 'unitless'), 'aircraft:vertical_tail:area': (0, 'ft**2'), 'aircraft:vertical_tail:aspect_ratio': (1.67, 'unitless'), 'aircraft:vertical_tail:form_factor': (1.25, 'unitless'), 'aircraft:vertical_tail:mass_coefficient': (0.289, 'unitless'), 'aircraft:vertical_tail:moment_ratio': (2.362, 'unitless'), 'aircraft:vertical_tail:sweep': (35, 'deg'), 'aircraft:vertical_tail:taper_ratio': (0.801, 'unitless'), 'aircraft:vertical_tail:thickness_to_chord': (0.12, 'unitless'), 'aircraft:vertical_tail:volume_coefficient': (0.145, 'unitless'), 'aircraft:wing:aspect_ratio': (10.13, 'unitless'), 'aircraft:wing:center_distance': (0.463, 'unitless'), 'aircraft:wing:flap_chord_ratio': (0.3, 'unitless'), 'aircraft:wing:flap_deflection_landing': (40, 'deg'), 'aircraft:wing:flap_deflection_takeoff': (10, 'deg'), 'aircraft:wing:flap_drag_increment_optimum': (0.1, 'unitless'), 'aircraft:wing:flap_lift_increment_optimum': (1.5, 'unitless'), 'aircraft:wing:flap_span_ratio': (0.65, 'unitless'), 'aircraft:wing:fold_mass_coefficient': (0, 'unitless'), 'aircraft:wing:folded_span': (0, 'ft'), 'aircraft:wing:form_factor': (1.25, 'unitless'), 'aircraft:wing:fuselage_interference_factor': (1.1, 'unitless'), 'aircraft:wing:height': (8, 'ft'), 'aircraft:wing:high_lift_mass_coefficient': (1.9, 'unitless'), 'aircraft:wing:incidence': (1.5, 'deg'), 'aircraft:wing:loading': (128, 'lbf/ft**2'), 'aircraft:wing:mass_coefficient': (102.5, 'unitless'), 'aircraft:wing:max_lift_ref': (1.15, 'unitless'), 'aircraft:wing:max_slat_deflection_landing': (10, 'deg'), 'aircraft:wing:max_slat_deflection_takeoff': (10, 'deg'), 'aircraft:wing:max_thickness_location': (0.4, 'unitless'), 'aircraft:wing:min_pressure_location': (0.3, 'unitless'), 'aircraft:wing:mounting_type': (0, 'unitless'), 'aircraft:wing:optimum_flap_deflection': (55, 'deg'), 'aircraft:wing:optimum_slat_deflection': (20, 'deg'), 'aircraft:wing:slat_chord_ratio': (0.15, 'unitless'), 'aircraft:wing:slat_lift_increment_optimum': (0.93, 'unitless'), 'aircraft:wing:surface_ctrl_mass_coefficient': (0.95, 'unitless'), 'aircraft:wing:sweep': (25, 'deg'), 'aircraft:wing:taper_ratio': (0.33, 'unitless'), 'aircraft:wing:thickness_to_chord_root': (0.15, 'unitless'), 'aircraft:wing:thickness_to_chord_tip': (0.12, 'unitless'), 'aircraft:wing:zero_lift_angle': (-1.2, 'deg'), 'mission:design:gross_mass': (175400, 'lbm'), 'mission:design:mach': (0.8, 'unitless'), 'mission:design:range': (3675, 'NM'), 'mission:landing:airport_altitude': (0, 'ft'), 'mission:landing:braking_delay': (1, 's'), 'mission:landing:glide_to_stall_ratio': (1.3, 'unitless'), 'mission:landing:maximum_flare_load_factor': (1.15, 'unitless'), 'mission:landing:maximum_sink_rate': (900, 'ft/min'), 'mission:landing:obstacle_height': (50, 'ft'), 'mission:landing:touchdown_sink_rate': (5, 'ft/s'), 'mission:takeoff:decision_speed_increment': (10, 'kn'), 'mission:takeoff:rotation_speed_increment': (5, 'kn'), 'settings:equations_of_motion': (<EquationsOfMotion.TWO_DEGREES_OF_FREEDOM: '2DOF'>, 'unitless'), 'settings:mass_method': (<LegacyCode.GASP: 'GASP'>, 'unitless'), 'mission:summary:cruise_mass_final': (140320.0, 'lbm'), 'mission:summary:gross_mass': (175400, 'lbm')}

is a function that has a few tasks:

  • Read aircraft deck file aircraft_filename

  • Read phase info file phase_info

  • Build core subsystems

We have seen aircraft_filename file (a .csv file) in our level 1 examples. In level 1, we simply called it input file. An aircraft model can also be directly defined in Python, by setting up an AviaryValues object with the desired inputs and options normally found in an input file. That object can be provided in the place of aircraft_filename.

Engines are built by using aircraft:engine:data_file in the .csv file. For example in aircraft_for_bench_GwGm.csv file, we see:

aircraft:engine:data_file,models/engines/turbofan_28k.deck,unitless

So, aircraft:engine:data_file has value models/engines/turbofan_28k.deck,unitless. The top rows of engine deck file are:

Mach_Number (unitless)

Altitude (ft)

Throttle (unitless)

Gross_Thrust (lbf)

Ram_Drag (lbf)

Fuel_Flow (lb/h)

NOx_Rate (lb/h)

0.0,

0.0,

50.0,

28928.1,

0.0,

8662.3,

61.9894

0.0,

0.0,

48.0,

26999.7,

0.0,

7932.6,

49.2185

0.0,

0.0,

46.0,

25071.1,

0.0,

7258.1,

33.3976

0.0,

0.0,

42.0,

21214.0,

0.0,

5979.1,

19.8547

0.0,

0.0,

38.0,

17356.9,

0.0,

4795.2,

17.5877

Users can provide an EngineModel instance of their own to use in Aviary’s propulsion systems by adding it to engine_models.

Other subsystems, including mass, geometry, and aerodynamics, are set up according to which legacy code options the user has specified in their input file, using settings:equations_of_motion and settings:mass_method. Aerodynamics is set up to match the selected equations of motion, while geometry will use either GASP, FLOPS, or both methods as required to calculate all values needed by other subsystems.

Next we check the user-provided inputs:

prob.check_and_preprocess_inputs()
/home/runner/work/Aviary/Aviary/aviary/utils/preprocessors.py:272: UserWarning: Mount location for engines of type <turbofan_23k_1> not specified. Wing-mounted engines are assumed.
  warnings.warn(

This method checks the user-supplied input values for any potential problems. These problems include variable names that are not recognized in Aviary, conflicting options or values, or units mismatching.

Next, we add pre-mission systems:

prob.add_pre_mission_systems()

This call adds a pre-mission group which includes propulsion, geometry, aerodynamics, and mass subsystems.

For height_energy missions, aviary currently models FLOPS’ “simplified” takeoff as defined in mission/flops_based/phases/simplified_takeoff.py.

Next is the line

prob.add_phases()
Hide code cell output
<dymos.trajectory.trajectory.Trajectory at 0x7f273954bda0>

which adds a sequence of core mission phases. In addition, if mission_method is 2dof and ascent is a phase, it adds an equality constraint to the problem to ensure that the TAS at the end of the groundroll phase is equal to the rotation velocity at the start of the rotation phase (_add_groundroll_eq_constraint(phase)). If mission_method is height_energy, it sets up trajectory parameters by calling setup_trajectory_params(). If mission_method is solved, it has a block of code to make sure that the trajectory is smooth by applying boundary constraints between phases (e.g. fuselage pitch angle or true airspeed).

It follows by adding post-mission subsystems:

prob.add_post_mission_systems()

Similar to pre-mission, it adds a landing phase if include_landing key of post_mission has value of True. If user chooses to define a post_mission, it will override the default. For 2dof missions, landing is defined in mission/gasp_based/ode/landing_ode.py. For simple mission, landing means a simplified landing. Note that the solved method currently doesn’t have any post mission systems.

The next line is

prob.link_phases()

This is important for allowing each phase of flight to pass to the next without discontinuities in the parameters. Consider Dymos’ Aircraft Balanced Field Length Calculation example. In that example, we see separate nonlinear boundary constraints, nonlinear path constraints, and phase continuity constraints between phases. We don’t want to go deeper in this function call, but just point out that each individual link can be set via dymos function link_phases. See dymos API for more details.

The code blocks in this function (namely, link_phases()) are for 2DOF, simple, and solved missions. The links are set up based on physical principals (e.g. you can’t have instantaneous changes in mass, velocity, position etc.). Special care is required if the user selects a different or unusual set of phases.

Now, our aircraft and the mission are fully defined. We are ready to define an optimization problem. This is achieved by adding an optimization driver, adding design variables, and an objective.

For add_driver function, we accept use_coloring=None. Coloring is a technique that OpenMDAO uses to compute partial derivatives efficiently. This will become important later.

prob.add_driver(optimizer, max_iter=max_iter)

Drivers available for use in Aviary are SLSQP, SNOPT, and IPOPT. The table below summarizes the basic setting along with sample values (the settings are options required by each optimizer):

Optimizers

Drivers

Settings

SNOPT

om.pyOptSparseDriver()

Major iterations limit: 50
Major optimality tolerance: 1e-4
Major feasibility tolerance: 1e-6
iSumm: 6

IPOPT

om.pyOptSparseDriver()

tol: 1e-9
mu_init: 1e-5
max_iter: 50
print_level: 5

SLSQP

om.ScipyOptimizeDriver()

tol: 1.0E-9
maxiter: 50
disp: True

Note that SLSQP is freely available, but its performance is not as good as SNOPT and IPOPT sometimes. SNOPT is a commercial optimizer, but it is free for academic use. IPOPT is an open-source optimizer and it is free for all users.

Design variables (and constraints) are set in the line prob.add_design_variables():

prob.add_design_variables()

For default HEIGHT_ENERGY mission model, it is relatively simple:

Design Variables

Lower Bound

Upper Bound

Reference Value

Units

Mission.Design.GROSS_MASS

100.e3

200.e3

135.e3

lbm

For default TWO_DEGREES_OF_FREEDOM mission model, the design variables and constraints depend on the type of problems (SIZING, ALTERNATE, or FALLOUT, see ProblemType class in aviary/variable_info/enums.py for details). First, there are four common design variables and two common constraints. There are two more design variables and two constraints for sizing problem.

Problem Type

Design Variables

Lower Bound

Upper Bound

Reference Value

Units

Any

Mission.Takeoff.ASCENT_T_INITIAL

0

100

30.0

s

Any

Mission.Takeoff.ASCENT_DURATION

1

1000

10.0

s

Any

tau_gear

0.01

1.0

1

s

Any

tau_flaps

0.01

1.0

1

s

SIZING

Mission.Design.GROSS_MASS

10.

400.e3

175_000

lbm

SIZING

Mission.Summary.GROSS_MASS

10.

400.e3

175_000

lbm

ALTERNATE

Mission.Summary.GROSS_MASS

0

infinite

175_000

lbm

Problem Type

Constraint

Relation

Value

Reference Value

Units

Any

h_fit.h_init_gear

=

50.0

50.0

ft

Any

h_fit.h_init_flaps

=

400.0

400.0

ft

SIZING

Mission.Constraints.RANGE_RESIDUAL

=

0

10

unitless

ALTERNATE

Mission.Constraints.RANGE_RESIDUAL

=

0

10

lbm

In the above table, there are two hard-coded design variables: tau_gear and tau_flaps. They represent fractions of ascent time to start gear retraction and flaps retraction. There are two hard-coded constraints: h_fit.h_init_gear and h_fit.h_init_flaps. They are the altitudes of initial gear retraction and initial flaps retraction. The underscore in number “175_000” is for readability only.

There are other constraints using OpenMDAO’s EQConstraintComp component. We will not go into the details as this part is complicated and needs special attention. Note that each subsystem (for example engine model) might have their own design variables (think, for example, sizing the engine). Aviary goes through all subsystems and adds appropriate design variables.

You can override all the functions in level 3. So, you can set up your constraints in level 3 if the above ones do not meet your requirements.

The optimization objective is added to the problem by this line:

prob.add_objective(objective_type=objective_type)

The selection of objective is a little complicated.

Earlier in this page, we have discussed the objective when objective_type=None and mission_method is 2DOF. Let us discuss the other situations.

There are several objective types that users can choose: mass, hybrid_objective, fuel_burned, and fuel.

objective_type

objective

mass

Dynamic.Mission.MASS

hybrid_objective

-final_mass / {takeoff_mass} + final_time / 5.

fuel_burned

initial_mass - mass_final (for FLOPS mission only)

fuel

Mission.Objectives.FUEL

As listed in the above, if objective_type="mass", the objective is the final value of Dynamic.Mission.MASS at the end of the mission. If objective_type="fuel", the objective is the Mission.Objectives.FUEL. There is a special objective type: hybrid_objective. When objective_type="hybrid_objective", the objective is a mix of minimizing fuel burn and minimizing the mission duration:

      obj = -final_mass / {takeoff_mass} + final_time / 5.

This is because if we just minimized fuel burn then the optimizer would probably fly the plane slowly to save fuel, but we actually care about some mix of minimizing fuel burn while providing a reasonable travel time for the passengers. This leads to the hybrid_objective which seeks to minimize a combination of those two objectives. final_time is the duration of the full mission and is usually in the range of hours. So, the denominator 5. means 5 hours. That’s just a value to scale the final_time variable. Since it’s a composite objective we didn’t want to have OpenMDAO do the scaling because the two variables in the objective are of a different order of magnitude. We will show an example of this objective type in level 2 discussion.

If objective_type=None for a 2DOF mission, Aviary will choose the objective based on mission_method and problem_type. We have discussed this case earlier in this page.

If objective_type=None for a FLOPS mission method, Aviary adds a fuel_burned objective. In fact, this objective is available for FLOPS mission only. That number you get is for the actual fuel burned in lbm. You may get something like fuel_burned with the scaled value [3.91228276], reference value 1e+04. It translates to the dimensional physical quantity of 39,122.8276 lbm. To see this in action, check the resulting reports/opt_report.html file to see the optimal results.

Note: Aviary variable Mission.Objectives.FUEL when using the GASP-based mission is actually a hybrid objective defined as

      reg_objective = overall_fuel/10000 + ascent_duration/30.

where overall_fuel has the unit of lbm and ascent_duration has the unit of seconds. In our case, settings:equations_of_motion = 2DOF, the final value of objective is [5.5910123], with ref: 1.0 and units: blank. The units should be interpreted as unitless.

Here, ref is the reference value. For different objectives, the range may vary significantly different. We want to normalize the value. Ideally, users should choose ref such that the objective is in the range of (0,1). This is required by optimizer.

Note: Unfortunately, not all objective_type and mission_method combinations work.

Next is a line to call

prob.setup()
The following variables have been overridden:
  'aircraft:fuselage:wetted_area  4000  ft**2
  'aircraft:horizontal_tail:form_factor  1.25  unitless
  'aircraft:nacelle:form_factor  [1.5]  unitless
  'aircraft:strut:fuselage_interference_factor  0  unitless
  'aircraft:vertical_tail:form_factor  1.25  unitless
  'aircraft:wing:form_factor  1.25  unitless
--- Constraint Report [traj] ---
    --- groundroll ---
        None
    --- rotation ---
        [final]   0.0000e+00 == normal_force [lbf]
    --- ascent ---
        [final]   5.0000e+02 == altitude [ft]
        [path]    0.0000e+00 <= load_factor <= 1.1000e+00  [unitless]
        [path]    0.0000e+00 <= fuselage_pitch <= 1.5000e+01  [deg]
    --- accel ---
        [final]   2.5000e+02 == EAS [kn]
    --- climb1 ---
        [final]   1.0000e+04 == altitude [ft]
    --- climb2 ---
        [final]   3.7500e+04 == altitude [ft]
        [final]   1.0000e-01 <= altitude_rate  [ft/min]
        [final]   8.0000e-01 == mach [unitless]
    --- cruise ---
        None
    --- desc1 ---
        [final]   1.0000e+04 == altitude [ft]
    --- desc2 ---
        [final]   1.0000e+03 == altitude [ft]

This is a lightly wrapped OpenMDAO setup() method for the problem. It allows us to do pre- and post-setup changes, like adding calls to set_input_defaults and do some simple set_vals if needed.

If we look at the signature of setup() in OpenMDAO’s Problem class, we find that the available kwargs are: check, logger, mode, force_alloc_complex, distributed_vector_class, local_vector_class, and derivatives. The ones that Aviary uses are check and force_alloc_complex. Argument check is a flag to determine default checks are performed. Default checks are: ‘auto_ivc_warnings’, comp_has_no_outputs’, ‘dup_inputs’, ‘missing_recorders’, ‘out_of_order’, ‘solvers’, ‘system’, ‘unserializable_options’.

If force_alloc_complex is true, sufficient memory will be allocated to allow nonlinear vectors to store complex values while operating under complex step. For our example, we don’t use any of them.

For optimization problems, initial guesses are important.

prob.set_initial_guesses()

For solved_2DOF and 2DOF missions, this method performs several calls to set_val on the trajectory for states and controls to seed the problem with reasonable initial guesses using initial_guesses within corresponding phases (e.g. default_flops_phases.py and default_gasp_phases.py). For solved_2DOF missions, it performs similar tasks but for hard-coded state parameters. This is reasonable because a solved_2DOF mission is actually a level 3 Aviary approach. We will cover it in level 3 onboarding doc in the next page. Note that initial guesses for all phases are especially important for collocation methods.

The last line is to run the problem we just set up:

prob.run_aviary_problem()
'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.ascent' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.


'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.climb1' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.


'rhs_checking' is disabled for 'DirectSolver in 'traj.phases.desc1' <class Phase>' but that solver has redundant adjoint solves. If it is expensive to compute derivatives for this solver, turning on 'rhs_checking' may improve performance.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'problem5' was computed 3 times, taking 1.9440057400000796 seconds.
Total jacobian shape: (238, 212) 
Jacobian shape: (238, 212)  (7.98% nonzero)
FWD solves: 48   REV solves: 0
Total colors vs. total size: 48 vs 212  (77.36% improvement)

Sparsity computed using tolerance: 1e-25
Time to compute sparsity:   1.9440 sec
Time to compute coloring:   0.1918 sec
Memory to compute coloring:   0.0000 MB
Coloring created on: 2024-11-04 17:21:43
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/total_jac.py:1646: DerivativesWarning:Constraints or objectives [('traj.phases.climb2->final_boundary_constraint->mach', inds=[(11, 0)])] cannot be impacted by the design variables of the problem.
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.

Number of nonzeros in equality constraint Jacobian...:     2827
Number of nonzeros in inequality constraint Jacobian.:      599
Number of nonzeros in Lagrangian Hessian.............:        0

Total number of variables............................:      212
                     variables with only lower bounds:        2
                variables with lower and upper bounds:      210
                     variables with only upper bounds:        0
Total number of equality constraints.................:      204
Total number of inequality constraints...............:       33
        inequality constraints with only lower bounds:        1
   inequality constraints with lower and upper bounds:       32
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  5.2731333e+00 1.74e+03 1.65e+01  -5.0 0.00e+00    -  0.00e+00 0.00e+00   0
Number of Iterations....: 1

                                   (scaled)                 (unscaled)
Objective...............:   4.4311640693002561e+00    4.4311640693002561e+00
Dual infeasibility......:   1.6268335108291701e+01    1.6268335108291701e+01
Constraint violation....:   5.3444527521514466e+01    3.0967714820926238e+02
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   1.0000016687732632e+05    1.0000016687732632e+05
Overall NLP error.......:   1.0000016687732632e+05    1.0000016687732632e+05


Number of objective function evaluations             = 2
Number of objective gradient evaluations             = 2
Number of equality constraint evaluations            = 2
Number of inequality constraint evaluations          = 2
Number of equality constraint Jacobian evaluations   = 2
Number of inequality constraint Jacobian evaluations = 2
Number of Lagrangian Hessian evaluations             = 0
Total seconds in IPOPT                               = 2.403

EXIT: Maximum Number of Iterations Exceeded.
minimal_print is not available for this solution


Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
    Objective Function: _objfunc

    Solution: 
--------------------------------------------------------------------------------
    Total Time:                    2.4041
       User Objective Time :       0.7175
       User Sensitivity Time :     1.6592
       Interface Time :            0.0177
       Opt Solver Time:            0.0097
    Calls to Objective Function :       3
    Calls to Sens Function :            3


   Objectives
      Index  Name                               Value
          0  mission:objectives:fuel     4.431164E+00

   Variables (c - continuous, i - integer, d - discrete)
      Index  Name                                      Type      Lower Bound            Value      Upper Bound     Status
          0  mission:design:gross_mass_0                  c     5.714286E-05     9.944039E-01     1.000000E+30           
          1  mission:summary:gross_mass_0                 c     5.714286E-05     9.944039E-01     1.000000E+30           
          2  mission:takeoff:ascent_t_initial_0           c     0.000000E+00     5.650505E-01     3.333333E+00           
          3  mission:takeoff:ascent_duration_0            c     1.000000E-01     5.388115E-01     1.000000E+02           
          4  tau_gear_0                                   c     1.000000E-02     2.003487E-01     1.000000E+00           
          5  tau_flaps_0                                  c     1.000000E-02     9.687969E-01     1.000000E+00           
          6  traj.accel.t_duration_0                      c     9.950249E-03     2.932724E-01     1.990050E+00           
          7  traj.accel.states:velocity_0                 c     0.000000E+00     5.093867E-01     1.200000E+00           
          8  traj.accel.states:velocity_1                 c     0.000000E+00     8.991874E-01     1.200000E+00           
          9  traj.accel.states:velocity_2                 c     0.000000E+00     1.018244E+00     1.200000E+00           
         10  traj.accel.states:mass_0                     c     0.000000E+00     1.157670E+00     6.666667E+15           
         11  traj.accel.states:mass_1                     c     0.000000E+00     1.157412E+00     6.666667E+15           
         12  traj.accel.states:mass_2                     c     0.000000E+00     1.157053E+00     6.666667E+15           
         13  traj.accel.states:mass_3                     c     0.000000E+00     1.156938E+00     6.666667E+15           
         14  traj.accel.states:distance_0                 c     0.000000E+00     3.427052E-01     3.000000E+01           
         15  traj.accel.states:distance_1                 c     0.000000E+00     5.211557E-01     3.000000E+01           
         16  traj.accel.states:distance_2                 c     0.000000E+00     5.834645E-01     3.000000E+01           
         17  traj.ascent.states:flight_path_angle_0       c    -9.999996E+00    -4.629089E-03     1.999999E+01           
         18  traj.ascent.states:flight_path_angle_1       c    -9.999996E+00    -1.093033E-02     1.999999E+01           
         19  traj.ascent.states:flight_path_angle_2       c    -9.999996E+00    -1.682923E-02     1.999999E+01           
         20  traj.ascent.states:flight_path_angle_3       c    -9.999996E+00    -3.734555E-03     1.999999E+01           
         21  traj.ascent.states:flight_path_angle_4       c    -9.999996E+00     3.556617E-02     1.999999E+01           
         22  traj.ascent.states:flight_path_angle_5       c    -9.999996E+00     4.650741E-02     1.999999E+01           
         23  traj.ascent.states:flight_path_angle_6       c    -9.999996E+00     6.076312E-02     1.999999E+01           
         24  traj.ascent.states:flight_path_angle_7       c    -9.999996E+00     7.400449E-02     1.999999E+01           
         25  traj.ascent.states:flight_path_angle_8       c    -9.999996E+00     8.149111E-02     1.999999E+01           
         26  traj.ascent.states:flight_path_angle_9       c    -9.999996E+00     1.076032E-01     1.999999E+01           
         27  traj.ascent.states:flight_path_angle_10      c    -9.999996E+00     1.243957E-01     1.999999E+01           
         28  traj.ascent.states:flight_path_angle_11      c    -9.999996E+00     1.148198E-01     1.999999E+01           
         29  traj.ascent.states:altitude_0                c     0.000000E+00     5.811477E-01     7.000000E-01           
         30  traj.ascent.states:altitude_1                c     0.000000E+00     5.771022E-01     7.000000E-01           
         31  traj.ascent.states:altitude_2                c     0.000000E+00     5.577667E-01     7.000000E-01           
         32  traj.ascent.states:altitude_3                c     0.000000E+00     5.481903E-01     7.000000E-01           
         33  traj.ascent.states:altitude_4                c     0.000000E+00     5.220940E-01     7.000000E-01           
         34  traj.ascent.states:altitude_5                c     0.000000E+00     4.968366E-01     7.000000E-01           
         35  traj.ascent.states:altitude_6                c     0.000000E+00     4.944078E-01     7.000000E-01           
         36  traj.ascent.states:altitude_7                c     0.000000E+00     4.902437E-01     7.000000E-01           
         37  traj.ascent.states:altitude_8                c     0.000000E+00     4.854846E-01     7.000000E-01           
         38  traj.ascent.states:altitude_9                c     0.000000E+00     4.832424E-01     7.000000E-01           
         39  traj.ascent.states:altitude_10               c     0.000000E+00     4.860013E-01     7.000000E-01           
         40  traj.ascent.states:altitude_11               c     0.000000E+00     4.974825E-01     7.000000E-01           
         41  traj.ascent.states:altitude_12               c     0.000000E+00     5.000000E-01     7.000000E-01           
         42  traj.ascent.states:velocity_0                c     0.000000E+00     7.739311E-01     3.500000E+00           
         43  traj.ascent.states:velocity_1                c     0.000000E+00     7.907313E-01     3.500000E+00           
         44  traj.ascent.states:velocity_2                c     0.000000E+00     7.960870E-01     3.500000E+00           
         45  traj.ascent.states:velocity_3                c     0.000000E+00     8.112675E-01     3.500000E+00           
         46  traj.ascent.states:velocity_4                c     0.000000E+00     8.275788E-01     3.500000E+00           
         47  traj.ascent.states:velocity_5                c     0.000000E+00     8.308267E-01     3.500000E+00           
         48  traj.ascent.states:velocity_6                c     0.000000E+00     8.381623E-01     3.500000E+00           
         49  traj.ascent.states:velocity_7                c     0.000000E+00     8.479325E-01     3.500000E+00           
         50  traj.ascent.states:velocity_8                c     0.000000E+00     8.510585E-01     3.500000E+00           
         51  traj.ascent.states:velocity_9                c     0.000000E+00     8.551755E-01     3.500000E+00           
         52  traj.ascent.states:velocity_10               c     0.000000E+00     8.587206E-01     3.500000E+00           
         53  traj.ascent.states:velocity_11               c     0.000000E+00     8.606567E-01     3.500000E+00           
         54  traj.ascent.states:mass_0                    c     0.000000E+00     1.157797E+00     6.666667E+15           
         55  traj.ascent.states:mass_1                    c     0.000000E+00     1.157786E+00     6.666667E+15           
         56  traj.ascent.states:mass_2                    c     0.000000E+00     1.157771E+00     6.666667E+15           
         57  traj.ascent.states:mass_3                    c     0.000000E+00     1.157766E+00     6.666667E+15           
         58  traj.ascent.states:mass_4                    c     0.000000E+00     1.157754E+00     6.666667E+15           
         59  traj.ascent.states:mass_5                    c     0.000000E+00     1.157739E+00     6.666667E+15           
         60  traj.ascent.states:mass_6                    c     0.000000E+00     1.157734E+00     6.666667E+15           
         61  traj.ascent.states:mass_7                    c     0.000000E+00     1.157722E+00     6.666667E+15           
         62  traj.ascent.states:mass_8                    c     0.000000E+00     1.157707E+00     6.666667E+15           
         63  traj.ascent.states:mass_9                    c     0.000000E+00     1.157702E+00     6.666667E+15           
         64  traj.ascent.states:mass_10                   c     0.000000E+00     1.157690E+00     6.666667E+15           
         65  traj.ascent.states:mass_11                   c     0.000000E+00     1.157675E+00     6.666667E+15           
         66  traj.ascent.states:mass_12                   c     0.000000E+00     1.157670E+00     6.666667E+15           
         67  traj.ascent.states:distance_0                c     0.000000E+00     5.742457E-01     1.500000E+00           
         68  traj.ascent.states:distance_1                c     0.000000E+00     5.919776E-01     1.500000E+00           
         69  traj.ascent.states:distance_2                c     0.000000E+00     5.977685E-01     1.500000E+00           
         70  traj.ascent.states:distance_3                c     0.000000E+00     6.110079E-01     1.500000E+00           
         71  traj.ascent.states:distance_4                c     0.000000E+00     6.294240E-01     1.500000E+00           
         72  traj.ascent.states:distance_5                c     0.000000E+00     6.351900E-01     1.500000E+00           
         73  traj.ascent.states:distance_6                c     0.000000E+00     6.480989E-01     1.500000E+00           
         74  traj.ascent.states:distance_7                c     0.000000E+00     6.653190E-01     1.500000E+00           
         75  traj.ascent.states:distance_8                c     0.000000E+00     6.706283E-01     1.500000E+00           
         76  traj.ascent.states:distance_9                c     0.000000E+00     6.823388E-01     1.500000E+00           
         77  traj.ascent.states:distance_10               c     0.000000E+00     6.973284E-01     1.500000E+00           
         78  traj.ascent.states:distance_11               c     0.000000E+00     7.017847E-01     1.500000E+00           
         79  traj.ascent.controls:alpha_0                 c    -6.000000E+00     2.019070E+00     6.000000E+00           
         80  traj.ascent.controls:alpha_1                 c    -6.000000E+00     1.207226E+00     6.000000E+00           
         81  traj.ascent.controls:alpha_2                 c    -6.000000E+00     8.923168E-01     6.000000E+00           
         82  traj.ascent.controls:alpha_3                 c    -6.000000E+00     9.871869E-01     6.000000E+00           
         83  traj.ascent.controls:alpha_4                 c    -6.000000E+00     1.216372E+00     6.000000E+00           
         84  traj.ascent.controls:alpha_5                 c    -6.000000E+00     1.220152E+00     6.000000E+00           
         85  traj.ascent.controls:alpha_6                 c    -6.000000E+00     1.145866E+00     6.000000E+00           
         86  traj.ascent.controls:alpha_7                 c    -6.000000E+00     1.005413E+00     6.000000E+00           
         87  traj.ascent.controls:alpha_8                 c    -6.000000E+00     1.045435E+00     6.000000E+00           
         88  traj.ascent.controls:alpha_9                 c    -6.000000E+00     1.114587E+00     6.000000E+00           
         89  traj.ascent.controls:alpha_10                c    -6.000000E+00     1.165235E+00     6.000000E+00           
         90  traj.ascent.controls:alpha_11                c    -6.000000E+00     7.793462E-01     6.000000E+00           
         91  traj.climb1.t_duration_0                     c     1.818182E-01     1.021398E+00     1.818182E+00           
         92  traj.climb1.states:altitude_0                c     4.000000E-02     7.168740E-02     1.100000E+00           
         93  traj.climb1.states:altitude_1                c     4.000000E-02     4.140100E-01     1.100000E+00           
         94  traj.climb1.states:altitude_2                c     4.000000E-02     8.659345E-01     1.100000E+00           
         95  traj.climb1.states:altitude_3                c     4.000000E-02     1.000000E+00     1.100000E+00           
         96  traj.climb1.states:mass_0                    c     0.000000E+00     1.156938E+00     6.666667E+15           
         97  traj.climb1.states:mass_1                    c     0.000000E+00     1.155480E+00     6.666667E+15           
         98  traj.climb1.states:mass_2                    c     0.000000E+00     1.153597E+00     6.666667E+15           
         99  traj.climb1.states:mass_3                    c     0.000000E+00     1.153032E+00     6.666667E+15           
        100  traj.climb1.states:distance_0                c     0.000000E+00     7.183628E-01     5.000000E+01           
        101  traj.climb1.states:distance_1                c     0.000000E+00     1.344648E+00     5.000000E+01           
        102  traj.climb1.states:distance_2                c     0.000000E+00     1.552423E+00     5.000000E+01           
        103  traj.climb2.t_duration_0                     c     2.325581E-02     1.300798E-01     1.976744E+00           
        104  traj.climb2.states:altitude_0                c     3.000000E-01     5.443709E-01     1.333333E+00           
        105  traj.climb2.states:altitude_1                c     3.000000E-01     7.761785E-01     1.333333E+00           
        106  traj.climb2.states:altitude_2                c     3.000000E-01     8.378957E-01     1.333333E+00           
        107  traj.climb2.states:altitude_3                c     3.000000E-01     9.600603E-01     1.333333E+00           
        108  traj.climb2.states:altitude_4                c     3.000000E-01     1.081704E+00     1.333333E+00           
        109  traj.climb2.states:altitude_5                c     3.000000E-01     1.113959E+00     1.333333E+00           
        110  traj.climb2.states:altitude_6                c     3.000000E-01     1.181301E+00     1.333333E+00           
        111  traj.climb2.states:altitude_7                c     3.000000E-01     1.239916E+00     1.333333E+00           
        112  traj.climb2.states:altitude_8                c     3.000000E-01     1.250000E+00     1.333333E+00           
        113  traj.climb2.states:mass_0                    c     0.000000E+00     1.153032E+00     6.666667E+15           
        114  traj.climb2.states:mass_1                    c     0.000000E+00     1.150381E+00     6.666667E+15           
        115  traj.climb2.states:mass_2                    c     0.000000E+00     1.147269E+00     6.666667E+15           
        116  traj.climb2.states:mass_3                    c     0.000000E+00     1.146380E+00     6.666667E+15           
        117  traj.climb2.states:mass_4                    c     0.000000E+00     1.144399E+00     6.666667E+15           
        118  traj.climb2.states:mass_5                    c     0.000000E+00     1.141956E+00     6.666667E+15           
        119  traj.climb2.states:mass_6                    c     0.000000E+00     1.141218E+00     6.666667E+15           
        120  traj.climb2.states:mass_7                    c     0.000000E+00     1.139553E+00     6.666667E+15           
        121  traj.climb2.states:mass_8                    c     0.000000E+00     1.137430E+00     6.666667E+15           
        122  traj.climb2.states:mass_9                    c     0.000000E+00     1.136809E+00     6.666667E+15           
        123  traj.climb2.states:distance_0                c     2.000000E-02     5.540064E-02     2.000000E+00           
        124  traj.climb2.states:distance_1                c     2.000000E-02     9.315077E-02     2.000000E+00           
        125  traj.climb2.states:distance_2                c     2.000000E-02     1.060129E-01     2.000000E+00           
        126  traj.climb2.states:distance_3                c     2.000000E-02     1.370027E-01     2.000000E+00           
        127  traj.climb2.states:distance_4                c     2.000000E-02     1.827679E-01     2.000000E+00           
        128  traj.climb2.states:distance_5                c     2.000000E-02     1.978463E-01     2.000000E+00           
        129  traj.climb2.states:distance_6                c     2.000000E-02     2.336256E-01     2.000000E+00           
        130  traj.climb2.states:distance_7                c     2.000000E-02     2.824071E-01     2.000000E+00           
        131  traj.climb2.states:distance_8                c     2.000000E-02     2.966813E-01     2.000000E+00           
        132  traj.cruise.t_initial_0                      c     0.000000E+00     1.705213E+00     1.000000E+02           
        133  traj.cruise.t_duration_0                     c    -2.000000E+02    -6.752070E-01    -2.000000E-05           
        134  traj.desc1.t_duration_0                      c     5.000000E-01     9.564293E-01     1.500000E+00           
        135  traj.desc1.states:altitude_0                 c     3.333333E-02     1.252986E+00     1.333333E+00           
        136  traj.desc1.states:altitude_1                 c     3.333333E-02     1.162431E+00     1.333333E+00           
        137  traj.desc1.states:altitude_2                 c     3.333333E-02     1.031396E+00     1.333333E+00           
        138  traj.desc1.states:altitude_3                 c     3.333333E-02     9.874902E-01     1.333333E+00           
        139  traj.desc1.states:altitude_4                 c     3.333333E-02     8.813402E-01     1.333333E+00           
        140  traj.desc1.states:altitude_5                 c     3.333333E-02     7.159109E-01     1.333333E+00           
        141  traj.desc1.states:altitude_6                 c     3.333333E-02     6.574230E-01     1.333333E+00           
        142  traj.desc1.states:altitude_7                 c     3.333333E-02     5.355589E-01     1.333333E+00           
        143  traj.desc1.states:altitude_8                 c     3.333333E-02     3.799086E-01     1.333333E+00           
        144  traj.desc1.states:altitude_9                 c     3.333333E-02     3.333333E-01     1.333333E+00           
        145  traj.desc1.states:mass_0                     c     0.000000E+00     9.768643E-01     7.142857E+15           
        146  traj.desc1.states:mass_1                     c     0.000000E+00     9.768027E-01     7.142857E+15           
        147  traj.desc1.states:mass_2                     c     0.000000E+00     9.767044E-01     7.142857E+15           
        148  traj.desc1.states:mass_3                     c     0.000000E+00     9.766698E-01     7.142857E+15           
        149  traj.desc1.states:mass_4                     c     0.000000E+00     9.765824E-01     7.142857E+15           
        150  traj.desc1.states:mass_5                     c     0.000000E+00     9.764406E-01     7.142857E+15           
        151  traj.desc1.states:mass_6                     c     0.000000E+00     9.763897E-01     7.142857E+15           
        152  traj.desc1.states:mass_7                     c     0.000000E+00     9.762661E-01     7.142857E+15           
        153  traj.desc1.states:mass_8                     c     0.000000E+00     9.760767E-01     7.142857E+15           
        154  traj.desc1.states:mass_9                     c     0.000000E+00     9.760120E-01     7.142857E+15           
        155  traj.desc1.states:distance_0                 c     8.163265E-01     9.735222E-01     1.360544E+00           
        156  traj.desc1.states:distance_1                 c     8.163265E-01     9.768131E-01     1.360544E+00           
        157  traj.desc1.states:distance_2                 c     8.163265E-01     9.778688E-01     1.360544E+00           
        158  traj.desc1.states:distance_3                 c     8.163265E-01     9.803064E-01     1.360544E+00           
        159  traj.desc1.states:distance_4                 c     8.163265E-01     9.837315E-01     1.360544E+00           
        160  traj.desc1.states:distance_5                 c     8.163265E-01     9.848336E-01     1.360544E+00           
        161  traj.desc1.states:distance_6                 c     8.163265E-01     9.872018E-01     1.360544E+00           
        162  traj.desc1.states:distance_7                 c     8.163265E-01     9.902548E-01     1.360544E+00           
        163  traj.desc1.states:distance_8                 c     8.163265E-01     9.911760E-01     1.360544E+00           
        164  traj.desc2.t_duration_0                      c     3.921569E-02     1.691213E-01     1.960784E+00           
        165  traj.desc2.states:altitude_0                 c    -5.555556E-02     9.201160E-01     1.111111E+00           
        166  traj.desc2.states:altitude_1                 c    -5.555556E-02     7.517109E-01     1.111111E+00           
        167  traj.desc2.states:altitude_2                 c    -5.555556E-02     5.349794E-01     1.111111E+00           
        168  traj.desc2.states:altitude_3                 c    -5.555556E-02     3.160728E-01     1.111111E+00           
        169  traj.desc2.states:altitude_4                 c    -5.555556E-02     1.365397E-01     1.111111E+00           
        170  traj.desc2.states:altitude_5                 c    -5.555556E-02     2.674479E-02     1.111111E+00           
        171  traj.desc2.states:altitude_6                 c    -5.555556E-02    -4.789388E-13     1.111111E+00           
        172  traj.desc2.states:mass_0                     c     0.000000E+00     9.109445E-01     6.666667E+15           
        173  traj.desc2.states:mass_1                     c     0.000000E+00     9.108854E-01     6.666667E+15           
        174  traj.desc2.states:mass_2                     c     0.000000E+00     9.107534E-01     6.666667E+15           
        175  traj.desc2.states:mass_3                     c     0.000000E+00     9.105675E-01     6.666667E+15           
        176  traj.desc2.states:mass_4                     c     0.000000E+00     9.103599E-01     6.666667E+15           
        177  traj.desc2.states:mass_5                     c     0.000000E+00     9.101732E-01     6.666667E+15           
        178  traj.desc2.states:mass_6                     c     0.000000E+00     9.100512E-01     6.666667E+15           
        179  traj.desc2.states:mass_7                     c     0.000000E+00     9.100205E-01     6.666667E+15           
        180  traj.desc2.states:distance_0                 c     0.000000E+00     1.041457E+00     1.428571E+00           
        181  traj.desc2.states:distance_1                 c     0.000000E+00     1.042990E+00     1.428571E+00           
        182  traj.desc2.states:distance_2                 c     0.000000E+00     1.044981E+00     1.428571E+00           
        183  traj.desc2.states:distance_3                 c     0.000000E+00     1.047016E+00     1.428571E+00           
        184  traj.desc2.states:distance_4                 c     0.000000E+00     1.048704E+00     1.428571E+00           
        185  traj.desc2.states:distance_5                 c     0.000000E+00     1.049745E+00     1.428571E+00           
        186  traj.desc2.states:distance_6                 c     0.000000E+00     1.050000E+00     1.428571E+00           
        187  traj.groundroll.t_duration_0                 c     1.980198E-02     7.178546E-01     1.980198E+00           
        188  traj.groundroll.states:velocity_0            c     0.000000E+00     3.913913E-01     6.666667E+00           
        189  traj.groundroll.states:velocity_1            c     0.000000E+00     8.499869E-01     6.666667E+00           
        190  traj.groundroll.states:velocity_2            c     0.000000E+00     9.751811E-01     6.666667E+00           
        191  traj.groundroll.states:mass_0                c     0.000000E+00     1.158748E+00     6.666667E+15           
        192  traj.groundroll.states:mass_1                c     0.000000E+00     1.158440E+00     6.666667E+15           
        193  traj.groundroll.states:mass_2                c     0.000000E+00     1.158009E+00     6.666667E+15           
        194  traj.groundroll.states:mass_3                c     0.000000E+00     1.157872E+00     6.666667E+15           
        195  traj.groundroll.states:distance_0            c     0.000000E+00     2.206643E-01     3.333333E+00           
        196  traj.groundroll.states:distance_1            c     0.000000E+00     1.171291E+00     3.333333E+00           
        197  traj.groundroll.states:distance_2            c     0.000000E+00     1.606287E+00     3.333333E+00           
        198  traj.rotation.t_duration_0                   c     1.980198E-02     6.003341E-02     1.980198E+00           
        199  traj.rotation.states:alpha_0                 c     0.000000E+00     1.251184E-02     1.000000E+00           
        200  traj.rotation.states:alpha_1                 c     0.000000E+00     2.977553E-02     1.000000E+00           
        201  traj.rotation.states:alpha_2                 c     0.000000E+00     3.523948E-02     1.000000E+00           
        202  traj.rotation.states:velocity_0              c     0.000000E+00     1.497118E+00     1.000000E+01           
        203  traj.rotation.states:velocity_1              c     0.000000E+00     1.543391E+00     1.000000E+01           
        204  traj.rotation.states:velocity_2              c     0.000000E+00     1.557677E+00     1.000000E+01           
        205  traj.rotation.states:mass_0                  c     0.000000E+00     1.157872E+00     6.666667E+15           
        206  traj.rotation.states:mass_1                  c     0.000000E+00     1.157845E+00     6.666667E+15           
        207  traj.rotation.states:mass_2                  c     0.000000E+00     1.157809E+00     6.666667E+15           
        208  traj.rotation.states:mass_3                  c     0.000000E+00     1.157797E+00     6.666667E+15           
        209  traj.rotation.states:distance_0              c     0.000000E+00     1.018425E+00     2.000000E+00           
        210  traj.rotation.states:distance_1              c     0.000000E+00     1.096227E+00     2.000000E+00           
        211  traj.rotation.states:distance_2              c     0.000000E+00     1.121407E+00     2.000000E+00           

   Constraints (i - inequality, e - equality)
      Index  Name                                                          Type          Lower           Value           Upper    Status  Lagrange Multiplier (N/A)
          0  mission:constraints:range_residual                               e   0.000000E+00    1.339231E-09    0.000000E+00              9.00000E+100
          1  h_fit.h_init_gear                                                e   1.000000E+00   -3.086771E+02    1.000000E+00         E    9.00000E+100
          2  h_fit.h_init_flaps                                               e   1.000000E+00   -1.980409E+01    1.000000E+00         E    9.00000E+100
          3  groundroll_boundary.velocity                                     e   0.000000E+00    3.233186E-06    0.000000E+00         E    9.00000E+100
          4  gtow_constraint.GTOW                                             e   0.000000E+00   -4.446225E-08    0.000000E+00              9.00000E+100
          5  mission:constraints:mass_residual                                e   0.000000E+00    8.752920E-07    0.000000E+00              9.00000E+100
          6  taxi_groundroll_mass_constraint.mass                             e   0.000000E+00   -4.719623E-10    0.000000E+00              9.00000E+100
          7  traj.linkages.groundroll:mass_final|rotation:mass_initial        e   0.000000E+00   -2.002344E-08    0.000000E+00              9.00000E+100
          8  traj.linkages.rotation:mass_final|ascent:mass_initial            e   0.000000E+00   -1.213048E-06    0.000000E+00         E    9.00000E+100
          9  traj.linkages.rotation:alpha_final|ascent:alpha_initial          e   0.000000E+00    3.162897E-07    0.000000E+00              9.00000E+100
         10  traj.linkages.ascent:mass_final|accel:mass_initial               e   0.000000E+00   -1.929147E-06    0.000000E+00         E    9.00000E+100
         11  traj.linkages.accel:mass_final|climb1:mass_initial               e   0.000000E+00   -1.931359E-06    0.000000E+00         E    9.00000E+100
         12  traj.linkages.climb1:mass_final|climb2:mass_initial              e   0.000000E+00   -1.947017E-06    0.000000E+00         E    9.00000E+100
         13  traj.linkages.climb2:mass_final|cruise:mass_initial              e   0.000000E+00   -9.274288E-08    0.000000E+00              9.00000E+100
         14  traj.linkages.cruise:mass_final|desc1:mass_initial               e   0.000000E+00   -1.153342E-07    0.000000E+00              9.00000E+100
         15  traj.linkages.desc1:mass_final|desc2:mass_initial                e   0.000000E+00   -2.593239E-06    0.000000E+00         E    9.00000E+100
         16  traj.phases.accel->final_boundary_constraint->EAS                e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
         17  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00    1.468443E-03    0.000000E+00         E    9.00000E+100
         18  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00   -1.298706E-04    0.000000E+00         E    9.00000E+100
         19  traj.accel.collocation_constraint.defects:velocity               e   0.000000E+00    2.483256E-05    0.000000E+00         E    9.00000E+100
         20  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00   -8.104838E-07    0.000000E+00              9.00000E+100
         21  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00   -3.733995E-07    0.000000E+00              9.00000E+100
         22  traj.accel.collocation_constraint.defects:mass                   e   0.000000E+00    9.671364E-08    0.000000E+00              9.00000E+100
         23  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    5.888798E-03    0.000000E+00         E    9.00000E+100
         24  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    3.267157E-03    0.000000E+00         E    9.00000E+100
         25  traj.accel.collocation_constraint.defects:distance               e   0.000000E+00    1.345127E-06    0.000000E+00         E    9.00000E+100
         26  traj.phases.ascent->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
         27  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    1.380588E-02    0.000000E+00         E    9.00000E+100
         28  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    4.441502E-02    0.000000E+00         E    9.00000E+100
         29  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.852853E-02    0.000000E+00         E    9.00000E+100
         30  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    4.923485E-02    0.000000E+00         E    9.00000E+100
         31  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    7.504211E-02    0.000000E+00         E    9.00000E+100
         32  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    7.823026E-02    0.000000E+00         E    9.00000E+100
         33  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    7.088502E-02    0.000000E+00         E    9.00000E+100
         34  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    5.663337E-02    0.000000E+00         E    9.00000E+100
         35  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    6.085253E-02    0.000000E+00         E    9.00000E+100
         36  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    6.841647E-02    0.000000E+00         E    9.00000E+100
         37  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    7.407519E-02    0.000000E+00         E    9.00000E+100
         38  traj.ascent.collocation_constraint.defects:flight_path_angle     e   0.000000E+00    3.129109E-02    0.000000E+00         E    9.00000E+100
         39  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00    7.941332E-09    0.000000E+00              9.00000E+100
         40  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.066423E-02    0.000000E+00         E    9.00000E+100
         41  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -2.618571E-02    0.000000E+00         E    9.00000E+100
         42  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -3.386275E-02    0.000000E+00         E    9.00000E+100
         43  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -3.403205E-02    0.000000E+00         E    9.00000E+100
         44  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.996436E-02    0.000000E+00         E    9.00000E+100
         45  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.653011E-02    0.000000E+00         E    9.00000E+100
         46  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.616557E-02    0.000000E+00         E    9.00000E+100
         47  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -2.054336E-02    0.000000E+00         E    9.00000E+100
         48  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.961196E-02    0.000000E+00         E    9.00000E+100
         49  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.112073E-02    0.000000E+00         E    9.00000E+100
         50  traj.ascent.collocation_constraint.defects:altitude              e   0.000000E+00   -1.411185E-02    0.000000E+00         E    9.00000E+100
         51  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -3.529893E-02    0.000000E+00         E    9.00000E+100
         52  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00   -3.526182E-03    0.000000E+00         E    9.00000E+100
         53  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    7.046939E-03    0.000000E+00         E    9.00000E+100
         54  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    9.630025E-03    0.000000E+00         E    9.00000E+100
         55  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    8.878051E-03    0.000000E+00         E    9.00000E+100
         56  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    3.749255E-03    0.000000E+00         E    9.00000E+100
         57  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    2.754617E-03    0.000000E+00         E    9.00000E+100
         58  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    2.922929E-03    0.000000E+00         E    9.00000E+100
         59  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    3.857964E-03    0.000000E+00         E    9.00000E+100
         60  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    3.183320E-03    0.000000E+00         E    9.00000E+100
         61  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    6.987370E-08    0.000000E+00              9.00000E+100
         62  traj.ascent.collocation_constraint.defects:velocity              e   0.000000E+00    1.857271E-03    0.000000E+00         E    9.00000E+100
         63  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    5.604715E-07    0.000000E+00              9.00000E+100
         64  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    6.958456E-07    0.000000E+00              9.00000E+100
         65  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    6.342270E-07    0.000000E+00              9.00000E+100
         66  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    5.631619E-07    0.000000E+00              9.00000E+100
         67  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    5.751541E-07    0.000000E+00              9.00000E+100
         68  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    4.688021E-07    0.000000E+00              9.00000E+100
         69  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    3.942806E-07    0.000000E+00              9.00000E+100
         70  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    4.523793E-07    0.000000E+00              9.00000E+100
         71  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    3.770889E-07    0.000000E+00              9.00000E+100
         72  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    2.963444E-07    0.000000E+00              9.00000E+100
         73  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    3.841670E-07    0.000000E+00              9.00000E+100
         74  traj.ascent.collocation_constraint.defects:mass                  e   0.000000E+00    3.512489E-07    0.000000E+00              9.00000E+100
         75  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00    2.386474E-03    0.000000E+00         E    9.00000E+100
         76  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00    7.107478E-04    0.000000E+00         E    9.00000E+100
         77  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00    4.036369E-04    0.000000E+00         E    9.00000E+100
         78  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00    3.359941E-04    0.000000E+00         E    9.00000E+100
         79  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00    3.495031E-04    0.000000E+00         E    9.00000E+100
         80  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.236004E-04    0.000000E+00         E    9.00000E+100
         81  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -4.328531E-04    0.000000E+00         E    9.00000E+100
         82  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.097208E-03    0.000000E+00         E    9.00000E+100
         83  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -1.995747E-03    0.000000E+00         E    9.00000E+100
         84  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -2.300813E-03    0.000000E+00         E    9.00000E+100
         85  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -3.335204E-03    0.000000E+00         E    9.00000E+100
         86  traj.ascent.collocation_constraint.defects:distance              e   0.000000E+00   -4.776637E-03    0.000000E+00         E    9.00000E+100
         87  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00   -3.828739E-09    0.000000E+00              9.00000E+100
         88  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00    3.551259E-09    0.000000E+00              9.00000E+100
         89  traj.ascent.continuity_comp.defect_control_rates:alpha_rate      e   0.000000E+00    2.607885E-09    0.000000E+00              9.00000E+100
         90  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00   -7.029350E-09    0.000000E+00              9.00000E+100
         91  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00    2.381265E-08    0.000000E+00              9.00000E+100
         92  traj.ascent.continuity_comp.defect_controls:alpha                e   0.000000E+00    6.787624E-09    0.000000E+00              9.00000E+100
         93  traj.phases.climb1->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
         94  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00    1.246737E-04    0.000000E+00         E    9.00000E+100
         95  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00    3.522430E-04    0.000000E+00         E    9.00000E+100
         96  traj.climb1.collocation_constraint.defects:altitude              e   0.000000E+00   -2.419770E-04    0.000000E+00         E    9.00000E+100
         97  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00   -2.264635E-06    0.000000E+00         E    9.00000E+100
         98  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00   -2.438166E-06    0.000000E+00         E    9.00000E+100
         99  traj.climb1.collocation_constraint.defects:mass                  e   0.000000E+00   -8.819609E-07    0.000000E+00              9.00000E+100
        100  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00   -5.525501E-04    0.000000E+00         E    9.00000E+100
        101  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00   -7.368944E-04    0.000000E+00         E    9.00000E+100
        102  traj.climb1.collocation_constraint.defects:distance              e   0.000000E+00   -3.942347E-04    0.000000E+00         E    9.00000E+100
        103  traj.phases.climb2->final_boundary_constraint->altitude          e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        104  traj.phases.climb2->final_boundary_constraint->mach              e   8.000000E-01    8.000000E-01    8.000000E-01              9.00000E+100
        105  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -4.862122E-04    0.000000E+00         E    9.00000E+100
        106  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -5.370158E-03    0.000000E+00         E    9.00000E+100
        107  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -6.525680E-03    0.000000E+00         E    9.00000E+100
        108  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00    4.017970E-03    0.000000E+00         E    9.00000E+100
        109  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.221756E-02    0.000000E+00         E    9.00000E+100
        110  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -1.292811E-02    0.000000E+00         E    9.00000E+100
        111  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00    4.257274E-03    0.000000E+00         E    9.00000E+100
        112  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00    7.143553E-03    0.000000E+00         E    9.00000E+100
        113  traj.climb2.collocation_constraint.defects:altitude              e   0.000000E+00   -2.613191E-03    0.000000E+00         E    9.00000E+100
        114  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    2.885273E-08    0.000000E+00              9.00000E+100
        115  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    5.217549E-05    0.000000E+00         E    9.00000E+100
        116  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    1.342084E-04    0.000000E+00         E    9.00000E+100
        117  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00   -1.668851E-05    0.000000E+00         E    9.00000E+100
        118  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    8.423163E-05    0.000000E+00         E    9.00000E+100
        119  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    1.048530E-04    0.000000E+00         E    9.00000E+100
        120  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    1.798120E-05    0.000000E+00         E    9.00000E+100
        121  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00   -2.569334E-05    0.000000E+00         E    9.00000E+100
        122  traj.climb2.collocation_constraint.defects:mass                  e   0.000000E+00    2.065858E-05    0.000000E+00         E    9.00000E+100
        123  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    4.938537E-07    0.000000E+00              9.00000E+100
        124  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    2.195861E-04    0.000000E+00         E    9.00000E+100
        125  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    3.184959E-04    0.000000E+00         E    9.00000E+100
        126  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    3.216567E-04    0.000000E+00         E    9.00000E+100
        127  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    3.463061E-04    0.000000E+00         E    9.00000E+100
        128  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    3.716600E-04    0.000000E+00         E    9.00000E+100
        129  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    1.008783E-03    0.000000E+00         E    9.00000E+100
        130  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00    3.360768E-03    0.000000E+00         E    9.00000E+100
        131  traj.climb2.collocation_constraint.defects:distance              e   0.000000E+00   -2.039447E-04    0.000000E+00         E    9.00000E+100
        132  traj.phases.desc1->final_boundary_constraint->altitude           e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        133  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00    2.876317E-05    0.000000E+00         E    9.00000E+100
        134  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -7.524102E-05    0.000000E+00         E    9.00000E+100
        135  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -3.262016E-04    0.000000E+00         E    9.00000E+100
        136  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -3.705867E-04    0.000000E+00         E    9.00000E+100
        137  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -5.653523E-04    0.000000E+00         E    9.00000E+100
        138  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -2.570404E-03    0.000000E+00         E    9.00000E+100
        139  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00    1.061086E-04    0.000000E+00         E    9.00000E+100
        140  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -5.977968E-05    0.000000E+00         E    9.00000E+100
        141  traj.desc1.collocation_constraint.defects:altitude               e   0.000000E+00   -1.162143E-04    0.000000E+00         E    9.00000E+100
        142  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -9.170243E-09    0.000000E+00              9.00000E+100
        143  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -1.579846E-07    0.000000E+00              9.00000E+100
        144  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -1.969204E-07    0.000000E+00              9.00000E+100
        145  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -7.753502E-07    0.000000E+00              9.00000E+100
        146  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -7.751802E-07    0.000000E+00              9.00000E+100
        147  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -8.011385E-07    0.000000E+00              9.00000E+100
        148  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00   -2.684238E-07    0.000000E+00              9.00000E+100
        149  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    7.502331E-08    0.000000E+00              9.00000E+100
        150  traj.desc1.collocation_constraint.defects:mass                   e   0.000000E+00    1.383907E-07    0.000000E+00              9.00000E+100
        151  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    1.037309E-03    0.000000E+00         E    9.00000E+100
        152  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    2.635459E-04    0.000000E+00         E    9.00000E+100
        153  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    3.128955E-05    0.000000E+00         E    9.00000E+100
        154  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    9.061311E-05    0.000000E+00         E    9.00000E+100
        155  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    9.393807E-05    0.000000E+00         E    9.00000E+100
        156  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    5.604308E-04    0.000000E+00         E    9.00000E+100
        157  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00   -1.596787E-04    0.000000E+00         E    9.00000E+100
        158  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00   -3.976715E-05    0.000000E+00         E    9.00000E+100
        159  traj.desc1.collocation_constraint.defects:distance               e   0.000000E+00    5.055846E-06    0.000000E+00         E    9.00000E+100
        160  traj.phases.desc2->final_boundary_constraint->altitude           e   1.000000E+00    1.000000E+00    1.000000E+00              9.00000E+100
        161  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    6.787083E-05    0.000000E+00         E    9.00000E+100
        162  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    1.655716E-04    0.000000E+00         E    9.00000E+100
        163  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    3.146944E-04    0.000000E+00         E    9.00000E+100
        164  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    3.387977E-04    0.000000E+00         E    9.00000E+100
        165  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    3.234400E-04    0.000000E+00         E    9.00000E+100
        166  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    1.845838E-04    0.000000E+00         E    9.00000E+100
        167  traj.desc2.collocation_constraint.defects:altitude               e   0.000000E+00    5.872367E-05    0.000000E+00         E    9.00000E+100
        168  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00    7.056639E-09    0.000000E+00              9.00000E+100
        169  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -7.710483E-08    0.000000E+00              9.00000E+100
        170  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -2.657978E-07    0.000000E+00              9.00000E+100
        171  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -1.364348E-07    0.000000E+00              9.00000E+100
        172  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -3.511706E-07    0.000000E+00              9.00000E+100
        173  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -2.024784E-07    0.000000E+00              9.00000E+100
        174  traj.desc2.collocation_constraint.defects:mass                   e   0.000000E+00   -3.130815E-08    0.000000E+00              9.00000E+100
        175  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00    5.402288E-08    0.000000E+00              9.00000E+100
        176  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -2.643903E-05    0.000000E+00         E    9.00000E+100
        177  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -6.616249E-05    0.000000E+00         E    9.00000E+100
        178  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -8.608755E-05    0.000000E+00         E    9.00000E+100
        179  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -7.252548E-05    0.000000E+00         E    9.00000E+100
        180  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -3.832815E-05    0.000000E+00         E    9.00000E+100
        181  traj.desc2.collocation_constraint.defects:distance               e   0.000000E+00   -8.281351E-06    0.000000E+00         E    9.00000E+100
        182  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00   -6.307679E-05    0.000000E+00         E    9.00000E+100
        183  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00   -9.838219E-04    0.000000E+00         E    9.00000E+100
        184  traj.groundroll.collocation_constraint.defects:velocity          e   0.000000E+00   -9.003263E-04    0.000000E+00         E    9.00000E+100
        185  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00   -1.643173E-09    0.000000E+00              9.00000E+100
        186  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00   -4.282089E-08    0.000000E+00              9.00000E+100
        187  traj.groundroll.collocation_constraint.defects:mass              e   0.000000E+00   -7.772175E-08    0.000000E+00              9.00000E+100
        188  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00   -1.325662E-09    0.000000E+00              9.00000E+100
        189  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00    8.285931E-03    0.000000E+00         E    9.00000E+100
        190  traj.groundroll.collocation_constraint.defects:distance          e   0.000000E+00    6.933412E-03    0.000000E+00         E    9.00000E+100
        191  traj.phases.rotation->final_boundary_constraint->normal_force    e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
        192  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -7.133744E-08    0.000000E+00              9.00000E+100
        193  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -3.269114E-07    0.000000E+00              9.00000E+100
        194  traj.rotation.collocation_constraint.defects:alpha               e   0.000000E+00   -2.369193E-07    0.000000E+00              9.00000E+100
        195  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00   -3.865232E-04    0.000000E+00         E    9.00000E+100
        196  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00   -5.240976E-04    0.000000E+00         E    9.00000E+100
        197  traj.rotation.collocation_constraint.defects:velocity            e   0.000000E+00    2.298620E-04    0.000000E+00         E    9.00000E+100
        198  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00   -2.274859E-08    0.000000E+00              9.00000E+100
        199  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00   -2.287093E-08    0.000000E+00              9.00000E+100
        200  traj.rotation.collocation_constraint.defects:mass                e   0.000000E+00   -2.701219E-08    0.000000E+00              9.00000E+100
        201  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00    1.055500E-03    0.000000E+00         E    9.00000E+100
        202  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00    1.404092E-03    0.000000E+00         E    9.00000E+100
        203  traj.rotation.collocation_constraint.defects:distance            e   0.000000E+00    1.802070E-03    0.000000E+00         E    9.00000E+100
        204  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    6.817837E-01    1.100000E+00              9.00000E+100
        205  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.279975E-01    1.100000E+00              9.00000E+100
        206  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    3.472408E-01    1.100000E+00              9.00000E+100
        207  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    3.823319E-01    1.100000E+00              9.00000E+100
        208  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    3.823319E-01    1.100000E+00              9.00000E+100
        209  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.730253E-01    1.100000E+00              9.00000E+100
        210  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.938312E-01    1.100000E+00              9.00000E+100
        211  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.720772E-01    1.100000E+00              9.00000E+100
        212  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.720773E-01    1.100000E+00              9.00000E+100
        213  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.310321E-01    1.100000E+00              9.00000E+100
        214  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.559793E-01    1.100000E+00              9.00000E+100
        215  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.848590E-01    1.100000E+00              9.00000E+100
        216  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    4.848591E-01    1.100000E+00              9.00000E+100
        217  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    5.093937E-01    1.100000E+00              9.00000E+100
        218  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    3.704543E-01    1.100000E+00              9.00000E+100
        219  traj.phases.ascent->path_constraint->load_factor                 i   0.000000E+00    2.847496E-01    1.100000E+00              9.00000E+100
        220  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    8.595349E+00    1.500000E+01              9.00000E+100
        221  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    4.270905E+00    1.500000E+01              9.00000E+100
        222  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.335322E+00    1.500000E+01              9.00000E+100
        223  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.471691E+00    1.500000E+01              9.00000E+100
        224  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    2.471690E+00    1.500000E+01              9.00000E+100
        225  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    4.367885E+00    1.500000E+01              9.00000E+100
        226  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.638550E+00    1.500000E+01              9.00000E+100
        227  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.894010E+00    1.500000E+01              9.00000E+100
        228  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    6.894011E+00    1.500000E+01              9.00000E+100
        229  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    7.008538E+00    1.500000E+01              9.00000E+100
        230  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    7.967320E+00    1.500000E+01              9.00000E+100
        231  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    8.742034E+00    1.500000E+01              9.00000E+100
        232  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    8.742035E+00    1.500000E+01              9.00000E+100
        233  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    1.049139E+01    1.500000E+01              9.00000E+100
        234  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    9.524080E+00    1.500000E+01              9.00000E+100
        235  traj.phases.ascent->path_constraint->theta                       i   0.000000E+00    7.814230E+00    1.500000E+01              9.00000E+100
        236  traj.phases.climb2->final_boundary_constraint->altitude_rate     i   1.000000E-01    3.482176E+02    1.000000E+30              9.00000E+100

--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.

This is a simple wrapper of Dymos’ run_problem() function. It allows the users to provide record_filename, restart_filename, suppress_solver_print, and run_driver. In our case, record_filename is changed to aviary_history.db and restart_filename is set to None. The rest of the arguments take default values. If a restart file name is provided, aviary (or dymos) will load the states, controls, and parameters as given in the provided case as the initial guess for the next run. We have discussed the .db file in level 1 onboarding doc and will discuss how to use it to generate useful output in level 3 onboarding doc.

Finally, we can add a few print statements for the variables that we are interested:

print("Mission.Objectives.FUEL",
      prob.get_val(Mission.Objectives.FUEL, units='unitless'))
print("Mission.Design.FUEL_MASS",
      prob.get_val(Mission.Design.FUEL_MASS, units='lbm'))
print("Mission.Design.FUEL_MASS_REQUIRED",
      prob.get_val(Mission.Design.FUEL_MASS_REQUIRED, units='lbm'))
print("Mission.Summary.TOTAL_FUEL_MASS",
      prob.get_val(Mission.Summary.TOTAL_FUEL_MASS, units='lbm'))
print("Mission.Summary.GROSS_MASS (takeoff_mass)",
      prob.get_val(Mission.Summary.GROSS_MASS, units='lbm'))
print("Mission.Landing.TOUCHDOWN_MASS (final_mass)",
      prob.get_val(Mission.Landing.TOUCHDOWN_MASS, units='lbm'))
print()

print("Groundroll Final Mass (lbm)",
      prob.get_val('traj.phases.groundroll.states:mass', units='lbm')[-1])
print("Rotation Final Mass (lbm)",
      prob.get_val('traj.rotation.states:mass', units='lbm')[-1])
print("Ascent Final Mass (lbm)",
      prob.get_val('traj.ascent.states:mass', units='lbm')[-1])
print("Accel Final Mass (lbm)",
      prob.get_val('traj.accel.states:mass', units='lbm')[-1])
print("Climb1 Final Mass (lbm)",
      prob.get_val('traj.climb1.states:mass', units='lbm')[-1])
print("Climb2 Final Mass (lbm)",
      prob.get_val('traj.climb2.states:mass', units='lbm')[-1])
print("Cruise Final Mass (lbm)",
      prob.get_val('traj.phases.cruise.rhs.calc_weight.mass', units='lbm')[-1])
print("Desc1 Final Mass (lbm)",
      prob.get_val('traj.desc1.states:mass', units='lbm')[-1])
print("Desc2 Final Mass (lbm)",
      prob.get_val('traj.desc2.states:mass', units='lbm')[-1])
print('done')
Mission.Objectives.FUEL [4.43116407]
Mission.Design.FUEL_MASS [42515.50721545]
Mission.Design.FUEL_MASS_REQUIRED [42515.50721545]
Mission.Summary.TOTAL_FUEL_MASS [42515.60248201]
Mission.Summary.GROSS_MASS (takeoff_mass) [174020.68225281]
Mission.Landing.TOUCHDOWN_MASS (final_mass) [136503.0797708]

Groundroll Final Mass (lbm) [173680.75323402]
Rotation Final Mass (lbm) [173669.56493953]
Ascent Final Mass (lbm) [173650.43374416]
Accel Final Mass (lbm) [173540.76672894]
Climb1 Final Mass (lbm) [172954.73533652]
Climb2 Final Mass (lbm) [170521.33461179]
Cruise Final Mass (lbm) 136760.9916381593
Desc1 Final Mass (lbm) [136641.67398654]
Desc2 Final Mass (lbm) [136503.0797708]
done

We will cover user customized outputs in level 3.

Level 2: Another example#

We now use a similar aircraft, a large single aisle commercial transport aircraft, but with a different mass estimation and mission method. Let us run Aviary using this input deck in level 1 first.

!aviary run_mission models/test_aircraft/aircraft_for_bench_FwFm.csv --max_iter 0 --optimizer IPOPT
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/pyoptsparse/pyOpt_MPI.py:68: UserWarning: mpi4py could not be imported. mpi4py is required to use the parallel gradient analysis and parallel objective analysis for non-gradient based optimizers. Continuing using a dummy MPI module from pyOptSparse.
  warnings.warn(warn)
Loaded default phase_info for height_energy equations of motion
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'climb': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'climb': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'cruise': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'cruise': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'descent': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'descent': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "

The following variables have been overridden:
  'aircraft:design:touchdown_mass  152800  lbm
  'aircraft:engine:mass  [7400.]  lbm
  'aircraft:fins:mass  0  lbm
  'aircraft:fuel:auxiliary_fuel_capacity  0  lbm
  'aircraft:fuel:fuselage_fuel_capacity  0  lbm
  'aircraft:fuel:total_capacity  45694  lbm
  'aircraft:fuselage:planform_area  1578.24  ft**2
  'aircraft:fuselage:wetted_area  4158.62  ft**2
  'aircraft:horizontal_tail:wetted_area  592.65  ft**2
  'aircraft:landing_gear:main_gear_oleo_length  102  inch
  'aircraft:landing_gear:nose_gear_oleo_length  67  inch
  'aircraft:vertical_tail:wetted_area  581.13  ft**2
  'aircraft:wing:aspect_ratio  11.22091  unitless
  'aircraft:wing:control_surface_area  137  ft**2
  'aircraft:wing:wetted_area  2396.56  ft**2
--- Constraint Report [traj] ---
    --- climb ---
        [path]    0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
    --- cruise ---
        [initial] 0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
        [final]   0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
    --- descent ---
        [path]    0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.cruise.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.descent.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'aircraft_for_bench_FwFm' was computed 3 times, taking 0.6454060449999588 seconds.
Total jacobian shape: (137, 96) 
Jacobian shape: (137, 96)  (7.79% nonzero)
FWD solves: 14   REV solves: 0
Total colors vs. total size: 14 vs 96  (85.42% improvement)

Sparsity computed using tolerance: 1e-25
Time to compute sparsity:   0.6454 sec
Time to compute coloring:   0.0525 sec
Memory to compute coloring:   0.0000 MB
Coloring created on: 2024-11-04 17:21:59
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.

Number of nonzeros in equality constraint Jacobian...:      676
Number of nonzeros in inequality constraint Jacobian.:      346
Number of nonzeros in Lagrangian Hessian.............:        0
Total number of variables............................:       96
                     variables with only lower bounds:        2
                variables with lower and upper bounds:       94
                     variables with only upper bounds:        0
Total number of equality constraints.................:       94
Total number of inequality constraints...............:       42
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:       42
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  3.0000000e-01 1.90e+02 1.91e-02  -5.0 0.00e+00    -  0.00e+00 0.00e+00   0

Number of Iterations....: 0

                                   (scaled)                 (unscaled)
Objective...............:   2.9999999999999999e-01    2.9999999999999999e-01
Dual infeasibility......:   1.9052460444930253e-02    1.9052460444930253e-02
Constraint violation....:   1.9006004373650109e+02    1.9006004373650109e+02
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   1.0000000000000000e+17    1.0000000000000000e+17
Overall NLP error.......:   1.0000000000000000e+17    1.0000000000000000e+17


Number of objective function evaluations             = 1
Number of objective gradient evaluations             = 1
Number of equality constraint evaluations            = 1
Number of inequality constraint evaluations          = 1
Number of equality constraint Jacobian evaluations   = 1
Number of inequality constraint Jacobian evaluations = 1
Number of Lagrangian Hessian evaluations             = 0
Total seconds in IPOPT                               = 0.683

EXIT: Maximum Number of Iterations Exceeded.
minimal_print is not available for this solution


Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
    Objective Function: _objfunc

    Solution: 
--------------------------------------------------------------------------------
    Total Time:                    0.6843
       User Objective Time :       0.3936
       User Sensitivity Time :     0.2798
       Interface Time :            0.0052
       Opt Solver Time:            0.0057
    Calls to Objective Function :       2
    Calls to Sens Function :            2


   Objectives
      Index  Name                               Value
          0  mission:objectives:fuel     3.000000E-01

   Variables (c - continuous, i - integer, d - discrete)
      Index  Name                              Type      Lower Bound            Value      Upper Bound     Status
          0  mission:design:gross_mass_0          c     5.714286E-05     1.002286E+00     1.000000E+30           
          1  mission:summary:gross_mass_0         c     5.714286E-05     1.002286E+00     1.000000E+30           
          2  traj.climb.t_duration_0              c     5.000000E-01     5.100000E-01     1.500000E+00           
          3  traj.climb.states:mass_0             c     0.000000E+00     7.956010E+00     1.000000E+17           
          4  traj.climb.states:mass_1             c     0.000000E+00     7.956010E+00     1.000000E+17           
          5  traj.climb.states:mass_2             c     0.000000E+00     7.956010E+00     1.000000E+17           
          6  traj.climb.states:mass_3             c     0.000000E+00     7.956010E+00     1.000000E+17           
          7  traj.climb.states:mass_4             c     0.000000E+00     7.956010E+00     1.000000E+17           
          8  traj.climb.states:mass_5             c     0.000000E+00     7.956010E+00     1.000000E+17           
          9  traj.climb.states:mass_6             c     0.000000E+00     7.956010E+00     1.000000E+17           
         10  traj.climb.states:mass_7             c     0.000000E+00     7.956010E+00     1.000000E+17           
         11  traj.climb.states:mass_8             c     0.000000E+00     7.956010E+00     1.000000E+17           
         12  traj.climb.states:mass_9             c     0.000000E+00     7.956010E+00     1.000000E+17           
         13  traj.climb.states:mass_10            c     0.000000E+00     7.956010E+00     1.000000E+17           
         14  traj.climb.states:mass_11            c     0.000000E+00     7.956010E+00     1.000000E+17           
         15  traj.climb.states:mass_12            c     0.000000E+00     7.956010E+00     1.000000E+17           
         16  traj.climb.states:mass_13            c     0.000000E+00     7.956010E+00     1.000000E+17           
         17  traj.climb.states:mass_14            c     0.000000E+00     7.956010E+00     1.000000E+17           
         18  traj.climb.states:mass_15            c     0.000000E+00     7.956010E+00     1.000000E+17           
         19  traj.climb.states:distance_0         c     0.000000E+00     9.999990E-03     1.000000E+15           
         20  traj.climb.states:distance_1         c     0.000000E+00     9.999990E-03     1.000000E+15           
         21  traj.climb.states:distance_2         c     0.000000E+00     9.999990E-03     1.000000E+15           
         22  traj.climb.states:distance_3         c     0.000000E+00     9.999990E-03     1.000000E+15           
         23  traj.climb.states:distance_4         c     0.000000E+00     9.999990E-03     1.000000E+15           
         24  traj.climb.states:distance_5         c     0.000000E+00     9.999990E-03     1.000000E+15           
         25  traj.climb.states:distance_6         c     0.000000E+00     9.999990E-03     1.000000E+15           
         26  traj.climb.states:distance_7         c     0.000000E+00     9.999990E-03     1.000000E+15           
         27  traj.climb.states:distance_8         c     0.000000E+00     9.999990E-03     1.000000E+15           
         28  traj.climb.states:distance_9         c     0.000000E+00     9.999990E-03     1.000000E+15           
         29  traj.climb.states:distance_10        c     0.000000E+00     9.999990E-03     1.000000E+15           
         30  traj.climb.states:distance_11        c     0.000000E+00     9.999990E-03     1.000000E+15           
         31  traj.climb.states:distance_12        c     0.000000E+00     9.999990E-03     1.000000E+15           
         32  traj.climb.states:distance_13        c     0.000000E+00     9.999990E-03     1.000000E+15           
         33  traj.climb.states:distance_14        c     0.000000E+00     9.999990E-03     1.000000E+15           
         34  traj.cruise.t_duration_0             c     5.000000E-01     5.100000E-01     1.500000E+00           
         35  traj.cruise.states:mass_0            c     0.000000E+00     7.956010E+00     1.000000E+17           
         36  traj.cruise.states:mass_1            c     0.000000E+00     7.956010E+00     1.000000E+17           
         37  traj.cruise.states:mass_2            c     0.000000E+00     7.956010E+00     1.000000E+17           
         38  traj.cruise.states:mass_3            c     0.000000E+00     7.956010E+00     1.000000E+17           
         39  traj.cruise.states:mass_4            c     0.000000E+00     7.956010E+00     1.000000E+17           
         40  traj.cruise.states:mass_5            c     0.000000E+00     7.956010E+00     1.000000E+17           
         41  traj.cruise.states:mass_6            c     0.000000E+00     7.956010E+00     1.000000E+17           
         42  traj.cruise.states:mass_7            c     0.000000E+00     7.956010E+00     1.000000E+17           
         43  traj.cruise.states:mass_8            c     0.000000E+00     7.956010E+00     1.000000E+17           
         44  traj.cruise.states:mass_9            c     0.000000E+00     7.956010E+00     1.000000E+17           
         45  traj.cruise.states:mass_10           c     0.000000E+00     7.956010E+00     1.000000E+17           
         46  traj.cruise.states:mass_11           c     0.000000E+00     7.956010E+00     1.000000E+17           
         47  traj.cruise.states:mass_12           c     0.000000E+00     7.956010E+00     1.000000E+17           
         48  traj.cruise.states:mass_13           c     0.000000E+00     7.956010E+00     1.000000E+17           
         49  traj.cruise.states:mass_14           c     0.000000E+00     7.956010E+00     1.000000E+17           
         50  traj.cruise.states:distance_0        c     0.000000E+00     9.999990E-03     1.000000E+15           
         51  traj.cruise.states:distance_1        c     0.000000E+00     9.999990E-03     1.000000E+15           
         52  traj.cruise.states:distance_2        c     0.000000E+00     9.999990E-03     1.000000E+15           
         53  traj.cruise.states:distance_3        c     0.000000E+00     9.999990E-03     1.000000E+15           
         54  traj.cruise.states:distance_4        c     0.000000E+00     9.999990E-03     1.000000E+15           
         55  traj.cruise.states:distance_5        c     0.000000E+00     9.999990E-03     1.000000E+15           
         56  traj.cruise.states:distance_6        c     0.000000E+00     9.999990E-03     1.000000E+15           
         57  traj.cruise.states:distance_7        c     0.000000E+00     9.999990E-03     1.000000E+15           
         58  traj.cruise.states:distance_8        c     0.000000E+00     9.999990E-03     1.000000E+15           
         59  traj.cruise.states:distance_9        c     0.000000E+00     9.999990E-03     1.000000E+15           
         60  traj.cruise.states:distance_10       c     0.000000E+00     9.999990E-03     1.000000E+15           
         61  traj.cruise.states:distance_11       c     0.000000E+00     9.999990E-03     1.000000E+15           
         62  traj.cruise.states:distance_12       c     0.000000E+00     9.999990E-03     1.000000E+15           
         63  traj.cruise.states:distance_13       c     0.000000E+00     9.999990E-03     1.000000E+15           
         64  traj.cruise.states:distance_14       c     0.000000E+00     9.999990E-03     1.000000E+15           
         65  traj.descent.t_duration_0            c     5.000000E-01     5.100000E-01     1.500000E+00           
         66  traj.descent.states:mass_0           c     0.000000E+00     7.956010E+00     1.000000E+17           
         67  traj.descent.states:mass_1           c     0.000000E+00     7.956010E+00     1.000000E+17           
         68  traj.descent.states:mass_2           c     0.000000E+00     7.956010E+00     1.000000E+17           
         69  traj.descent.states:mass_3           c     0.000000E+00     7.956010E+00     1.000000E+17           
         70  traj.descent.states:mass_4           c     0.000000E+00     7.956010E+00     1.000000E+17           
         71  traj.descent.states:mass_5           c     0.000000E+00     7.956010E+00     1.000000E+17           
         72  traj.descent.states:mass_6           c     0.000000E+00     7.956010E+00     1.000000E+17           
         73  traj.descent.states:mass_7           c     0.000000E+00     7.956010E+00     1.000000E+17           
         74  traj.descent.states:mass_8           c     0.000000E+00     7.956010E+00     1.000000E+17           
         75  traj.descent.states:mass_9           c     0.000000E+00     7.956010E+00     1.000000E+17           
         76  traj.descent.states:mass_10          c     0.000000E+00     7.956010E+00     1.000000E+17           
         77  traj.descent.states:mass_11          c     0.000000E+00     7.956010E+00     1.000000E+17           
         78  traj.descent.states:mass_12          c     0.000000E+00     7.956010E+00     1.000000E+17           
         79  traj.descent.states:mass_13          c     0.000000E+00     7.956010E+00     1.000000E+17           
         80  traj.descent.states:mass_14          c     0.000000E+00     7.956010E+00     1.000000E+17           
         81  traj.descent.states:distance_0       c     0.000000E+00     9.999990E-03     1.000000E+15           
         82  traj.descent.states:distance_1       c     0.000000E+00     9.999990E-03     1.000000E+15           
         83  traj.descent.states:distance_2       c     0.000000E+00     9.999990E-03     1.000000E+15           
         84  traj.descent.states:distance_3       c     0.000000E+00     9.999990E-03     1.000000E+15           
         85  traj.descent.states:distance_4       c     0.000000E+00     9.999990E-03     1.000000E+15           
         86  traj.descent.states:distance_5       c     0.000000E+00     9.999990E-03     1.000000E+15           
         87  traj.descent.states:distance_6       c     0.000000E+00     9.999990E-03     1.000000E+15           
         88  traj.descent.states:distance_7       c     0.000000E+00     9.999990E-03     1.000000E+15           
         89  traj.descent.states:distance_8       c     0.000000E+00     9.999990E-03     1.000000E+15           
         90  traj.descent.states:distance_9       c     0.000000E+00     9.999990E-03     1.000000E+15           
         91  traj.descent.states:distance_10      c     0.000000E+00     9.999990E-03     1.000000E+15           
         92  traj.descent.states:distance_11      c     0.000000E+00     9.999990E-03     1.000000E+15           
         93  traj.descent.states:distance_12      c     0.000000E+00     9.999990E-03     1.000000E+15           
         94  traj.descent.states:distance_13      c     0.000000E+00     9.999990E-03     1.000000E+15           
         95  traj.descent.states:distance_14      c     0.000000E+00     9.999990E-03     1.000000E+15           

   Constraints (i - inequality, e - equality)
      Index  Name                                                      Type          Lower           Value           Upper    Status  Lagrange Multiplier (N/A)
          0  mission:constraints:range_residual                           e   0.000000E+00    1.900600E+02    0.000000E+00         E    9.00000E+100
          1  gtow_constraint.GTOW                                         e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
          2  link_climb_mass.mass                                         e   0.000000E+00    0.000000E+00    0.000000E+00              9.00000E+100
          3  mission:constraints:mass_residual                            e   0.000000E+00   -3.729196E-01    0.000000E+00         E    9.00000E+100
          4  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    3.026331E-04    0.000000E+00         E    9.00000E+100
          5  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    2.662970E-04    0.000000E+00         E    9.00000E+100
          6  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    2.331048E-04    0.000000E+00         E    9.00000E+100
          7  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    4.602245E-04    0.000000E+00         E    9.00000E+100
          8  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    4.084196E-04    0.000000E+00         E    9.00000E+100
          9  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    3.715553E-04    0.000000E+00         E    9.00000E+100
         10  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    4.345451E-04    0.000000E+00         E    9.00000E+100
         11  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    4.236925E-04    0.000000E+00         E    9.00000E+100
         12  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    4.230979E-04    0.000000E+00         E    9.00000E+100
         13  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    3.567378E-04    0.000000E+00         E    9.00000E+100
         14  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    3.600099E-04    0.000000E+00         E    9.00000E+100
         15  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    3.663290E-04    0.000000E+00         E    9.00000E+100
         16  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    1.804136E-04    0.000000E+00         E    9.00000E+100
         17  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    1.815137E-04    0.000000E+00         E    9.00000E+100
         18  traj.climb.collocation_constraint.defects:mass               e   0.000000E+00    1.838039E-04    0.000000E+00         E    9.00000E+100
         19  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00    9.350828E-05    0.000000E+00         E    9.00000E+100
         20  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -1.200026E-04    0.000000E+00         E    9.00000E+100
         21  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -2.073895E-04    0.000000E+00         E    9.00000E+100
         22  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -4.118317E-04    0.000000E+00         E    9.00000E+100
         23  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -4.770935E-04    0.000000E+00         E    9.00000E+100
         24  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -5.648226E-04    0.000000E+00         E    9.00000E+100
         25  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -7.038547E-04    0.000000E+00         E    9.00000E+100
         26  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -7.902210E-04    0.000000E+00         E    9.00000E+100
         27  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -9.053112E-04    0.000000E+00         E    9.00000E+100
         28  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -7.912636E-04    0.000000E+00         E    9.00000E+100
         29  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -8.474854E-04    0.000000E+00         E    9.00000E+100
         30  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -9.225030E-04    0.000000E+00         E    9.00000E+100
         31  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -4.630193E-04    0.000000E+00         E    9.00000E+100
         32  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -4.755304E-04    0.000000E+00         E    9.00000E+100
         33  traj.climb.collocation_constraint.defects:distance           e   0.000000E+00   -4.924808E-04    0.000000E+00         E    9.00000E+100
         34  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.288911E-04    0.000000E+00         E    9.00000E+100
         35  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.287930E-04    0.000000E+00         E    9.00000E+100
         36  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.286337E-04    0.000000E+00         E    9.00000E+100
         37  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.626051E-04    0.000000E+00         E    9.00000E+100
         38  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.621411E-04    0.000000E+00         E    9.00000E+100
         39  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.615286E-04    0.000000E+00         E    9.00000E+100
         40  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    3.107090E-04    0.000000E+00         E    9.00000E+100
         41  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    3.101222E-04    0.000000E+00         E    9.00000E+100
         42  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    3.093585E-04    0.000000E+00         E    9.00000E+100
         43  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.600114E-04    0.000000E+00         E    9.00000E+100
         44  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.596504E-04    0.000000E+00         E    9.00000E+100
         45  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    2.591793E-04    0.000000E+00         E    9.00000E+100
         46  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.268334E-04    0.000000E+00         E    9.00000E+100
         47  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.267481E-04    0.000000E+00         E    9.00000E+100
         48  traj.cruise.collocation_constraint.defects:mass              e   0.000000E+00    1.266343E-04    0.000000E+00         E    9.00000E+100
         49  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.394659E-04    0.000000E+00         E    9.00000E+100
         50  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.393043E-04    0.000000E+00         E    9.00000E+100
         51  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.390812E-04    0.000000E+00         E    9.00000E+100
         52  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.965844E-04    0.000000E+00         E    9.00000E+100
         53  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.959096E-04    0.000000E+00         E    9.00000E+100
         54  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.949776E-04    0.000000E+00         E    9.00000E+100
         55  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -1.063689E-03    0.000000E+00         E    9.00000E+100
         56  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -1.062733E-03    0.000000E+00         E    9.00000E+100
         57  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -1.061412E-03    0.000000E+00         E    9.00000E+100
         58  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.924158E-04    0.000000E+00         E    9.00000E+100
         59  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.917378E-04    0.000000E+00         E    9.00000E+100
         60  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -8.908015E-04    0.000000E+00         E    9.00000E+100
         61  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.360338E-04    0.000000E+00         E    9.00000E+100
         62  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.358709E-04    0.000000E+00         E    9.00000E+100
         63  traj.cruise.collocation_constraint.defects:distance          e   0.000000E+00   -4.356461E-04    0.000000E+00         E    9.00000E+100
         64  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    2.874835E-05    0.000000E+00         E    9.00000E+100
         65  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    2.850018E-05    0.000000E+00         E    9.00000E+100
         66  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    2.808172E-05    0.000000E+00         E    9.00000E+100
         67  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    5.703891E-05    0.000000E+00         E    9.00000E+100
         68  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    5.600375E-05    0.000000E+00         E    9.00000E+100
         69  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    5.406189E-05    0.000000E+00         E    9.00000E+100
         70  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    6.339068E-05    0.000000E+00         E    9.00000E+100
         71  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    6.070757E-05    0.000000E+00         E    9.00000E+100
         72  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    5.550588E-05    0.000000E+00         E    9.00000E+100
         73  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    4.496773E-05    0.000000E+00         E    9.00000E+100
         74  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    4.187322E-05    0.000000E+00         E    9.00000E+100
         75  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    4.024431E-05    0.000000E+00         E    9.00000E+100
         76  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    1.965084E-05    0.000000E+00         E    9.00000E+100
         77  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    1.980147E-05    0.000000E+00         E    9.00000E+100
         78  traj.descent.collocation_constraint.defects:mass             e   0.000000E+00    2.021077E-05    0.000000E+00         E    9.00000E+100
         79  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -2.234890E-04    0.000000E+00         E    9.00000E+100
         80  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -2.201934E-04    0.000000E+00         E    9.00000E+100
         81  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -2.155369E-04    0.000000E+00         E    9.00000E+100
         82  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.371245E-04    0.000000E+00         E    9.00000E+100
         83  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.224634E-04    0.000000E+00         E    9.00000E+100
         84  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.013397E-04    0.000000E+00         E    9.00000E+100
         85  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.689527E-04    0.000000E+00         E    9.00000E+100
         86  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.460253E-04    0.000000E+00         E    9.00000E+100
         87  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -4.129717E-04    0.000000E+00         E    9.00000E+100
         88  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -3.382739E-04    0.000000E+00         E    9.00000E+100
         89  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -3.204058E-04    0.000000E+00         E    9.00000E+100
         90  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -2.949513E-04    0.000000E+00         E    9.00000E+100
         91  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -1.403842E-04    0.000000E+00         E    9.00000E+100
         92  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -1.358041E-04    0.000000E+00         E    9.00000E+100
         93  traj.descent.collocation_constraint.defects:distance         e   0.000000E+00   -1.293934E-04    0.000000E+00         E    9.00000E+100
         94  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    5.629170E-01    1.000000E+00              9.00000E+100
         95  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    5.226949E-01    1.000000E+00              9.00000E+100
         96  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.882858E-01    1.000000E+00              9.00000E+100
         97  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.809262E-01    1.000000E+00              9.00000E+100
         98  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.809262E-01    1.000000E+00              9.00000E+100
         99  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.642184E-01    1.000000E+00              9.00000E+100
        100  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.764746E-01    1.000000E+00              9.00000E+100
        101  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.852476E-01    1.000000E+00              9.00000E+100
        102  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    4.852476E-01    1.000000E+00              9.00000E+100
        103  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    5.253139E-01    1.000000E+00              9.00000E+100
        104  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    6.031896E-01    1.000000E+00              9.00000E+100
        105  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    6.336275E-01    1.000000E+00              9.00000E+100
        106  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    6.336275E-01    1.000000E+00              9.00000E+100
        107  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    6.968775E-01    1.000000E+00              9.00000E+100
        108  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    8.040961E-01    1.000000E+00              9.00000E+100
        109  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    8.420271E-01    1.000000E+00              9.00000E+100
        110  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    8.420271E-01    1.000000E+00              9.00000E+100
        111  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    8.890541E-01    1.000000E+00              9.00000E+100
        112  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    9.529013E-01    1.000000E+00              9.00000E+100
        113  traj.phases.climb->path_constraint->throttle                 i   0.000000E+00    9.739942E-01    1.000000E+00              9.00000E+100
        114  traj.phases.cruise->initial_boundary_constraint->throttle    i   0.000000E+00    7.746548E-01    1.000000E+00              9.00000E+100
        115  traj.phases.cruise->final_boundary_constraint->throttle      i   0.000000E+00    8.450059E-01    1.000000E+00              9.00000E+100
        116  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    3.427857E-01    1.000000E+00              9.00000E+100
        117  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    3.166671E-01    1.000000E+00              9.00000E+100
        118  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    2.856332E-01    1.000000E+00              9.00000E+100
        119  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    2.768399E-01    1.000000E+00              9.00000E+100
        120  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    2.768399E-01    1.000000E+00              9.00000E+100
        121  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    2.353558E-01    1.000000E+00              9.00000E+100
        122  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    1.836339E-01    1.000000E+00              9.00000E+100
        123  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    1.692206E-01    1.000000E+00              9.00000E+100
        124  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    1.692206E-01    1.000000E+00              9.00000E+100
        125  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    1.352237E-01    1.000000E+00              9.00000E+100
        126  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    9.832435E-02    1.000000E+00              9.00000E+100
        127  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    8.585627E-02    1.000000E+00              9.00000E+100
        128  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    8.585627E-02    1.000000E+00              9.00000E+100
        129  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    5.463784E-02    1.000000E+00              9.00000E+100
        130  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    1.645443E-02    1.000000E+00              9.00000E+100
        131  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    5.165559E-03    1.000000E+00              9.00000E+100
        132  traj.phases.descent->path_constraint->throttle               i   0.000000E+00    5.165559E-03    1.000000E+00              9.00000E+100
        133  traj.phases.descent->path_constraint->throttle               i   0.000000E+00   -6.759847E-03    1.000000E+00         L    9.00000E+100
        134  traj.phases.descent->path_constraint->throttle               i   0.000000E+00   -2.188436E-02    1.000000E+00         L    9.00000E+100
        135  traj.phases.descent->path_constraint->throttle               i   0.000000E+00   -2.641202E-02    1.000000E+00         L    9.00000E+100

--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.

Once again, to convert it to a level 2 model, we need to set all the arguments in level 1 manually.

By running a model in level 2 directly, we have the flexibility to modify the input parameters (e.g. phase_info). Let us continue to make modifications and obtain a different run script shown below:

phase_info = {
    'pre_mission': {
        'include_takeoff': False,
        'optimize_mass': False,
    },
    'cruise': {
        'subsystem_options': {
            'core_aerodynamics': {'method': 'computed'}
        },
        'user_options': {
            'optimize_mach': False,
            'optimize_altitude': False,
            'polynomial_control_order': 1,
            'num_segments': 2,
            'order': 3,
            'solve_for_distance': False,
            'initial_mach': (0.72, 'unitless'),
            'final_mach': (0.72, 'unitless'),
            'mach_bounds': ((0.7, 0.74), 'unitless'),
            'initial_altitude': (35000.0, 'ft'),
            'final_altitude': (35000.0, 'ft'),
            'altitude_bounds': ((23000.0, 38000.0), 'ft'),
            'throttle_enforcement': 'boundary_constraint',
            'fix_initial': True,
            'constrain_final': False,
            'fix_duration': False,
            'initial_bounds': ((0.0, 0.0), 'min'),
            'duration_bounds': ((10., 30.), 'min'),
        },
        'initial_guesses': {'time': ([0, 30], 'min')},
    },
    'post_mission': {
        'include_landing': False,
    },
}

# inputs that run_aviary() requires
aircraft_filename = "models/test_aircraft/aircraft_for_bench_FwFm.csv"
mission_method = "height_energy_energy"
mass_method = "FLOPS"
optimizer = "SLSQP"
analysis_scheme = av.AnalysisScheme.COLLOCATION
objective_type = None
record_filename = 'history.db'
restart_filename = None

# Build problem
prob = av.AviaryProblem(analysis_scheme)

# Load aircraft and options data from user
# Allow for user overrides here
prob.load_inputs(aircraft_filename, phase_info)

# Preprocess inputs
prob.check_and_preprocess_inputs()

prob.add_pre_mission_systems()

prob.add_phases()

prob.add_post_mission_systems()

# Link phases and variables
prob.link_phases()

prob.add_driver(optimizer, max_iter=0)

prob.add_design_variables()

# Load optimization problem formulation
# Detail which variables the optimizer can control
prob.add_objective(objective_type=objective_type)

prob.setup()

prob.set_initial_guesses()

prob.run_aviary_problem(record_filename)

print("done")
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'cruise': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'cruise': lower, upper, ref
  warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
The following variables have been overridden:
  'aircraft:design:touchdown_mass  152800  lbm
  'aircraft:engine:mass  [7400.]  lbm
  'aircraft:fins:mass  0  lbm
  'aircraft:fuel:auxiliary_fuel_capacity  0  lbm
  'aircraft:fuel:fuselage_fuel_capacity  0  lbm
  'aircraft:fuel:total_capacity  45694  lbm
  'aircraft:fuselage:planform_area  1578.24  ft**2
  'aircraft:fuselage:wetted_area  4158.62  ft**2
  'aircraft:horizontal_tail:wetted_area  592.65  ft**2
  'aircraft:landing_gear:main_gear_oleo_length  102  inch
  'aircraft:landing_gear:nose_gear_oleo_length  67  inch
  'aircraft:vertical_tail:wetted_area  581.13  ft**2
  'aircraft:wing:aspect_ratio  11.22091  unitless
  'aircraft:wing:control_surface_area  137  ft**2
  'aircraft:wing:wetted_area  2396.56  ft**2

--- Constraint Report [traj] ---
    --- cruise ---
        [initial] 0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
        [final]   0.0000e+00 <= throttle <= 1.0000e+00  [unitless]
Model viewer data has already been recorded for Driver.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:659: DriverWarning:The following design variable initial conditions are out of their specified bounds:
  traj.cruise.t_duration
    val: [1800.]
    lower: 600.0
    upper: 1799.9999999999998
Set the initial value of the design variable to a valid value or set the driver option['invalid_desvar_behavior'] to 'ignore'.
Full total jacobian for problem 'problem13' was computed 3 times, taking 0.14430085699996198 seconds.
Total jacobian shape: (18, 16) 


Jacobian shape: (18, 16)  (25.35% nonzero)
FWD solves: 6   REV solves: 0
Total colors vs. total size: 6 vs 16  (62.50% improvement)

Sparsity computed using tolerance: 1e-25
Time to compute sparsity:   0.1443 sec
Time to compute coloring:   0.0081 sec
Memory to compute coloring:   0.0000 MB
Coloring created on: 2024-11-04 17:22:04
Iteration limit reached    (Exit mode 9)
            Current function value: 0.3
            Iterations: 1
            Function evaluations: 1
            Gradient evaluations: 1
Optimization FAILED.
Iteration limit reached
-----------------------------------
done
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.

As you see, there is a single phase cruise, no takeoff, no landing. Note that we must set include_takeoff to False because Aviary internally tries to connect takeoff to climb phase which we don’t provide. There should be a check to see if both takeoff and climb phase exist first. Aviary still has many things to be improved.

We will see more details for what users can do in level 3.

Level 2 is where you can integrate user-defined external subsystems, which is one of the main features of the Aviary tool. Examples of external subsystems are: acoustics, battery modeling, etc. Assume that you already have an external subsystem that you want to incorporate it into your model. We show how to add external subsystems via external_subsystems key in phase_info.

We will cover external subsystems in details in Models with External Subsystems page.

Summary#

As you see, level 2 is more flexible than level 1. In level 2, you can:

  • add/remove pre-defined mission phases (via phase_info, see example above);

  • scale design variables (via reference value in phase_info)

  • import additional files (e.g. aero_data_file);

  • set pre-defined objective (e.g. hybrid_objective);

  • add external subsystems (via phase_info);

  • set use_coloring (see example above).

Most Aviary users should be well-served by Level 2; we have purposefully constructed it to be capable of most all use cases, even those on the forefront of research in aircraft design.

That being said, there are some cases where Level 2 is not sufficient and you may need additional flexibility. We are ready to move on to Level 3.