diff --git a/aviary/core/aviary_group.py b/aviary/core/aviary_group.py index e5f7e4166..a647bebf1 100644 --- a/aviary/core/aviary_group.py +++ b/aviary/core/aviary_group.py @@ -916,12 +916,12 @@ def add_post_mission_systems(self, verbosity=None): ), ) self.connect( - f'traj.{phase_name}.timeseries.distance', + f'traj.{phase_name}.timeseries.ground_distance', f'{phase_name}_distance_constraint.final_distance', src_indices=[-1], ) self.connect( - f'traj.{phase_name}.timeseries.distance', + f'traj.{phase_name}.timeseries.ground_distance', f'{phase_name}_distance_constraint.initial_distance', src_indices=[0], ) @@ -1062,7 +1062,7 @@ def link_phases(self, verbosity=None, comm=None): src_indices=[-1], ) self.connect( - f'traj.{final_phase}.timeseries.distance', + f'traj.{final_phase}.timeseries.ground_distance', 'state_output.range_in', src_indices=[-1], ) diff --git a/aviary/docs/getting_started/onboarding_level3.ipynb b/aviary/docs/getting_started/onboarding_level3.ipynb index 853907adc..fa11a3564 100644 --- a/aviary/docs/getting_started/onboarding_level3.ipynb +++ b/aviary/docs/getting_started/onboarding_level3.ipynb @@ -387,7 +387,9 @@ "###############\n", "phases = ['climb', 'cruise', 'descent']\n", "traj.link_phases(\n", - " phases, ['time', av.Dynamic.Vehicle.MASS, av.Dynamic.Mission.DISTANCE], connected=strong_couple\n", + " phases,\n", + " ['time', av.Dynamic.Vehicle.MASS, av.Dynamic.Mission.GROUND_DISTANCE],\n", + " connected=strong_couple,\n", ")\n", "\n", "# loop through phases and get all subsystem parameters\n", @@ -559,7 +561,7 @@ ")\n", "prob.set_val(\n", " 'traj.climb.states:distance',\n", - " climb.interp(av.Dynamic.Mission.DISTANCE, ys=[range_i_climb, range_f_climb]),\n", + " climb.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[range_i_climb, range_f_climb]),\n", " units='m',\n", ")\n", "\n", @@ -583,7 +585,7 @@ ")\n", "prob.set_val(\n", " 'traj.cruise.states:distance',\n", - " cruise.interp(av.Dynamic.Mission.DISTANCE, ys=[range_i_cruise, range_f_cruise]),\n", + " cruise.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[range_i_cruise, range_f_cruise]),\n", " units='m',\n", ")\n", "\n", @@ -607,7 +609,7 @@ ")\n", "prob.set_val(\n", " 'traj.descent.states:distance',\n", - " descent.interp(av.Dynamic.Mission.DISTANCE, ys=[distance_i_descent, distance_f_descent]),\n", + " descent.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[distance_i_descent, distance_f_descent]),\n", " units='m',\n", ")\n", "\n", @@ -626,7 +628,7 @@ "times_climb = prob.get_val('traj.climb.timeseries.time', units='s')\n", "altitudes_climb = prob.get_val('traj.climb.timeseries.altitude', units='m')\n", "masses_climb = prob.get_val('traj.climb.timeseries.mass', units='kg')\n", - "ranges_climb = prob.get_val('traj.climb.timeseries.distance', units='m')\n", + "ranges_climb = prob.get_val('traj.climb.timeseries.ground_distance', units='m')\n", "velocities_climb = prob.get_val('traj.climb.timeseries.velocity', units='m/s')\n", "thrusts_climb = prob.get_val('traj.climb.timeseries.thrust_net_total', units='N')\n", "times_cruise = prob.get_val('traj.cruise.timeseries.time', units='s')\n", diff --git a/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb b/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb index d7f70e71d..dd8c6682e 100644 --- a/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb +++ b/aviary/docs/user_guide/FLOPS_based_detailed_takeoff_and_landing.ipynb @@ -403,7 +403,7 @@ "distance_max, units = takeoff_liftoff_user_options.get_item('distance_max')\n", "liftoff = takeoff_trajectory_builder.get_phase('takeoff_liftoff')\n", "\n", - "liftoff.add_objective(Dynamic.Mission.DISTANCE, loc='final', ref=distance_max, units=units)\n", + "liftoff.add_objective(Dynamic.Mission.GROUND_DISTANCE, loc='final', ref=distance_max, units=units)\n", "\n", "# Insert a constraint for a fake decision speed, until abort is added.\n", "takeoff.model.add_constraint(\n", @@ -756,7 +756,7 @@ "distance_max, units = landing_fullstop_user_options.get_item('distance_max')\n", "fullstop = landing_trajectory_builder.get_phase('landing_fullstop')\n", "\n", - "fullstop.add_objective(Dynamic.Mission.DISTANCE, loc='final', ref=distance_max, units=units)\n", + "fullstop.add_objective(Dynamic.Mission.GROUND_DISTANCE, loc='final', ref=distance_max, units=units)\n", "\n", "varnames = [\n", " av.Aircraft.Wing.AREA,\n", diff --git a/aviary/docs/user_guide/examples_of_the_same_mission_at_different_UI_levels.ipynb b/aviary/docs/user_guide/examples_of_the_same_mission_at_different_UI_levels.ipynb index fdec20b2b..722af94ef 100644 --- a/aviary/docs/user_guide/examples_of_the_same_mission_at_different_UI_levels.ipynb +++ b/aviary/docs/user_guide/examples_of_the_same_mission_at_different_UI_levels.ipynb @@ -483,7 +483,7 @@ ")\n", "prob.set_val(\n", " 'traj.climb.states:distance',\n", - " climb.interp(av.Dynamic.Mission.DISTANCE, ys=[distance_i_climb, distance_f_climb]),\n", + " climb.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[distance_i_climb, distance_f_climb]),\n", " units='m',\n", ")\n", "\n", @@ -507,7 +507,7 @@ ")\n", "prob.set_val(\n", " 'traj.cruise.states:distance',\n", - " cruise.interp(av.Dynamic.Mission.DISTANCE, ys=[distance_i_cruise, distance_f_cruise]),\n", + " cruise.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[distance_i_cruise, distance_f_cruise]),\n", " units='m',\n", ")\n", "\n", @@ -531,7 +531,7 @@ ")\n", "prob.set_val(\n", " 'traj.descent.states:distance',\n", - " descent.interp(av.Dynamic.Mission.DISTANCE, ys=[distance_i_descent, distance_f_descent]),\n", + " descent.interp(av.Dynamic.Mission.GROUND_DISTANCE, ys=[distance_i_descent, distance_f_descent]),\n", " units='m',\n", ")\n", "\n", diff --git a/aviary/examples/run_level2_with_detailed_landing.py b/aviary/examples/run_level2_with_detailed_landing.py index 251311473..9e36d03e2 100644 --- a/aviary/examples/run_level2_with_detailed_landing.py +++ b/aviary/examples/run_level2_with_detailed_landing.py @@ -200,7 +200,7 @@ f'traj.{phase_name}.timeseries.altitude', units='ft' )[-1][0] output_data[point_name]['distance'] = case.get_val( - f'traj.{phase_name}.timeseries.distance', units='ft' + f'traj.{phase_name}.timeseries.ground_distance', units='ft' )[-1][0] print(output_data) diff --git a/aviary/examples/run_level2_with_detailed_takeoff.py b/aviary/examples/run_level2_with_detailed_takeoff.py index 679f6beb0..a49f3eb9e 100644 --- a/aviary/examples/run_level2_with_detailed_takeoff.py +++ b/aviary/examples/run_level2_with_detailed_takeoff.py @@ -359,7 +359,7 @@ f'traj.{phase_name}.timeseries.altitude', units='ft' )[-1][0] output_data[point_name]['distance'] = case.get_val( - f'traj.{phase_name}.timeseries.distance', units='ft' + f'traj.{phase_name}.timeseries.ground_distance', units='ft' )[-1][0] print(output_data) diff --git a/aviary/examples/run_level3_example.py b/aviary/examples/run_level3_example.py index e9b6faaec..0eb37d02d 100644 --- a/aviary/examples/run_level3_example.py +++ b/aviary/examples/run_level3_example.py @@ -159,7 +159,7 @@ def initialize(self): ) prob.traj._phases['climb'].set_state_options( - Dynamic.Mission.DISTANCE, fix_initial=True, input_initial=False + Dynamic.Mission.GROUND_DISTANCE, fix_initial=True, input_initial=False ) prob.traj._phases['climb'].set_time_options( @@ -335,10 +335,10 @@ def initialize(self): phases = list(prob.model.phase_info.keys()) prob.traj.link_phases(phases, ['time'], ref=None, connected=True) prob.traj.link_phases(phases, [Dynamic.Vehicle.MASS], ref=None, connected=True) -prob.traj.link_phases(phases, [Dynamic.Mission.DISTANCE], ref=None, connected=True) +prob.traj.link_phases(phases, [Dynamic.Mission.GROUND_DISTANCE], ref=None, connected=True) prob.model.connect( - f'traj.descent.timeseries.distance', + f'traj.descent.timeseries.ground_distance', Mission.Summary.RANGE, src_indices=[-1], flat_src_indices=True, @@ -457,7 +457,7 @@ def initialize(self): # set initial guesses manually control_keys = ['mach', 'altitude'] -state_keys = ['mass', Dynamic.Mission.DISTANCE] +state_keys = ['mass', Dynamic.Mission.GROUND_DISTANCE] guesses = {} guesses['mach_climb'] = ([0.2, 0.72], 'unitless') guesses['altitude_climb'] = ([0, 32000.0], 'ft') diff --git a/aviary/mission/flight_phase_builder.py b/aviary/mission/flight_phase_builder.py index 12950c37e..8743771e5 100644 --- a/aviary/mission/flight_phase_builder.py +++ b/aviary/mission/flight_phase_builder.py @@ -221,7 +221,9 @@ def build_phase( self.add_state('mass', Dynamic.Vehicle.MASS, rate_source) if phase_type is EquationsOfMotion.HEIGHT_ENERGY: - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) phase = add_subsystem_variables_to_phase(phase, self.name, self.external_subsystems) diff --git a/aviary/mission/flops_based/ode/energy_ODE.py b/aviary/mission/flops_based/ode/energy_ODE.py index 33a4cc1b6..e01500ed4 100644 --- a/aviary/mission/flops_based/ode/energy_ODE.py +++ b/aviary/mission/flops_based/ode/energy_ODE.py @@ -86,7 +86,7 @@ def setup(self): promotes_outputs=[ Dynamic.Mission.SPECIFIC_ENERGY_RATE_EXCESS, Dynamic.Mission.ALTITUDE_RATE_MAX, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, 'thrust_required', ], ) diff --git a/aviary/mission/flops_based/ode/landing_eom.py b/aviary/mission/flops_based/ode/landing_eom.py index a1c6e2ced..6c3b90680 100644 --- a/aviary/mission/flops_based/ode/landing_eom.py +++ b/aviary/mission/flops_based/ode/landing_eom.py @@ -38,7 +38,7 @@ def setup(self): kwargs = {'num_nodes': nn, 'climbing': True} inputs = [Dynamic.Mission.FLIGHT_PATH_ANGLE, Dynamic.Mission.VELOCITY] - outputs = [Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] + outputs = [Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] self.add_subsystem( 'distance_rates', @@ -77,7 +77,7 @@ def setup(self): inputs = [ 'acceleration_horizontal', 'acceleration_vertical', - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, ] @@ -93,7 +93,7 @@ def setup(self): ) inputs = [ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, 'acceleration_horizontal', 'acceleration_vertical', diff --git a/aviary/mission/flops_based/ode/landing_ode.py b/aviary/mission/flops_based/ode/landing_ode.py index cdf20065f..4f6d199e9 100644 --- a/aviary/mission/flops_based/ode/landing_ode.py +++ b/aviary/mission/flops_based/ode/landing_ode.py @@ -73,7 +73,7 @@ def setup(self): Mission.Landing.FLARE_RATE, ], promotes_outputs=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, diff --git a/aviary/mission/flops_based/ode/mission_EOM.py b/aviary/mission/flops_based/ode/mission_EOM.py index 1b54f4324..23af9f8ef 100644 --- a/aviary/mission/flops_based/ode/mission_EOM.py +++ b/aviary/mission/flops_based/ode/mission_EOM.py @@ -38,7 +38,7 @@ def setup(self): Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY, ], - promotes_outputs=[Dynamic.Mission.DISTANCE_RATE], + promotes_outputs=[Dynamic.Mission.GROUND_DISTANCE_RATE], ) self.add_subsystem( diff --git a/aviary/mission/flops_based/ode/range_rate.py b/aviary/mission/flops_based/ode/range_rate.py index c3e64ced3..624c8f9d0 100644 --- a/aviary/mission/flops_based/ode/range_rate.py +++ b/aviary/mission/flops_based/ode/range_rate.py @@ -29,7 +29,7 @@ def setup(self): units='m/s', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.ones(nn), desc='current horizontal velocity (assumed no wind)', units='m/s', @@ -42,12 +42,12 @@ def compute(self, inputs, outputs): velocity_2 = velocity**2 if (climb_rate_2 >= velocity_2).any(): raise om.AnalysisError('WARNING: climb rate exceeds velocity (range_rate.py)') - outputs[Dynamic.Mission.DISTANCE_RATE] = (velocity_2 - climb_rate_2) ** 0.5 + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = (velocity_2 - climb_rate_2) ** 0.5 def setup_partials(self): arange = np.arange(self.options['num_nodes']) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY], rows=arange, cols=arange, @@ -57,9 +57,9 @@ def compute_partials(self, inputs, J): climb_rate = inputs[Dynamic.Mission.ALTITUDE_RATE] velocity = inputs[Dynamic.Mission.VELOCITY] - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] = ( -climb_rate / (velocity**2 - climb_rate**2) ** 0.5 ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = ( velocity / (velocity**2 - climb_rate**2) ** 0.5 ) diff --git a/aviary/mission/flops_based/ode/takeoff_eom.py b/aviary/mission/flops_based/ode/takeoff_eom.py index 6a466cc8b..c7fccf69f 100644 --- a/aviary/mission/flops_based/ode/takeoff_eom.py +++ b/aviary/mission/flops_based/ode/takeoff_eom.py @@ -136,7 +136,7 @@ def setup(self): kwargs = {'num_nodes': nn, 'climbing': climbing} inputs = [Dynamic.Mission.FLIGHT_PATH_ANGLE, Dynamic.Mission.VELOCITY] - outputs = [Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] + outputs = [Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE] self.add_subsystem( 'distance_rates', @@ -210,7 +210,7 @@ def setup(self): add_aviary_input(self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.zeros(nn), units='rad') add_aviary_input(self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='m/s') - add_aviary_output(self, Dynamic.Mission.DISTANCE_RATE, val=np.zeros(nn), units='m/s') + add_aviary_output(self, Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='m/s') add_aviary_output(self, Dynamic.Mission.ALTITUDE_RATE, val=np.zeros(nn), units='m/s') def setup_partials(self): @@ -225,13 +225,13 @@ def setup_partials(self): else: self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE, dependent=False, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY, val=np.identity(nn), ) @@ -255,7 +255,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): else: range_rate = velocity - outputs[Dynamic.Mission.DISTANCE_RATE] = range_rate + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = range_rate def compute_partials(self, inputs, J, discrete_inputs=None): if self.options['climbing']: @@ -265,8 +265,10 @@ def compute_partials(self, inputs, J, discrete_inputs=None): cgam = np.cos(flight_path_angle) sgam = np.sin(flight_path_angle) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -sgam * velocity - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = cgam + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = ( + -sgam * velocity + ) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = cgam J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = cgam * velocity J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY] = sgam @@ -395,7 +397,7 @@ def setup(self): units='m/s**2', ) - add_aviary_input(self, Dynamic.Mission.DISTANCE_RATE, val=np.zeros(nn), units='m/s') + add_aviary_input(self, Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='m/s') add_aviary_input(self, Dynamic.Mission.ALTITUDE_RATE, val=np.zeros(nn), units='m/s') add_aviary_output(self, Dynamic.Mission.VELOCITY_RATE, val=np.ones(nn), units='m/s**2') @@ -407,7 +409,7 @@ def setup(self): def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): a_h = inputs['acceleration_horizontal'] a_v = inputs['acceleration_vertical'] - v_h = inputs[Dynamic.Mission.DISTANCE_RATE] + v_h = inputs[Dynamic.Mission.GROUND_DISTANCE_RATE] v_v = inputs[Dynamic.Mission.ALTITUDE_RATE] v_mag = np.sqrt(v_h**2 + v_v**2) @@ -416,7 +418,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): def compute_partials(self, inputs, J, discrete_inputs=None): a_h = inputs['acceleration_horizontal'] a_v = inputs['acceleration_vertical'] - v_h = inputs[Dynamic.Mission.DISTANCE_RATE] + v_h = inputs[Dynamic.Mission.GROUND_DISTANCE_RATE] v_v = inputs[Dynamic.Mission.ALTITUDE_RATE] num = a_h * v_h + a_v * v_v @@ -426,7 +428,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None): J[Dynamic.Mission.VELOCITY_RATE, 'acceleration_horizontal'] = v_h / den J[Dynamic.Mission.VELOCITY_RATE, 'acceleration_vertical'] = v_v / den - J[Dynamic.Mission.VELOCITY_RATE, Dynamic.Mission.DISTANCE_RATE] = ( + J[Dynamic.Mission.VELOCITY_RATE, Dynamic.Mission.GROUND_DISTANCE_RATE] = ( a_h / den - 0.5 * num / fact ** (3 / 2) * 2.0 * v_h ) @@ -446,7 +448,7 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - add_aviary_input(self, Dynamic.Mission.DISTANCE_RATE, val=np.zeros(nn), units='m/s') + add_aviary_input(self, Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='m/s') add_aviary_input(self, Dynamic.Mission.ALTITUDE_RATE, val=np.zeros(nn), units='m/s') self.add_input( @@ -475,7 +477,7 @@ def setup(self): self.declare_partials('*', '*', rows=rows_cols, cols=rows_cols) def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): - v_h = inputs[Dynamic.Mission.DISTANCE_RATE] + v_h = inputs[Dynamic.Mission.GROUND_DISTANCE_RATE] v_v = inputs[Dynamic.Mission.ALTITUDE_RATE] a_h = inputs['acceleration_horizontal'] a_v = inputs['acceleration_vertical'] @@ -485,7 +487,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): outputs[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE] = x def compute_partials(self, inputs, J, discrete_inputs=None): - v_h = inputs[Dynamic.Mission.DISTANCE_RATE] + v_h = inputs[Dynamic.Mission.GROUND_DISTANCE_RATE] v_v = inputs[Dynamic.Mission.ALTITUDE_RATE] a_h = inputs['acceleration_horizontal'] a_v = inputs['acceleration_vertical'] @@ -501,7 +503,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None): df_dav = v_h / den - J[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, Dynamic.Mission.DISTANCE_RATE] = df_dvh + J[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, Dynamic.Mission.GROUND_DISTANCE_RATE] = df_dvh J[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, Dynamic.Mission.ALTITUDE_RATE] = df_dvv J[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, 'acceleration_horizontal'] = df_dah J[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, 'acceleration_vertical'] = df_dav diff --git a/aviary/mission/flops_based/ode/takeoff_ode.py b/aviary/mission/flops_based/ode/takeoff_ode.py index 7fbbb2479..4a35c99b9 100644 --- a/aviary/mission/flops_based/ode/takeoff_ode.py +++ b/aviary/mission/flops_based/ode/takeoff_ode.py @@ -79,7 +79,7 @@ def setup(self): Dynamic.Vehicle.ANGLE_OF_ATTACK, ], promotes_outputs=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, diff --git a/aviary/mission/flops_based/ode/test/test_landing_eom.py b/aviary/mission/flops_based/ode/test/test_landing_eom.py index 52bcf0db9..7dca7ebfe 100644 --- a/aviary/mission/flops_based/ode/test/test_landing_eom.py +++ b/aviary/mission/flops_based/ode/test/test_landing_eom.py @@ -58,7 +58,7 @@ def test_case(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, ], tol=1e-2, diff --git a/aviary/mission/flops_based/ode/test/test_landing_ode.py b/aviary/mission/flops_based/ode/test/test_landing_ode.py index 587013925..d53f1e807 100644 --- a/aviary/mission/flops_based/ode/test/test_landing_ode.py +++ b/aviary/mission/flops_based/ode/test/test_landing_ode.py @@ -68,7 +68,7 @@ def test_case(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, ], tol=1e-2, diff --git a/aviary/mission/flops_based/ode/test/test_range_rate.py b/aviary/mission/flops_based/ode/test/test_range_rate.py index 60af51f5a..a72f11c56 100644 --- a/aviary/mission/flops_based/ode/test/test_range_rate.py +++ b/aviary/mission/flops_based/ode/test/test_range_rate.py @@ -17,7 +17,7 @@ def setUp(self): time, _ = data.get_item('time') prob.model.add_subsystem( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, RangeRate(num_nodes=len(time)), promotes_inputs=['*'], promotes_outputs=['*'], @@ -32,7 +32,7 @@ def test_case1(self): input_validation_data=data, output_validation_data=data, input_keys=[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY], - output_keys=Dynamic.Mission.DISTANCE_RATE, + output_keys=Dynamic.Mission.GROUND_DISTANCE_RATE, tol=1e-12, ) diff --git a/aviary/mission/flops_based/ode/test/test_takeoff_eom.py b/aviary/mission/flops_based/ode/test/test_takeoff_eom.py index 6a323a85a..874b6e6d4 100644 --- a/aviary/mission/flops_based/ode/test/test_takeoff_eom.py +++ b/aviary/mission/flops_based/ode/test/test_takeoff_eom.py @@ -48,7 +48,7 @@ def test_case_ground(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, ], @@ -73,7 +73,7 @@ def test_case_climbing(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, ], @@ -159,7 +159,9 @@ def test_DistanceRates_1(self): prob.setup(check=False, force_alloc_complex=True) prob.run_model() - assert_near_equal(prob[Dynamic.Mission.DISTANCE_RATE], np.array([4.280758, -1.56085]), tol) + assert_near_equal( + prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([4.280758, -1.56085]), tol + ) assert_near_equal( prob[Dynamic.Mission.ALTITUDE_RATE], np.array([3.004664, -2.203122]), @@ -184,7 +186,7 @@ def test_DistanceRates_2(self): prob.setup(check=False, force_alloc_complex=True) prob.run_model() - assert_near_equal(prob[Dynamic.Mission.DISTANCE_RATE], np.array([1.0, 2.0]), tol) + assert_near_equal(prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([1.0, 2.0]), tol) assert_near_equal(prob[Dynamic.Mission.ALTITUDE_RATE], np.array([0.0, 0.0]), tol) partial_data = prob.check_partials(out_stream=None, method='cs') @@ -212,7 +214,9 @@ def test_VelocityRate(self): prob.model.add_subsystem('vel_rate', VelocityRate(num_nodes=2), promotes=['*']) prob.model.set_input_defaults('acceleration_horizontal', [100.0, 200.0], units='m/s**2') prob.model.set_input_defaults('acceleration_vertical', [50.0, 100.0], units='m/s**2') - prob.model.set_input_defaults(Dynamic.Mission.DISTANCE_RATE, [160.98, 166.25], units='m/s') + prob.model.set_input_defaults( + Dynamic.Mission.GROUND_DISTANCE_RATE, [160.98, 166.25], units='m/s' + ) prob.model.set_input_defaults(Dynamic.Mission.ALTITUDE_RATE, [1.72, 11.91], units='m/s') prob.setup(check=False, force_alloc_complex=True) @@ -233,7 +237,9 @@ def test_FlightPathAngleRate(self): prob.model.add_subsystem('gamma_rate', FlightPathAngleRate(num_nodes=2), promotes=['*']) prob.model.set_input_defaults('acceleration_horizontal', [100.0, 200.0], units='m/s**2') prob.model.set_input_defaults('acceleration_vertical', [50.0, 100.0], units='m/s**2') - prob.model.set_input_defaults(Dynamic.Mission.DISTANCE_RATE, [160.98, 166.25], units='m/s') + prob.model.set_input_defaults( + Dynamic.Mission.GROUND_DISTANCE_RATE, [160.98, 166.25], units='m/s' + ) prob.model.set_input_defaults(Dynamic.Mission.ALTITUDE_RATE, [1.72, 11.91], units='m/s') prob.setup(check=False, force_alloc_complex=True) diff --git a/aviary/mission/flops_based/ode/test/test_takeoff_ode.py b/aviary/mission/flops_based/ode/test/test_takeoff_ode.py index 49feba868..276333881 100644 --- a/aviary/mission/flops_based/ode/test/test_takeoff_ode.py +++ b/aviary/mission/flops_based/ode/test/test_takeoff_ode.py @@ -44,7 +44,7 @@ def test_case_ground(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, ], @@ -74,7 +74,7 @@ def test_case_climbing(self): Dynamic.Vehicle.DRAG, ], output_keys=[ - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY_RATE, ], diff --git a/aviary/mission/flops_based/phases/detailed_landing_phases.py b/aviary/mission/flops_based/phases/detailed_landing_phases.py index fde894ec4..70d907c79 100644 --- a/aviary/mission/flops_based/phases/detailed_landing_phases.py +++ b/aviary/mission/flops_based/phases/detailed_landing_phases.py @@ -210,14 +210,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, fix_final=False, upper=0, ref=distance_max, defect_ref=distance_max, units=units, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -416,7 +416,7 @@ def build_phase(self, aviary_options: AviaryValues = None): # at the moment, these state options are the only differences between phases of # this class and phases of its base class - phase.set_state_options(Dynamic.Mission.DISTANCE, fix_final=True) + phase.set_state_options(Dynamic.Mission.GROUND_DISTANCE, fix_final=True) phase.set_state_options(Dynamic.Mission.VELOCITY, fix_final=True) phase.set_state_options(Dynamic.Vehicle.MASS, fix_initial=False) @@ -536,13 +536,13 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=True, lower=0, ref=distance_max, defect_ref=distance_max, units=units, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -802,13 +802,13 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -1056,13 +1056,13 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] @@ -1264,14 +1264,14 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, fix_final=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] diff --git a/aviary/mission/flops_based/phases/detailed_takeoff_phases.py b/aviary/mission/flops_based/phases/detailed_takeoff_phases.py index f91ba7fcf..515fb8e75 100644 --- a/aviary/mission/flops_based/phases/detailed_takeoff_phases.py +++ b/aviary/mission/flops_based/phases/detailed_takeoff_phases.py @@ -204,14 +204,14 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=True, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] @@ -404,14 +404,14 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] @@ -735,14 +735,14 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] @@ -990,14 +990,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -1302,14 +1302,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -1606,14 +1606,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -1703,7 +1703,7 @@ def build_phase(self, aviary_options: AviaryValues = None): final_range, units = user_options['final_range'] phase.add_boundary_constraint( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, loc='final', equals=final_range, ref=final_range, @@ -1889,14 +1889,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -2178,14 +2178,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -2271,7 +2271,7 @@ def build_phase(self, aviary_options: AviaryValues = None): mic_range, units = user_options['mic_range'] phase.add_boundary_constraint( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, loc='final', equals=mic_range, ref=mic_range, @@ -2478,14 +2478,14 @@ def build_phase(self, aviary_options: AviaryValues = None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) altitude_ref, units = user_options['altitude_ref'] @@ -2571,7 +2571,7 @@ def build_phase(self, aviary_options: AviaryValues = None): mic_range, units = user_options['mic_range'] phase.add_boundary_constraint( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, loc='final', equals=mic_range, ref=mic_range, @@ -2733,14 +2733,14 @@ def build_phase(self, aviary_options=None): distance_max, units = user_options['distance_max'] phase.add_state( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, fix_initial=False, lower=0, ref=distance_max, defect_ref=distance_max, units=units, upper=distance_max, - rate_source=Dynamic.Mission.DISTANCE_RATE, + rate_source=Dynamic.Mission.GROUND_DISTANCE_RATE, ) max_velocity, units = user_options['max_velocity'] diff --git a/aviary/mission/flops_based/phases/groundroll_phase.py b/aviary/mission/flops_based/phases/groundroll_phase.py index 2a4304d50..04fe24a5d 100644 --- a/aviary/mission/flops_based/phases/groundroll_phase.py +++ b/aviary/mission/flops_based/phases/groundroll_phase.py @@ -138,7 +138,7 @@ def build_phase(self, aviary_options: AviaryValues = None): ) phase.set_state_options( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, rate_source='over_a', fix_initial=True, fix_final=False, diff --git a/aviary/mission/gasp_based/ode/accel_eom.py b/aviary/mission/gasp_based/ode/accel_eom.py index 5a42fe31d..cf83b69e6 100644 --- a/aviary/mission/gasp_based/ode/accel_eom.py +++ b/aviary/mission/gasp_based/ode/accel_eom.py @@ -51,7 +51,7 @@ def setup(self): desc='rate of change of true air speed', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='ft/s', desc='rate of change of horizontal distance covered', @@ -68,7 +68,7 @@ def setup(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.VELOCITY], rows=arange, cols=arange, @@ -82,7 +82,7 @@ def compute(self, inputs, outputs): TAS = inputs[Dynamic.Mission.VELOCITY] outputs[Dynamic.Mission.VELOCITY_RATE] = (GRAV_ENGLISH_GASP / weight) * (thrust - drag) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS def compute_partials(self, inputs, J): weight = inputs[Dynamic.Vehicle.MASS] * GRAV_ENGLISH_LBM diff --git a/aviary/mission/gasp_based/ode/accel_ode.py b/aviary/mission/gasp_based/ode/accel_ode.py index e204f7460..6e1196d1d 100644 --- a/aviary/mission/gasp_based/ode/accel_ode.py +++ b/aviary/mission/gasp_based/ode/accel_ode.py @@ -52,7 +52,7 @@ def setup(self): ], promotes_outputs=[ Dynamic.Mission.VELOCITY_RATE, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, ], ) diff --git a/aviary/mission/gasp_based/ode/ascent_eom.py b/aviary/mission/gasp_based/ode/ascent_eom.py index 3be401f7c..c5885dc49 100644 --- a/aviary/mission/gasp_based/ode/ascent_eom.py +++ b/aviary/mission/gasp_based/ode/ascent_eom.py @@ -73,7 +73,10 @@ def setup(self): units='ft/s', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, val=np.ones(nn), desc='distance rate', units='ft/s' + Dynamic.Mission.GROUND_DISTANCE_RATE, + val=np.ones(nn), + desc='distance rate', + units='ft/s', ) self.add_output('normal_force', val=np.ones(nn), desc='normal forces', units='lbf') self.add_output('fuselage_pitch', val=np.ones(nn), desc='fuselage pitch angle', units='deg') @@ -134,7 +137,7 @@ def setup_partials(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.VELOCITY, Dynamic.Mission.FLIGHT_PATH_ANGLE], rows=arange, cols=arange, @@ -204,7 +207,7 @@ def compute(self, inputs, outputs): ) outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['normal_force'] = normal_force outputs['fuselage_pitch'] = gamma * 180 / np.pi - i_wing + alpha @@ -336,8 +339,10 @@ def compute_partials(self, inputs, J): J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY] = np.sin(gamma) J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = TAS * np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin( + gamma + ) J['normal_force', Dynamic.Vehicle.MASS] = dNF_dWeight * GRAV_ENGLISH_LBM J['normal_force', Dynamic.Vehicle.LIFT] = dNF_dLift diff --git a/aviary/mission/gasp_based/ode/ascent_ode.py b/aviary/mission/gasp_based/ode/ascent_ode.py index 5fba64153..836ccabaa 100644 --- a/aviary/mission/gasp_based/ode/ascent_ode.py +++ b/aviary/mission/gasp_based/ode/ascent_ode.py @@ -63,7 +63,7 @@ def setup(self): Dynamic.Mission.VELOCITY_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, Dynamic.Mission.ALTITUDE_RATE, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, 'angle_of_attack_rate', 'normal_force', 'fuselage_pitch', diff --git a/aviary/mission/gasp_based/ode/breguet_cruise_ode.py b/aviary/mission/gasp_based/ode/breguet_cruise_ode.py index ee7c2cf55..c6aa74f00 100644 --- a/aviary/mission/gasp_based/ode/breguet_cruise_ode.py +++ b/aviary/mission/gasp_based/ode/breguet_cruise_ode.py @@ -112,7 +112,7 @@ def setup(self): ('TAS_cruise', Dynamic.Mission.VELOCITY), ], promotes_outputs=[ - ('cruise_range', Dynamic.Mission.DISTANCE), + ('cruise_range', Dynamic.Mission.GROUND_DISTANCE), ('cruise_time', 'time'), ], ) @@ -253,7 +253,7 @@ def setup(self): ('TAS_cruise', Dynamic.Mission.VELOCITY), ], promotes_outputs=[ - ('cruise_range', Dynamic.Mission.DISTANCE), + ('cruise_range', Dynamic.Mission.GROUND_DISTANCE), ('cruise_time', 'time'), ], ) diff --git a/aviary/mission/gasp_based/ode/climb_eom.py b/aviary/mission/gasp_based/ode/climb_eom.py index d1c2922e0..0954514b0 100644 --- a/aviary/mission/gasp_based/ode/climb_eom.py +++ b/aviary/mission/gasp_based/ode/climb_eom.py @@ -50,7 +50,7 @@ def setup(self): desc='rate of change of altitude', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='ft/s', desc='rate of change of horizontal distance covered', @@ -80,7 +80,7 @@ def setup(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [ Dynamic.Mission.VELOCITY, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, @@ -120,7 +120,7 @@ def compute(self, inputs, outputs): gamma = np.arcsin((thrust - drag) / weight) outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['required_lift'] = weight * np.cos(gamma) outputs[Dynamic.Mission.FLIGHT_PATH_ANGLE] = gamma @@ -147,12 +147,14 @@ def compute_partials(self, inputs, J): TAS * np.cos(gamma) * dGamma_dWeight * GRAV_ENGLISH_LBM ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = ( -TAS * np.sin(gamma) * dGamma_dThrust ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.DRAG] = -TAS * np.sin(gamma) * dGamma_dDrag - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.MASS] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.DRAG] = ( + -TAS * np.sin(gamma) * dGamma_dDrag + ) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.MASS] = ( -TAS * np.sin(gamma) * dGamma_dWeight * GRAV_ENGLISH_LBM ) diff --git a/aviary/mission/gasp_based/ode/climb_ode.py b/aviary/mission/gasp_based/ode/climb_ode.py index fb6345377..a68d09b4b 100644 --- a/aviary/mission/gasp_based/ode/climb_ode.py +++ b/aviary/mission/gasp_based/ode/climb_ode.py @@ -182,7 +182,7 @@ def setup(self): ], promotes_outputs=[ Dynamic.Mission.ALTITUDE_RATE, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, 'required_lift', Dynamic.Mission.FLIGHT_PATH_ANGLE, ], diff --git a/aviary/mission/gasp_based/ode/descent_eom.py b/aviary/mission/gasp_based/ode/descent_eom.py index bb8f88e8e..c14cdb1a7 100644 --- a/aviary/mission/gasp_based/ode/descent_eom.py +++ b/aviary/mission/gasp_based/ode/descent_eom.py @@ -51,7 +51,7 @@ def setup(self): desc='rate of change of altitude', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.zeros(nn), units='ft/s', desc='rate of change of horizontal distance covered', @@ -81,7 +81,7 @@ def setup(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [ Dynamic.Mission.VELOCITY, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, @@ -123,7 +123,7 @@ def compute(self, inputs, outputs): gamma = (thrust - drag) / weight outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['required_lift'] = weight * np.cos(gamma) - thrust * np.sin(alpha) outputs[Dynamic.Mission.FLIGHT_PATH_ANGLE] = gamma @@ -145,14 +145,14 @@ def compute_partials(self, inputs, J): TAS * np.cos(gamma) * (-(thrust - drag) / weight**2) * GRAV_ENGLISH_LBM ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = ( -TAS * np.sin(gamma) / weight ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.DRAG] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.DRAG] = ( -TAS * np.sin(gamma) * (-1 / weight) ) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Vehicle.MASS] = ( + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Vehicle.MASS] = ( -TAS * np.sin(gamma) * (-(thrust - drag) / weight**2) * GRAV_ENGLISH_LBM ) diff --git a/aviary/mission/gasp_based/ode/descent_ode.py b/aviary/mission/gasp_based/ode/descent_ode.py index 484436072..651da337f 100644 --- a/aviary/mission/gasp_based/ode/descent_ode.py +++ b/aviary/mission/gasp_based/ode/descent_ode.py @@ -155,7 +155,7 @@ def setup(self): ], promotes_outputs=[ Dynamic.Mission.ALTITUDE_RATE, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, 'required_lift', Dynamic.Mission.FLIGHT_PATH_ANGLE, ], diff --git a/aviary/mission/gasp_based/ode/flight_path_eom.py b/aviary/mission/gasp_based/ode/flight_path_eom.py index 543b702eb..746d01c84 100644 --- a/aviary/mission/gasp_based/ode/flight_path_eom.py +++ b/aviary/mission/gasp_based/ode/flight_path_eom.py @@ -97,7 +97,7 @@ def setup(self): ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=np.ones(nn), desc='distance rate', units='ft/s', @@ -190,7 +190,7 @@ def setup_partials(self): ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.VELOCITY, Dynamic.Mission.FLIGHT_PATH_ANGLE], rows=arange, cols=arange, @@ -254,7 +254,7 @@ def compute(self, inputs, outputs): ) outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['normal_force'] = normal_force @@ -400,8 +400,10 @@ def compute_partials(self, inputs, J): J['fuselage_pitch', Aircraft.Wing.INCIDENCE] = -1 J['load_factor', Aircraft.Wing.INCIDENCE] = dTAcF_dIwing / (weight * np.cos(gamma)) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin( + gamma + ) J['normal_force', Dynamic.Vehicle.MASS] = dNF_dWeight * GRAV_ENGLISH_LBM J['normal_force', Dynamic.Vehicle.LIFT] = dNF_dLift diff --git a/aviary/mission/gasp_based/ode/flight_path_ode.py b/aviary/mission/gasp_based/ode/flight_path_ode.py index 4ad36b1a2..336f452b6 100644 --- a/aviary/mission/gasp_based/ode/flight_path_ode.py +++ b/aviary/mission/gasp_based/ode/flight_path_ode.py @@ -142,7 +142,7 @@ def setup(self): promotes_inputs=EOM_inputs, promotes_outputs=[ Dynamic.Mission.VELOCITY_RATE, - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, 'normal_force', 'fuselage_pitch', 'load_factor', diff --git a/aviary/mission/gasp_based/ode/groundroll_eom.py b/aviary/mission/gasp_based/ode/groundroll_eom.py index aa822316c..c4ac59cab 100644 --- a/aviary/mission/gasp_based/ode/groundroll_eom.py +++ b/aviary/mission/gasp_based/ode/groundroll_eom.py @@ -74,7 +74,10 @@ def setup(self): units='ft/s', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, val=np.ones(nn), desc='distance rate', units='ft/s' + Dynamic.Mission.GROUND_DISTANCE_RATE, + val=np.ones(nn), + desc='distance rate', + units='ft/s', ) self.add_output('normal_force', val=np.ones(nn), desc='normal forces', units='lbf') self.add_output('fuselage_pitch', val=np.ones(nn), desc='fuselage pitch angle', units='deg') @@ -101,7 +104,7 @@ def setup(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.VELOCITY, Dynamic.Mission.FLIGHT_PATH_ANGLE], rows=arange, cols=arange, @@ -172,7 +175,7 @@ def compute(self, inputs, outputs): outputs[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE] = np.zeros(nn) outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['normal_force'] = normal_force outputs['fuselage_pitch'] = gamma * 180 / np.pi - i_wing + alpha @@ -255,8 +258,10 @@ def compute_partials(self, inputs, J): J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY] = np.sin(gamma) J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = TAS * np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin( + gamma + ) J['normal_force', Dynamic.Vehicle.MASS] = dNF_dWeight * GRAV_ENGLISH_LBM J['normal_force', Dynamic.Vehicle.LIFT] = dNF_dLift diff --git a/aviary/mission/gasp_based/ode/rotation_eom.py b/aviary/mission/gasp_based/ode/rotation_eom.py index 863a827da..75c2e9296 100644 --- a/aviary/mission/gasp_based/ode/rotation_eom.py +++ b/aviary/mission/gasp_based/ode/rotation_eom.py @@ -74,7 +74,10 @@ def setup(self): units='ft/s', ) self.add_output( - Dynamic.Mission.DISTANCE_RATE, val=np.ones(nn), desc='distance rate', units='ft/s' + Dynamic.Mission.GROUND_DISTANCE_RATE, + val=np.ones(nn), + desc='distance rate', + units='ft/s', ) self.add_output('normal_force', val=np.ones(nn), desc='normal forces', units='lbf') self.add_output('fuselage_pitch', val=np.ones(nn), desc='fuselage pitch angle', units='deg') @@ -109,7 +112,7 @@ def setup_partials(self): cols=arange, ) self.declare_partials( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, [Dynamic.Mission.VELOCITY, Dynamic.Mission.FLIGHT_PATH_ANGLE], rows=arange, cols=arange, @@ -176,7 +179,7 @@ def compute(self, inputs, outputs): outputs[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE] = np.zeros(nn) outputs[Dynamic.Mission.ALTITUDE_RATE] = TAS * np.sin(gamma) - outputs[Dynamic.Mission.DISTANCE_RATE] = TAS * np.cos(gamma) + outputs[Dynamic.Mission.GROUND_DISTANCE_RATE] = TAS * np.cos(gamma) outputs['normal_force'] = normal_force outputs['fuselage_pitch'] = gamma * 180 / np.pi - i_wing + alpha outputs['angle_of_attack_rate'] = np.full(nn, 3.33) @@ -259,8 +262,10 @@ def compute_partials(self, inputs, J): J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.VELOCITY] = np.sin(gamma) J[Dynamic.Mission.ALTITUDE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = TAS * np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) - J[Dynamic.Mission.DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.VELOCITY] = np.cos(gamma) + J[Dynamic.Mission.GROUND_DISTANCE_RATE, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -TAS * np.sin( + gamma + ) J['normal_force', Dynamic.Vehicle.MASS] = dNF_dWeight * GRAV_ENGLISH_LBM J['normal_force', Dynamic.Vehicle.LIFT] = dNF_dLift diff --git a/aviary/mission/gasp_based/ode/test/test_accel_eom.py b/aviary/mission/gasp_based/ode/test/test_accel_eom.py index 14408610c..0a0081d44 100644 --- a/aviary/mission/gasp_based/ode/test/test_accel_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_accel_eom.py @@ -47,7 +47,7 @@ def test_case1(self): # note: this was finite differenced from GASP. The fd value is: np.array([5.2353365, 5.2353365]) ) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([425.32808399, 425.32808399]), tol, # note: this was finite differenced from GASP. The fd value is: np.array([441.6439, 441.6439]) diff --git a/aviary/mission/gasp_based/ode/test/test_ascent_ode.py b/aviary/mission/gasp_based/ode/test/test_ascent_ode.py index 5a45c778f..5ba9510a9 100644 --- a/aviary/mission/gasp_based/ode/test/test_ascent_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_ascent_ode.py @@ -61,7 +61,7 @@ def test_ascent_partials(self): ) assert_near_equal(self.prob[Dynamic.Mission.ALTITUDE_RATE], np.array([0.0, 0.0]), tol) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([168.781, 168.781]), tol + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([168.781, 168.781]), tol ) assert_near_equal(self.prob['angle_of_attack_rate'], np.array([0.0, 0.0]), tol) assert_near_equal(self.prob['normal_force'], np.array([0.0, 0.0]), tol) diff --git a/aviary/mission/gasp_based/ode/test/test_breguet_cruise_ode.py b/aviary/mission/gasp_based/ode/test/test_breguet_cruise_ode.py index c724838ae..55f3628e1 100644 --- a/aviary/mission/gasp_based/ode/test/test_breguet_cruise_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_breguet_cruise_ode.py @@ -55,7 +55,9 @@ def test_cruise(self): tol = tol = 1e-6 assert_near_equal(self.prob[Dynamic.Mission.VELOCITY_RATE], np.array([1.0, 1.0]), tol) - assert_near_equal(self.prob[Dynamic.Mission.DISTANCE], np.array([0.0, 923.16791306]), tol) + assert_near_equal( + self.prob[Dynamic.Mission.GROUND_DISTANCE], np.array([0.0, 923.16791306]), tol + ) assert_near_equal(self.prob['time'], np.array([0, 8277.67602647]), tol) assert_near_equal( self.prob[Dynamic.Mission.SPECIFIC_ENERGY_RATE_EXCESS], @@ -119,7 +121,9 @@ def test_electric_cruise(self): tol = tol = 1e-6 assert_near_equal(self.prob[Dynamic.Mission.VELOCITY_RATE], np.array([1.0, 1.0]), tol) - assert_near_equal(self.prob[Dynamic.Mission.DISTANCE], np.array([0.0, 66.31948625]), tol) + assert_near_equal( + self.prob[Dynamic.Mission.GROUND_DISTANCE], np.array([0.0, 66.31948625]), tol + ) assert_near_equal(self.prob['time'], np.array([0, 594.66020611]), tol) assert_near_equal( self.prob[Dynamic.Mission.SPECIFIC_ENERGY_RATE_EXCESS], diff --git a/aviary/mission/gasp_based/ode/test/test_climb_eom.py b/aviary/mission/gasp_based/ode/test/test_climb_eom.py index 92af6d630..a0d30588a 100644 --- a/aviary/mission/gasp_based/ode/test/test_climb_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_climb_eom.py @@ -45,7 +45,7 @@ def test_case1(self): tol, ) # note: values from GASP are: np.array([5.9667, 5.9667]) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([774.679584, 774.679584]), tol, # note: these values are finite differenced and lose accuracy. Fd values are: np.array([799.489, 799.489]) diff --git a/aviary/mission/gasp_based/ode/test/test_climb_ode.py b/aviary/mission/gasp_based/ode/test/test_climb_ode.py index 2b50708ef..08f5b94aa 100644 --- a/aviary/mission/gasp_based/ode/test/test_climb_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_climb_ode.py @@ -69,7 +69,7 @@ def test_start_of_climb(self): Dynamic.Mission.ALTITUDE_RATE: 58.0148345, # ft/s # TAS (kts -> ft/s) * cos(gamma), 253.6827 * 1.68781 * # cos(0.13331060446181708) - Dynamic.Mission.DISTANCE_RATE: 424.21929709, # ft/s + Dynamic.Mission.GROUND_DISTANCE_RATE: 424.21929709, # ft/s Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL: -13447.80297433, # lbm/h 'theta': 0.22600284, # rad (12.8021 deg) # rad (7.638135 deg) @@ -115,7 +115,7 @@ def test_end_of_climb(self): Dynamic.Mission.ALTITUDE_RATE: [52.44471763, 9.11523198], # ft/s # TAS (kts -> ft/s) * cos(gamma), [319, 459] kts # ft/s - Dynamic.Mission.DISTANCE_RATE: [536.08501758, 774.38047573], + Dynamic.Mission.GROUND_DISTANCE_RATE: [536.08501758, 774.38047573], Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL: [ -11417.86519196, -6042.88107957, diff --git a/aviary/mission/gasp_based/ode/test/test_descent_eom.py b/aviary/mission/gasp_based/ode/test/test_descent_eom.py index 979a9f40e..ccf15a7c5 100644 --- a/aviary/mission/gasp_based/ode/test/test_descent_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_descent_eom.py @@ -46,7 +46,7 @@ def test_case1(self): tol, ) # note: values from GASP are: np.array([-39.75, -39.75]) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([773.70165638, 773.70165638]), tol, # note: these values are finite differenced and lose accuracy. Fd values are:np.array([964.4634921, 964.4634921]) diff --git a/aviary/mission/gasp_based/ode/test/test_descent_ode.py b/aviary/mission/gasp_based/ode/test/test_descent_ode.py index cce9be183..a3caa3c08 100644 --- a/aviary/mission/gasp_based/ode/test/test_descent_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_descent_ode.py @@ -69,7 +69,7 @@ def test_high_alt(self): # ft/s Dynamic.Mission.ALTITUDE_RATE: np.array([-37.02561983, -44.211356]), # TAS (ft/s) * cos(gamma), [458.67774, 437.62297] kts - Dynamic.Mission.DISTANCE_RATE: [773.25678423, 737.1789493], # ft/s + Dynamic.Mission.GROUND_DISTANCE_RATE: [773.25678423, 737.1789493], # ft/s # lbm/h Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL: np.array( [-452.29466667, -997.41373745] @@ -113,7 +113,7 @@ def test_low_alt(self): 'CD': 0.02534414, Dynamic.Mission.ALTITUDE_RATE: -17.70801923, # TAS (ft/s) * cos(gamma) = 255.5613 * 1.68781 * cos(-0.0440083) - Dynamic.Mission.DISTANCE_RATE: 430.97461539, + Dynamic.Mission.GROUND_DISTANCE_RATE: 430.97461539, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL: -1295.11818529, # rad (-2.52149 deg) Dynamic.Mission.FLIGHT_PATH_ANGLE: -0.04106521, diff --git a/aviary/mission/gasp_based/ode/test/test_flight_path_eom.py b/aviary/mission/gasp_based/ode/test/test_flight_path_eom.py index 4d593d6d4..f7f2e570a 100644 --- a/aviary/mission/gasp_based/ode/test/test_flight_path_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_flight_path_eom.py @@ -29,7 +29,7 @@ def test_case1(self): tol, ) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([0.5403023, 0.5403023]), tol + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([0.5403023, 0.5403023]), tol ) assert_near_equal(self.prob['normal_force'], np.array([-0.0174524, -0.0174524]), tol) assert_near_equal(self.prob['fuselage_pitch'], np.array([58.2958, 58.2958]), tol) @@ -62,7 +62,7 @@ def test_case2(self): tol, ) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([0.5403023, 0.5403023]), tol + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([0.5403023, 0.5403023]), tol ) assert_near_equal(self.prob['normal_force'], np.array([-0.0, -0.0]), tol) assert_near_equal(self.prob['fuselage_pitch'], np.array([57.29578, 57.29578]), tol) diff --git a/aviary/mission/gasp_based/ode/test/test_flight_path_ode.py b/aviary/mission/gasp_based/ode/test/test_flight_path_ode.py index d035c3ce8..c64ae817d 100644 --- a/aviary/mission/gasp_based/ode/test/test_flight_path_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_flight_path_ode.py @@ -55,7 +55,7 @@ def test_case1(self): Dynamic.Mission.VELOCITY_RATE: [14.08998135, 14.08998135], Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE: [-0.1429133, -0.1429133], Dynamic.Mission.ALTITUDE_RATE: [0.0, 0.0], - Dynamic.Mission.DISTANCE_RATE: [168.781, 168.781], + Dynamic.Mission.GROUND_DISTANCE_RATE: [168.781, 168.781], 'normal_force': [74910.12, 74910.12], 'fuselage_pitch': [0.0, 0.0], 'load_factor': [0.2508988, 0.2508988], @@ -92,7 +92,7 @@ def test_case2(self): self.prob.run_model() testvals = { Dynamic.Mission.VELOCITY_RATE: [13.60756024, 13.60756024], - Dynamic.Mission.DISTANCE_RATE: [168.781, 168.781], + Dynamic.Mission.GROUND_DISTANCE_RATE: [168.781, 168.781], 'normal_force': [74910.12, 74910.12], 'fuselage_pitch': [0.0, 0.0], 'load_factor': [0.2508988, 0.2508988], diff --git a/aviary/mission/gasp_based/ode/test/test_groundroll_eom.py b/aviary/mission/gasp_based/ode/test/test_groundroll_eom.py index 651709908..80664434b 100644 --- a/aviary/mission/gasp_based/ode/test/test_groundroll_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_groundroll_eom.py @@ -48,7 +48,9 @@ def test_case1(self): self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE], np.array([0.0, 0.0]), tol ) assert_near_equal(self.prob[Dynamic.Mission.ALTITUDE_RATE], np.array([0.0, 0.0]), tol) - assert_near_equal(self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([10.0, 10.0]), tol) + assert_near_equal( + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([10.0, 10.0]), tol + ) assert_near_equal(self.prob['normal_force'], np.array([175200.0, 175200.0]), tol) assert_near_equal(self.prob['fuselage_pitch'], np.array([0.0, 0.0]), tol) partial_data = self.prob.check_partials(out_stream=None, method='cs') diff --git a/aviary/mission/gasp_based/ode/test/test_groundroll_ode.py b/aviary/mission/gasp_based/ode/test/test_groundroll_ode.py index f221d2084..2ddce321a 100644 --- a/aviary/mission/gasp_based/ode/test/test_groundroll_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_groundroll_ode.py @@ -54,7 +54,7 @@ def test_groundroll_partials(self): Dynamic.Mission.VELOCITY_RATE: [1415679.28759478, 1415679.28759478], Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE: [0.0, 0.0], Dynamic.Mission.ALTITUDE_RATE: [0.0, 0.0], - Dynamic.Mission.DISTANCE_RATE: [168.781, 168.781], + Dynamic.Mission.GROUND_DISTANCE_RATE: [168.781, 168.781], 'normal_force': [0.0, 0.0], 'fuselage_pitch': [0.0, 0.0], 'dmass_dv': [-5.02403534e-06, -5.02403534e-06], diff --git a/aviary/mission/gasp_based/ode/test/test_rotation_eom.py b/aviary/mission/gasp_based/ode/test/test_rotation_eom.py index d6b01fa40..aaa1e7fc2 100644 --- a/aviary/mission/gasp_based/ode/test/test_rotation_eom.py +++ b/aviary/mission/gasp_based/ode/test/test_rotation_eom.py @@ -48,7 +48,9 @@ def test_case1(self): self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE], np.array([0.0, 0.0]), tol ) assert_near_equal(self.prob[Dynamic.Mission.ALTITUDE_RATE], np.array([0.0, 0.0]), tol) - assert_near_equal(self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([10.0, 10.0]), tol) + assert_near_equal( + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([10.0, 10.0]), tol + ) assert_near_equal(self.prob['normal_force'], np.array([175200.0, 175200.0]), tol) assert_near_equal(self.prob['fuselage_pitch'], np.array([0.0, 0.0]), tol) diff --git a/aviary/mission/gasp_based/ode/test/test_rotation_ode.py b/aviary/mission/gasp_based/ode/test/test_rotation_ode.py index 95b17aed8..fb0e0deac 100644 --- a/aviary/mission/gasp_based/ode/test/test_rotation_ode.py +++ b/aviary/mission/gasp_based/ode/test/test_rotation_ode.py @@ -62,7 +62,7 @@ def test_rotation_partials(self): ) assert_near_equal(self.prob[Dynamic.Mission.ALTITUDE_RATE], np.array([0.0, 0.0]), tol) assert_near_equal( - self.prob[Dynamic.Mission.DISTANCE_RATE], np.array([168.781, 168.781]), tol + self.prob[Dynamic.Mission.GROUND_DISTANCE_RATE], np.array([168.781, 168.781]), tol ) assert_near_equal(self.prob['normal_force'], np.array([66932.7, 66932.7]), tol) assert_near_equal(self.prob['fuselage_pitch'], np.array([0.0, 0.0]), tol) diff --git a/aviary/mission/gasp_based/phases/accel_phase.py b/aviary/mission/gasp_based/phases/accel_phase.py index b3bc097e7..86dba7bec 100644 --- a/aviary/mission/gasp_based/phases/accel_phase.py +++ b/aviary/mission/gasp_based/phases/accel_phase.py @@ -135,7 +135,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) # Boundary Constraints phase.add_boundary_constraint( diff --git a/aviary/mission/gasp_based/phases/ascent_phase.py b/aviary/mission/gasp_based/phases/ascent_phase.py index 1569a72f8..b06c26fa0 100644 --- a/aviary/mission/gasp_based/phases/ascent_phase.py +++ b/aviary/mission/gasp_based/phases/ascent_phase.py @@ -162,7 +162,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) self.add_control( 'angle_of_attack', diff --git a/aviary/mission/gasp_based/phases/climb_phase.py b/aviary/mission/gasp_based/phases/climb_phase.py index 9404c6894..400a6bef9 100644 --- a/aviary/mission/gasp_based/phases/climb_phase.py +++ b/aviary/mission/gasp_based/phases/climb_phase.py @@ -161,7 +161,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) if required_available_climb_rate is not None: # TODO: this should be altitude rate max diff --git a/aviary/mission/gasp_based/phases/cruise_phase.py b/aviary/mission/gasp_based/phases/cruise_phase.py index 8595b321a..b09d7b0fb 100644 --- a/aviary/mission/gasp_based/phases/cruise_phase.py +++ b/aviary/mission/gasp_based/phases/cruise_phase.py @@ -141,7 +141,7 @@ def build_phase(self, aviary_options: AviaryValues = None): phase.add_timeseries_output('time', units='s', output_name='time') phase.add_timeseries_output(Dynamic.Vehicle.MASS, units='lbm') - phase.add_timeseries_output(Dynamic.Mission.DISTANCE, units='nmi') + phase.add_timeseries_output(Dynamic.Mission.GROUND_DISTANCE, units='nmi') return phase diff --git a/aviary/mission/gasp_based/phases/descent_phase.py b/aviary/mission/gasp_based/phases/descent_phase.py index 210f18e72..f7a868956 100644 --- a/aviary/mission/gasp_based/phases/descent_phase.py +++ b/aviary/mission/gasp_based/phases/descent_phase.py @@ -131,7 +131,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) # Add parameter if necessary if input_speed_type == SpeedType.EAS: diff --git a/aviary/mission/gasp_based/phases/groundroll_phase.py b/aviary/mission/gasp_based/phases/groundroll_phase.py index 7e9e7ea47..de86beaa6 100644 --- a/aviary/mission/gasp_based/phases/groundroll_phase.py +++ b/aviary/mission/gasp_based/phases/groundroll_phase.py @@ -104,7 +104,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) phase.add_parameter('t_init_gear', units='s', static_target=True, opt=False, val=100) phase.add_parameter('t_init_flaps', units='s', static_target=True, opt=False, val=100) diff --git a/aviary/mission/gasp_based/phases/rotation_phase.py b/aviary/mission/gasp_based/phases/rotation_phase.py index 724c281a3..0d013a251 100644 --- a/aviary/mission/gasp_based/phases/rotation_phase.py +++ b/aviary/mission/gasp_based/phases/rotation_phase.py @@ -148,7 +148,9 @@ def build_phase(self, aviary_options: AviaryValues = None): Dynamic.Vehicle.MASS, Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL, ) - self.add_state('distance', Dynamic.Mission.DISTANCE, Dynamic.Mission.DISTANCE_RATE) + self.add_state( + 'distance', Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.GROUND_DISTANCE_RATE + ) # Add parameters phase.add_parameter('t_init_gear', units='s', static_target=True, opt=False, val=100) diff --git a/aviary/mission/gasp_based/phases/twodof_phase.py b/aviary/mission/gasp_based/phases/twodof_phase.py index 8159bc17d..680688a53 100644 --- a/aviary/mission/gasp_based/phases/twodof_phase.py +++ b/aviary/mission/gasp_based/phases/twodof_phase.py @@ -234,7 +234,7 @@ def build_phase(self, aviary_options: AviaryValues = None): fix_initial=fix_initial, fix_duration=fix_duration, units=time_units, - name=Dynamic.Mission.DISTANCE, + name=Dynamic.Mission.GROUND_DISTANCE, **extra_options, ) diff --git a/aviary/mission/height_energy_problem_configurator.py b/aviary/mission/height_energy_problem_configurator.py index 7599f12bb..1471db0b2 100644 --- a/aviary/mission/height_energy_problem_configurator.py +++ b/aviary/mission/height_energy_problem_configurator.py @@ -301,7 +301,7 @@ def link_phases(self, aviary_group, phases, connect_directly=True): ) aviary_group.traj.link_phases( phases, - [Dynamic.Mission.DISTANCE], + [Dynamic.Mission.GROUND_DISTANCE], ref=None if connect_directly else 1e3, connected=connect_directly, ) @@ -311,12 +311,12 @@ def link_phases(self, aviary_group, phases, connect_directly=True): for phase_name in phases[1:]: phase = aviary_group.traj._phases[phase_name] phase.set_state_options(Dynamic.Vehicle.MASS, input_initial=False) - phase.set_state_options(Dynamic.Mission.DISTANCE, input_initial=False) + phase.set_state_options(Dynamic.Mission.GROUND_DISTANCE, input_initial=False) phase = aviary_group.traj._phases[phases[0]] # Currently expects Distance to be an input. - phase.set_state_options(Dynamic.Mission.DISTANCE, input_initial=True) + phase.set_state_options(Dynamic.Mission.GROUND_DISTANCE, input_initial=True) if aviary_group.pre_mission_info['include_takeoff']: # Allow these to connect to outputs in the pre-mission takeoff system. @@ -336,7 +336,7 @@ def check_trajectory(self, aviary_group): stems = [ Dynamic.Vehicle.MASS, - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, Dynamic.Atmosphere.MACH, Dynamic.Mission.ALTITUDE, ] @@ -543,7 +543,7 @@ def set_phase_initial_guesses( Location of this trajectory in the hierarchy. """ control_keys = ['mach', 'altitude'] - state_keys = ['mass', Dynamic.Mission.DISTANCE] + state_keys = ['mass', Dynamic.Mission.GROUND_DISTANCE] prob_keys = ['tau_gear', 'tau_flaps'] options = aviary_group.phase_info[phase_name]['user_options'] diff --git a/aviary/mission/solved_two_dof_problem_configurator.py b/aviary/mission/solved_two_dof_problem_configurator.py index ebb29c4da..da219f540 100644 --- a/aviary/mission/solved_two_dof_problem_configurator.py +++ b/aviary/mission/solved_two_dof_problem_configurator.py @@ -223,7 +223,7 @@ def link_phases(self, aviary_group, phases, connect_directly=True): aviary_group.traj.link_phases(phases, [Dynamic.Vehicle.MASS], connected=True) aviary_group.traj.link_phases( - phases, [Dynamic.Mission.DISTANCE], units='ft', ref=1.0e3, connected=False + phases, [Dynamic.Mission.GROUND_DISTANCE], units='ft', ref=1.0e3, connected=False ) aviary_group.traj.link_phases(phases, ['time'], connected=False) diff --git a/aviary/mission/two_dof_problem_configurator.py b/aviary/mission/two_dof_problem_configurator.py index c83a0e7d0..8c0e0dd8c 100644 --- a/aviary/mission/two_dof_problem_configurator.py +++ b/aviary/mission/two_dof_problem_configurator.py @@ -401,7 +401,7 @@ def link_phases(self, aviary_group, phases, connect_directly=True): # we always want time, distance, and mass to be continuous states_to_link = { 'time': connect_directly, - Dynamic.Mission.DISTANCE: connect_directly, + Dynamic.Mission.GROUND_DISTANCE: connect_directly, Dynamic.Vehicle.MASS: False, } @@ -683,7 +683,7 @@ def set_phase_initial_guesses( state_keys = [ 'altitude', 'mass', - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, Dynamic.Mission.VELOCITY, 'flight_path_angle', Dynamic.Vehicle.ANGLE_OF_ATTACK, @@ -812,5 +812,5 @@ def set_phase_initial_guesses( # variable target_prob.set_val( parent_prefix + f'traj.{phase_name}.states:distance', - phase.interp(Dynamic.Mission.DISTANCE, ys=ys), + phase.interp(Dynamic.Mission.GROUND_DISTANCE, ys=ys), ) diff --git a/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py b/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py index a279611c8..3b4bad0a0 100644 --- a/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py +++ b/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py @@ -865,7 +865,7 @@ detailed_takeoff = AviaryValues() detailed_takeoff.set_val('time', [0.77, 32.01, 33.00, 35.40], 's') -detailed_takeoff.set_val(Dynamic.Mission.DISTANCE, [3.08, 4626.88, 4893.40, 5557.61], 'ft') +detailed_takeoff.set_val(Dynamic.Mission.GROUND_DISTANCE, [3.08, 4626.88, 4893.40, 5557.61], 'ft') detailed_takeoff.set_val(Dynamic.Mission.ALTITUDE, [0.00, 0.00, 0.64, 27.98], 'ft') velocity = np.array([4.74, 157.58, 160.99, 166.68]) detailed_takeoff.set_val(Dynamic.Mission.VELOCITY, velocity, 'kn') @@ -881,7 +881,7 @@ # missing from the default FLOPS output generated by hand # RANGE_RATE = VELOCITY * cos(flight_path_angle) range_rate = np.array([4.74, 157.58, 160.98, 166.25]) -detailed_takeoff.set_val(Dynamic.Mission.DISTANCE_RATE, range_rate, 'kn') +detailed_takeoff.set_val(Dynamic.Mission.GROUND_DISTANCE_RATE, range_rate, 'kn') # ALTITUDE_RATE = VELOCITY * sin(flight_path_angle) altitude_rate = np.array([0.00, 0.00, 1.72, 11.91]) detailed_takeoff.set_val(Dynamic.Mission.ALTITUDE_RATE, altitude_rate, 'kn') @@ -1188,7 +1188,7 @@ def _split_aviary_values(aviary_values, slicing): base = values[0] values = values - base -detailed_landing.set_val(Dynamic.Mission.DISTANCE, values, 'ft') +detailed_landing.set_val(Dynamic.Mission.GROUND_DISTANCE, values, 'ft') # block auto-formatting of tables # fmt: off @@ -1273,7 +1273,7 @@ def _split_aviary_values(aviary_values, slicing): velocity: np.ndarray = detailed_landing.get_val(Dynamic.Mission.VELOCITY, 'kn') flight_path_angle = detailed_landing.get_val(Dynamic.Mission.FLIGHT_PATH_ANGLE, 'rad') range_rate = velocity * np.cos(-flight_path_angle) -detailed_landing.set_val(Dynamic.Mission.DISTANCE_RATE, range_rate, 'kn') +detailed_landing.set_val(Dynamic.Mission.GROUND_DISTANCE_RATE, range_rate, 'kn') # ALTITUDE_RATE = VELOCITY * sin(flight_path_angle) altitude_rate = velocity * np.sin(flight_path_angle) detailed_landing.set_val(Dynamic.Mission.ALTITUDE_RATE, altitude_rate, 'kn') diff --git a/aviary/validation_cases/benchmark_tests/test_FLOPS_balanced_field_length.py b/aviary/validation_cases/benchmark_tests/test_FLOPS_balanced_field_length.py index 4475f8adc..0a9dcc9e7 100644 --- a/aviary/validation_cases/benchmark_tests/test_FLOPS_balanced_field_length.py +++ b/aviary/validation_cases/benchmark_tests/test_FLOPS_balanced_field_length.py @@ -101,7 +101,9 @@ def _do_run(self, driver: Driver, optimizer, *args): distance_max, units = takeoff_liftoff_user_options.get_item('distance_max') liftoff = takeoff_trajectory_builder.get_phase('balanced_liftoff') - liftoff.add_objective(Dynamic.Mission.DISTANCE, loc='final', ref=distance_max, units=units) + liftoff.add_objective( + Dynamic.Mission.GROUND_DISTANCE, loc='final', ref=distance_max, units=units + ) varnames = [Aircraft.Wing.ASPECT_RATIO, Aircraft.Engine.SCALE_FACTOR] set_aviary_input_defaults(takeoff.model, varnames, aviary_options) diff --git a/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_landing.py b/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_landing.py index bdb1b511e..c46001600 100644 --- a/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_landing.py +++ b/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_landing.py @@ -95,7 +95,9 @@ def _do_run(self, driver: Driver, optimizer, *args): distance_max, units = landing_fullstop_user_options.get_item('distance_max') fullstop = landing_trajectory_builder.get_phase('landing_fullstop') - fullstop.add_objective(Dynamic.Mission.DISTANCE, loc='final', ref=distance_max, units=units) + fullstop.add_objective( + Dynamic.Mission.GROUND_DISTANCE, loc='final', ref=distance_max, units=units + ) varnames = [Aircraft.Wing.ASPECT_RATIO] set_aviary_input_defaults(landing.model, varnames, aviary_options) diff --git a/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_takeoff.py b/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_takeoff.py index d4bdb7216..c809c18de 100644 --- a/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_takeoff.py +++ b/aviary/validation_cases/benchmark_tests/test_FLOPS_detailed_takeoff.py @@ -101,7 +101,9 @@ def _do_run(self, driver: Driver, optimizer, *args): distance_max, units = takeoff_liftoff_user_options.get_item('distance_max') liftoff = takeoff_trajectory_builder.get_phase('takeoff_liftoff') - liftoff.add_objective(Dynamic.Mission.DISTANCE, loc='final', ref=distance_max, units=units) + liftoff.add_objective( + Dynamic.Mission.GROUND_DISTANCE, loc='final', ref=distance_max, units=units + ) # Insert a constraint for a fake decision speed, until abort is added. takeoff.model.add_constraint( diff --git a/aviary/validation_cases/benchmark_tests/test_bench_FwGm.py b/aviary/validation_cases/benchmark_tests/test_bench_FwGm.py index 619419743..d49e32e98 100644 --- a/aviary/validation_cases/benchmark_tests/test_bench_FwGm.py +++ b/aviary/validation_cases/benchmark_tests/test_bench_FwGm.py @@ -47,7 +47,7 @@ def bench_test_swap_3_FwGm_IPOPT(self): assert_near_equal(prob.get_val(Mission.Landing.GROUND_DISTANCE), 2595.0, tolerance=rtol) assert_near_equal( - prob.get_val('traj.desc2.timeseries.distance')[-1], 3675.0, tolerance=rtol + prob.get_val('traj.desc2.timeseries.ground_distance')[-1], 3675.0, tolerance=rtol ) @require_pyoptsparse(optimizer='SNOPT') @@ -76,7 +76,7 @@ def bench_test_swap_3_FwGm_SNOPT(self): assert_near_equal(prob.get_val(Mission.Landing.GROUND_DISTANCE), 2595.0, tolerance=rtol) assert_near_equal( - prob.get_val('traj.desc2.timeseries.distance')[-1], 3675.0, tolerance=rtol + prob.get_val('traj.desc2.timeseries.ground_distance')[-1], 3675.0, tolerance=rtol ) diff --git a/aviary/validation_cases/benchmark_utils.py b/aviary/validation_cases/benchmark_utils.py index 577a91f96..5428de64a 100644 --- a/aviary/validation_cases/benchmark_utils.py +++ b/aviary/validation_cases/benchmark_utils.py @@ -27,7 +27,9 @@ def compare_against_expected_values(prob, expected_dict): prob.get_val(f'traj.{phase}.timeseries.velocity', units='m/s', get_remote=True) ) masses.extend(prob.get_val(f'traj.{phase}.timeseries.mass', units='kg', get_remote=True)) - ranges.extend(prob.get_val(f'traj.{phase}.timeseries.distance', units='m', get_remote=True)) + ranges.extend( + prob.get_val(f'traj.{phase}.timeseries.ground_distance', units='m', get_remote=True) + ) times = np.array(times) altitudes = np.array(altitudes) diff --git a/aviary/validation_cases/validation_data/flops_data/full_mission_test_data.py b/aviary/validation_cases/validation_data/flops_data/full_mission_test_data.py index 7a8eeca74..8d5c614b7 100644 --- a/aviary/validation_cases/validation_data/flops_data/full_mission_test_data.py +++ b/aviary/validation_cases/validation_data/flops_data/full_mission_test_data.py @@ -160,7 +160,7 @@ data.set_val( # state_rates:range - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, val=[ 163.776550884386, 232.775306059091, diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index e1a8743fc..076a71621 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -6705,7 +6705,7 @@ ) add_meta_data( - Dynamic.Mission.DISTANCE, + Dynamic.Mission.GROUND_DISTANCE, meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'range', 'LEAPS1': None}, units='NM', @@ -6714,7 +6714,7 @@ ) add_meta_data( - Dynamic.Mission.DISTANCE_RATE, + Dynamic.Mission.GROUND_DISTANCE_RATE, meta_data=_MetaData, historical_name={'GASP': None, 'FLOPS': 'range_rate', 'LEAPS1': None}, units='NM/s', diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index b4570fb97..86a2ea395 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -639,8 +639,8 @@ class Mission: ALTITUDE_RATE = 'altitude_rate' ALTITUDE_RATE_MAX = 'altitude_rate_max' # TODO Angle of Attack - DISTANCE = 'distance' - DISTANCE_RATE = 'distance_rate' + GROUND_DISTANCE = 'ground_distance' + GROUND_DISTANCE_RATE = 'ground_distance_rate' FLIGHT_PATH_ANGLE = 'flight_path_angle' FLIGHT_PATH_ANGLE_RATE = 'flight_path_angle_rate' SPECIFIC_ENERGY = 'specific_energy'