Skip to content

Commit

Permalink
This commit modifies the angle of attack name through Aviary to use t…
Browse files Browse the repository at this point in the history
…he variable now stored in the variable meta data.
  • Loading branch information
nathanperreau committed Jan 17, 2025
1 parent 0eab7f6 commit 48c7453
Show file tree
Hide file tree
Showing 21 changed files with 134 additions and 124 deletions.
26 changes: 13 additions & 13 deletions aviary/mission/flops_based/ode/landing_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def setup(self):
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
]

Expand Down Expand Up @@ -113,7 +113,7 @@ def setup(self):
Dynamic.Vehicle.MASS,
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
]

Expand Down Expand Up @@ -165,7 +165,7 @@ def setup(self):
add_aviary_input(self, Dynamic.Vehicle.LIFT, val=np.ones(nn), units='N')
add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N')

self.add_input('angle_of_attack', val=np.zeros(nn), units='rad')
self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad')

add_aviary_input(
self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.zeros(nn), units='rad'
Expand Down Expand Up @@ -204,7 +204,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):

weight = mass * grav_metric

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

# FLOPS measures glideslope below horizontal
Expand Down Expand Up @@ -242,7 +242,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None):

weight = mass * grav_metric

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

# FLOPS measures glideslope below horizontal
Expand Down Expand Up @@ -284,8 +284,8 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
f_h = t_angle * (drag - weight * s_gamma) / c_angle
f_v = -(weight * c_gamma - lift) / (s_angle * t_angle)

J[forces_key, 'angle_of_attack'] = f_h - f_v
J[thrust_key, 'angle_of_attack'] = (f_h + f_v) / (2.)
J[forces_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = f_h - f_v
J[thrust_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = (f_h + f_v) / (2.)

f_h = -weight * c_gamma / c_angle
f_v = -weight * s_gamma / s_angle
Expand Down Expand Up @@ -320,7 +320,7 @@ def setup(self):
val=np.ones(nn), units='N')
add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N')

self.add_input('angle_of_attack', val=np.zeros(nn), units='rad')
self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad')

add_aviary_input(
self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.zeros(nn), units='rad'
Expand Down Expand Up @@ -351,7 +351,7 @@ def setup_partials(self):
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
]

Expand All @@ -370,7 +370,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):
thrust = inputs[Dynamic.Vehicle.Propulsion.THRUST_TOTAL]
drag = inputs[Dynamic.Vehicle.DRAG]

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

# FLOPS measures glideslope below horizontal
Expand Down Expand Up @@ -408,7 +408,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
thrust = inputs[Dynamic.Vehicle.Propulsion.THRUST_TOTAL]
drag = inputs[Dynamic.Vehicle.DRAG]

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

# FLOPS measures glideslope below horizontal
Expand All @@ -434,8 +434,8 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
J[f_h_key, Dynamic.Vehicle.DRAG] = c_gamma
J[f_v_key, Dynamic.Vehicle.DRAG] = s_gamma

J[f_h_key, 'angle_of_attack'] = thrust * s_angle
J[f_v_key, 'angle_of_attack'] = thrust * c_angle
J[f_h_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = thrust * s_angle
J[f_v_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = thrust * c_angle

f_h = -drag * s_gamma - lift * c_gamma - thrust * s_angle
J[f_h_key, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -f_h
Expand Down
2 changes: 1 addition & 1 deletion aviary/mission/flops_based/ode/landing_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def setup(self):
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
'angle_of_attack_rate',
Mission.Landing.FLARE_RATE,
],
Expand Down
26 changes: 13 additions & 13 deletions aviary/mission/flops_based/ode/takeoff_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ def setup(self):
val=np.ones(nn), units='N')
add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N')

self.add_input('angle_of_attack', val=np.zeros(nn), units='rad')
self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad')

add_aviary_input(
self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.zeros(nn), units='rad'
Expand Down Expand Up @@ -586,7 +586,7 @@ def setup_partials(self):
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
]

Expand Down Expand Up @@ -635,7 +635,7 @@ def setup_partials(self):

self.declare_partials(
'forces_horizontal',
['angle_of_attack', Dynamic.Mission.FLIGHT_PATH_ANGLE],
[Dynamic.Vehicle.ANGLE_OF_ATTACK, Dynamic.Mission.FLIGHT_PATH_ANGLE],
dependent=False,
)

Expand Down Expand Up @@ -664,7 +664,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):
alpha0 = \
aviary_options.get_val(Mission.Takeoff.ANGLE_OF_ATTACK_RUNWAY, 'rad')

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

angle = alpha - alpha0 + t_inc + gamma
Expand Down Expand Up @@ -713,7 +713,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
thrust = inputs[Dynamic.Vehicle.Propulsion.THRUST_TOTAL]
drag = inputs[Dynamic.Vehicle.DRAG]

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

angle = alpha - alpha0 + t_inc + gamma
Expand All @@ -733,8 +733,8 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
J['forces_horizontal', Dynamic.Vehicle.DRAG] = -c_gamma
J['forces_vertical', Dynamic.Vehicle.DRAG] = -s_gamma

J['forces_horizontal', 'angle_of_attack'] = -thrust * s_angle
J['forces_vertical', 'angle_of_attack'] = thrust * c_angle
J['forces_horizontal', Dynamic.Vehicle.ANGLE_OF_ATTACK] = -thrust * s_angle
J['forces_vertical', Dynamic.Vehicle.ANGLE_OF_ATTACK] = thrust * c_angle

J['forces_horizontal', Dynamic.Mission.FLIGHT_PATH_ANGLE] = (
-thrust * s_angle + drag * s_gamma - lift * c_gamma
Expand Down Expand Up @@ -772,7 +772,7 @@ def setup(self):
)
add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N')

self.add_input('angle_of_attack', val=np.zeros(nn), units='rad')
self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad')

add_aviary_input(
self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.zeros(nn), units='rad'
Expand Down Expand Up @@ -800,7 +800,7 @@ def setup_partials(self):
[
Dynamic.Vehicle.MASS,
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
],
rows=rows_cols,
Expand Down Expand Up @@ -846,7 +846,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):

weight = mass * grav_metric

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

angle = alpha - alpha0 + t_inc
Expand Down Expand Up @@ -880,7 +880,7 @@ def compute_partials(self, inputs, J, discrete_inputs=None):

weight = mass * grav_metric

alpha = inputs['angle_of_attack']
alpha = inputs[Dynamic.Vehicle.ANGLE_OF_ATTACK]
gamma = inputs[Dynamic.Mission.FLIGHT_PATH_ANGLE]

angle = alpha - alpha0 + t_inc
Expand All @@ -900,8 +900,8 @@ def compute_partials(self, inputs, J, discrete_inputs=None):
J[f_h_key, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = c_angle
J[f_v_key, Dynamic.Vehicle.Propulsion.THRUST_TOTAL] = s_angle

J[f_h_key, 'angle_of_attack'] = -thrust * s_angle
J[f_v_key, 'angle_of_attack'] = thrust * c_angle
J[f_h_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = -thrust * s_angle
J[f_v_key, Dynamic.Vehicle.ANGLE_OF_ATTACK] = thrust * c_angle

J[f_h_key, Dynamic.Mission.FLIGHT_PATH_ANGLE] = -weight * c_gamma
J[f_v_key, Dynamic.Mission.FLIGHT_PATH_ANGLE] = weight * s_gamma
2 changes: 1 addition & 1 deletion aviary/mission/flops_based/ode/takeoff_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def setup(self):
Dynamic.Vehicle.LIFT,
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Dynamic.Vehicle.DRAG,
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
],
promotes_outputs=[
Dynamic.Mission.DISTANCE_RATE,
Expand Down
6 changes: 3 additions & 3 deletions aviary/mission/flops_based/ode/test/test_landing_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_case(self):
input_validation_data=detailed_landing_flare,
output_validation_data=detailed_landing_flare,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.VELOCITY,
Dynamic.Vehicle.MASS,
Expand Down Expand Up @@ -107,7 +107,7 @@ def test_GlideSlopeForces(self):
units="N",
)
prob.model.set_input_defaults(
"angle_of_attack", np.array([5.086, 6.834]), units="deg"
Dynamic.Vehicle.ANGLE_OF_ATTACK, np.array([5.086, 6.834]), units="deg"
)
prob.model.set_input_defaults(
Dynamic.Mission.FLIGHT_PATH_ANGLE, np.array([-3.0, -2.47]), units="deg"
Expand Down Expand Up @@ -153,7 +153,7 @@ def test_FlareSumForces(self):
Dynamic.Vehicle.Propulsion.THRUST_TOTAL, np.array([4980.3, 4102]), units="N"
)
prob.model.set_input_defaults(
"angle_of_attack", np.array([5.086, 6.834]), units="deg"
Dynamic.Vehicle.ANGLE_OF_ATTACK, np.array([5.086, 6.834]), units="deg"
)
prob.model.set_input_defaults(
Dynamic.Mission.FLIGHT_PATH_ANGLE, np.array([-3.0, -2.47]), units="deg"
Expand Down
2 changes: 1 addition & 1 deletion aviary/mission/flops_based/ode/test/test_landing_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def test_case(self):
input_validation_data=detailed_landing_flare,
output_validation_data=detailed_landing_flare,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.VELOCITY,
Dynamic.Vehicle.MASS,
Expand Down
6 changes: 3 additions & 3 deletions aviary/mission/flops_based/ode/test/test_takeoff_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def test_case_ground(self):
input_validation_data=detailed_takeoff_ground,
output_validation_data=detailed_takeoff_ground,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.VELOCITY,
Dynamic.Vehicle.MASS,
Expand All @@ -54,7 +54,7 @@ def test_case_climbing(self):
input_validation_data=detailed_takeoff_climbing,
output_validation_data=detailed_takeoff_climbing,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.VELOCITY,
Dynamic.Vehicle.MASS,
Expand Down Expand Up @@ -395,7 +395,7 @@ def test_ClimbGradientForces(self):
Dynamic.Mission.FLIGHT_PATH_ANGLE, np.array([0.612, 4.096]), units="rad"
)
prob.model.set_input_defaults(
"angle_of_attack", np.array([5.086, 6.834]), units="rad"
Dynamic.Vehicle.ANGLE_OF_ATTACK, np.array([5.086, 6.834]), units="rad"
)

prob.setup(check=False, force_alloc_complex=True)
Expand Down
4 changes: 2 additions & 2 deletions aviary/mission/flops_based/ode/test/test_takeoff_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def test_case_ground(self):
input_validation_data=detailed_takeoff_ground,
output_validation_data=detailed_takeoff_ground,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.ALTITUDE,
Dynamic.Mission.VELOCITY,
Expand Down Expand Up @@ -60,7 +60,7 @@ def test_case_climbing(self):
input_validation_data=detailed_takeoff_climbing,
output_validation_data=detailed_takeoff_climbing,
input_keys=[
'angle_of_attack',
Dynamic.Vehicle.ANGLE_OF_ATTACK,
Dynamic.Mission.FLIGHT_PATH_ANGLE,
Dynamic.Mission.ALTITUDE,
Dynamic.Mission.VELOCITY,
Expand Down
20 changes: 10 additions & 10 deletions aviary/mission/flops_based/phases/detailed_landing_phases.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ def build_phase(self, aviary_options: AviaryValues = None):
angle_of_attack_ref = user_options.get_val('angle_of_attack_ref', units)

phase.add_control(
'angle_of_attack', opt=True, units=units,
Dynamic.Vehicle.ANGLE_OF_ATTACK, opt=True, units=units,
upper=upper_angle_of_attack, lower=lower_angle_of_attack,
ref=angle_of_attack_ref
)
Expand Down Expand Up @@ -275,7 +275,7 @@ def _extra_ode_init_kwargs(self):
LandingApproachToMicP3._add_meta_data('initial_height', val=1., units='ft')

LandingApproachToMicP3._add_initial_guess_meta_data(
InitialGuessControl('angle_of_attack'))
InitialGuessControl(Dynamic.Vehicle.ANGLE_OF_ATTACK))

LandingApproachToMicP3._add_initial_guess_meta_data(InitialGuessState('altitude'))

Expand Down Expand Up @@ -530,7 +530,7 @@ def build_phase(self, aviary_options: AviaryValues = None):
opt=False
)

phase.add_control('angle_of_attack', opt=False, units='deg')
phase.add_control(Dynamic.Vehicle.ANGLE_OF_ATTACK, opt=False, units='deg')

phase.add_timeseries_output(
Dynamic.Vehicle.DRAG, output_name=Dynamic.Vehicle.DRAG, units='lbf'
Expand Down Expand Up @@ -590,7 +590,7 @@ def _extra_ode_init_kwargs(self):
LandingObstacleToFlare._add_meta_data('altitude_ref', val=1., units='ft')

LandingObstacleToFlare._add_initial_guess_meta_data(
InitialGuessControl('angle_of_attack'))
InitialGuessControl(Dynamic.Vehicle.ANGLE_OF_ATTACK))

LandingObstacleToFlare._add_initial_guess_meta_data(InitialGuessState('altitude'))

Expand Down Expand Up @@ -763,7 +763,7 @@ def build_phase(self, aviary_options: AviaryValues = None):
angle_of_attack_ref = user_options.get_val('angle_of_attack_ref', units)

phase.add_polynomial_control(
'angle_of_attack', opt=True, units=units, order=1,
Dynamic.Vehicle.ANGLE_OF_ATTACK, opt=True, units=units, order=1,
lower=lower_angle_of_attack, upper=upper_angle_of_attack,
ref=angle_of_attack_ref,
rate_targets="angle_of_attack_rate"
Expand Down Expand Up @@ -829,7 +829,7 @@ def _extra_ode_init_kwargs(self):
LandingFlareToTouchdown._add_meta_data('angle_of_attack_ref', val=10., units='deg')

LandingFlareToTouchdown._add_initial_guess_meta_data(
InitialGuessPolynomialControl('angle_of_attack'))
InitialGuessPolynomialControl(Dynamic.Vehicle.ANGLE_OF_ATTACK))

LandingFlareToTouchdown._add_initial_guess_meta_data(InitialGuessState('altitude'))

Expand Down Expand Up @@ -974,7 +974,7 @@ def build_phase(self, aviary_options=None):
max_angle_of_attack = user_options.get_val('max_angle_of_attack', units)

phase.add_polynomial_control(
'angle_of_attack', opt=True, units=units, order=1,
Dynamic.Vehicle.ANGLE_OF_ATTACK, opt=True, units=units, order=1,
lower=0, upper=max_angle_of_attack, fix_final=True,
fix_initial=False, ref=max_angle_of_attack)

Expand Down Expand Up @@ -1019,7 +1019,7 @@ def _extra_ode_init_kwargs(self):
LandingTouchdownToNoseDown._add_meta_data('max_angle_of_attack', val=10.0, units='deg')

LandingTouchdownToNoseDown._add_initial_guess_meta_data(
InitialGuessPolynomialControl('angle_of_attack'))
InitialGuessPolynomialControl(Dynamic.Vehicle.ANGLE_OF_ATTACK))


@_init_initial_guess_meta_data
Expand Down Expand Up @@ -1155,7 +1155,7 @@ def build_phase(self, aviary_options=None):
opt=False
)

phase.add_parameter('angle_of_attack', val=0.0, opt=False, units='deg')
phase.add_parameter(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=0.0, opt=False, units='deg')

phase.add_timeseries_output(
Dynamic.Vehicle.Propulsion.THRUST_TOTAL,
Expand Down Expand Up @@ -1196,7 +1196,7 @@ def _extra_ode_init_kwargs(self):
LandingNoseDownToStop._add_meta_data('max_velocity', val=100.0, units='ft/s')

LandingNoseDownToStop._add_initial_guess_meta_data(
InitialGuessParameter('angle_of_attack'))
InitialGuessParameter(Dynamic.Vehicle.ANGLE_OF_ATTACK))


class LandingTrajectory:
Expand Down
Loading

0 comments on commit 48c7453

Please sign in to comment.