Aviary icon indicating copy to clipboard operation
Aviary copied to clipboard

Standardize required altitude rate naming

Open johnjasa opened this issue 2 years ago • 1 comments

Desired capability or behavior.

Summary of Issue

In some places in Aviary, we have multiple names for effectively the same thing: required_altitude_rate and roc_at_toc. Pick one name -- probably the former as verbosity is helpful -- and use it everywhere.

Issue Type

  • [ ] Bug
  • [ ] Enhancement
  • [x] Code Cleanup
  • [ ] Docs
  • [ ] Miscellaneous

Is your feature request related to a problem? Please describe.

Thinking more about this now, this is slightly more complex than just renaming. I'll put my thoughts here.

GASP- and FLOPS-based missions handle rate of climb at top of climb differently. Aviary currently has no constraint on the GASP side but it exists in the input decks. FLOPS-based has required_altitude_rate come in at the phase_info level. This is valid for any phase and is enforced as a path constraint across the whole phase, not just climb.

We might as well rework this so that:

  • the required altitude rate is available to be enforced anywhere, not just a phase called climb
  • it's handled in the same way for all types of missions with a constraint at the add_design_variables() method level from methods_for_level2.py
  • to do this, we'd need to compute ALTITUDE_RATE_MAX as part of the GASP equations of motion, which is not currently the case

Associated Bug Report

No response

johnjasa avatar Dec 22 '23 20:12 johnjasa

To calculate ALTITUDE_RATE_MAX we need supporting information:

  • Dynamic.Mission.THRUST_MAX_TOTAL,
  • Dynamic.Mission.VELOCITY = TAS
  • Dynamic.Mission.VELOCITY_RATE = TAS_rate
  • Dynamic.Mission.MASS,
  • Dynamic.Mission.DRAG.

Functions are already defined in FLOPS for calculating SpecificEnergyRate() and AltitudeRate() These functions should be moved out of the flops_based folder and into a generic ODE folder. Reusing these functions means changes will be made to ODE rather than EOMs

GASP based EOMs do not currently use THRUST_MAX_TOTAL. However, this value is calculated in PropulsionSum() which is fed to PropulsionMission() which is instantiated by PropulsionBuilderBase(). Thus, THRUST_MAX_TOTAL should be available to Climb_EOM, Descent_EOM, and Flight_Path_EOM. Other EOMs don't have any access to THRUST_MAX_TOTAL including: Accel, Ascent, Groundroll, and Rotation.

GASP based EOMs use the term TAS instead of Dynamic.Mission.VELOCITY and TAS_rate instead of Dynamic.Mission.VELOCITY_RATE. We should consider consolidating these terms.

Some of GASP EOMs have TAS_rate set to zero (target_tas_rate=0) but this should not be a problem. However, we should make sure not to simplify the equations in case TAS is not set to zero at a later time. These include Climb and Descent. All other EOMs calculate TAS_rate: accel, ascent, flight_path, ground_roll, rotation,

ehariton avatar Jan 17 '24 16:01 ehariton