Skip to content
1 change: 1 addition & 0 deletions aviary/mission/height_energy/ode/test/test_landing_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def setUp(self):

def test_case(self):
do_validation_test(
self,
self.prob,
input_validation_data=detailed_landing_flare,
output_validation_data=detailed_landing_flare,
Expand Down
1 change: 1 addition & 0 deletions aviary/mission/height_energy/ode/test/test_landing_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def test_case(self):
set_aviary_initial_values(prob, aviary_options)

do_validation_test(
self,
prob,
input_validation_data=detailed_landing_flare,
output_validation_data=detailed_landing_flare,
Expand Down
1 change: 1 addition & 0 deletions aviary/mission/height_energy/ode/test/test_range_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def setUp(self):

def test_case1(self):
do_validation_test(
self,
self.prob,
input_validation_data=data,
output_validation_data=data,
Expand Down
2 changes: 2 additions & 0 deletions aviary/mission/height_energy/ode/test/test_takeoff_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def test_case_ground(self):
prob = self._make_prob(climbing=False)

do_validation_test(
self,
prob,
input_validation_data=detailed_takeoff_ground,
output_validation_data=detailed_takeoff_ground,
Expand All @@ -58,6 +59,7 @@ def test_case_climbing(self):
prob = self._make_prob(climbing=True)

do_validation_test(
self,
prob,
input_validation_data=detailed_takeoff_climbing,
output_validation_data=detailed_takeoff_climbing,
Expand Down
2 changes: 2 additions & 0 deletions aviary/mission/height_energy/ode/test/test_takeoff_ode.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def test_case_ground(self):
prob = self._make_prob(climbing=False)

do_validation_test(
self,
prob,
input_validation_data=detailed_takeoff_ground,
output_validation_data=detailed_takeoff_ground,
Expand Down Expand Up @@ -58,6 +59,7 @@ def test_case_climbing(self):
prob = self._make_prob(climbing=True)

do_validation_test(
self,
prob,
input_validation_data=detailed_takeoff_climbing,
output_validation_data=detailed_takeoff_climbing,
Expand Down
1 change: 1 addition & 0 deletions aviary/mission/ode/test/test_altitude_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def setUp(self):

def test_case1(self):
do_validation_test(
self,
self.prob,
input_validation_data=data,
output_validation_data=data,
Expand Down
1 change: 1 addition & 0 deletions aviary/mission/ode/test/test_specific_energy_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def setUp(self):

def test_case1(self):
do_validation_test(
self,
self.prob,
input_validation_data=data,
output_validation_data=data,
Expand Down
22 changes: 10 additions & 12 deletions aviary/mission/two_dof/ode/test/test_accel_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,16 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.VELOCITY_RATE],
np.array([5.51533958, 5.51533958]),
tol,
# 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],
np.array([425.32808399, 425.32808399]),
tol,
# note: this was finite differenced from GASP. The fd value is: np.array([441.6439, 441.6439])
)
# note: values were finite differenced from GASP
# fd values are: VELOCITY_RATE=[5.2353365, 5.2353365], DISTANCE_RATE=[441.6439, 441.6439]
expected_values = {
Dynamic.Mission.VELOCITY_RATE: np.array([5.51533958, 5.51533958]),
Dynamic.Mission.DISTANCE_RATE: np.array([425.32808399, 425.32808399]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand Down
18 changes: 8 additions & 10 deletions aviary/mission/two_dof/ode/test/test_ascent_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,14 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.VELOCITY_RATE],
np.array([2.202965, 2.202965]),
tol,
)
assert_near_equal(
self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE],
np.array([-3.216328, -3.216328]),
tol,
)
expected_values = {
Dynamic.Mission.VELOCITY_RATE: np.array([2.202965, 2.202965]),
Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE: np.array([-3.216328, -3.216328]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand Down
69 changes: 26 additions & 43 deletions aviary/mission/two_dof/ode/test/test_flight_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,28 +40,19 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.ALTITUDE_RATE],
np.array([-39.42713005, -39.42713005]),
tol,
) # note: values from GASP are: np.array([-39.75, -39.75])
assert_near_equal(
self.prob[Dynamic.Mission.DISTANCE_RATE],
np.array([773.70078935, 773.70078935]),
tol,
# note: these values are finite differenced and lose accuracy. Fd values are:np.array([964.4634921, 964.4634921])
)
assert_near_equal(
self.prob['required_lift'],
np.array([147444.41570307, 147444.41570307]),
tol,
# note: values from GASP are: np.array([146288.8, 146288.8]) (estimated based on GASP values)
)
assert_near_equal(
self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE],
np.array([-0.0509151, -0.0509151]),
tol,
) # note: values from GASP are: np.array([-.0513127, -.0513127])
# note: some values from GASP differ slightly due to calculation method differences
# GASP values: ALTITUDE_RATE=[-39.75, -39.75], DISTANCE_RATE=[964.4634921, 964.4634921] (fd),
# required_lift=[146288.8, 146288.8], FLIGHT_PATH_ANGLE=[-.0513127, -.0513127]
expected_values = {
Dynamic.Mission.ALTITUDE_RATE: np.array([-39.42713005, -39.42713005]),
Dynamic.Mission.DISTANCE_RATE: np.array([773.70078935, 773.70078935]),
'required_lift': np.array([147444.41570307, 147444.41570307]),
Dynamic.Mission.FLIGHT_PATH_ANGLE: np.array([-0.0509151, -0.0509151]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand Down Expand Up @@ -131,27 +122,19 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.ALTITUDE_RATE],
np.array([6.24116612, 6.24116612]),
tol,
) # note: values from GASP are: np.array([5.9667, 5.9667])
assert_near_equal(
self.prob[Dynamic.Mission.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])
)
assert_near_equal(
self.prob['required_lift'],
np.array([162662.70954313, 162662.70954313]),
tol,
) # note: values from GASP are: np.array([170316.2, 170316.2])
assert_near_equal(
self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE],
np.array([0.00805627, 0.00805627]),
tol,
) # note: values from GASP are:np.array([.0076794487, .0076794487])
# note: some values from GASP differ slightly due to calculation method differences
# GASP values: ALTITUDE_RATE=[5.9667, 5.9667], DISTANCE_RATE=[799.489, 799.489] (fd),
# required_lift=[170316.2, 170316.2], FLIGHT_PATH_ANGLE=[.0076794487, .0076794487]
expected_values = {
Dynamic.Mission.ALTITUDE_RATE: np.array([6.24116612, 6.24116612]),
Dynamic.Mission.DISTANCE_RATE: np.array([774.679584, 774.679584]),
'required_lift': np.array([162662.70954313, 162662.70954313]),
Dynamic.Mission.FLIGHT_PATH_ANGLE: np.array([0.00805627, 0.00805627]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand Down
56 changes: 24 additions & 32 deletions aviary/mission/two_dof/ode/test/test_flight_path_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,19 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.VELOCITY_RATE],
np.array([-27.10027, -27.10027]),
tol,
)
assert_near_equal(
self.prob[Dynamic.Mission.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)
assert_near_equal(self.prob['load_factor'], np.array([1.883117, 1.883117]), tol)
assert_near_equal(
self.prob[Dynamic.Mission.ALTITUDE_RATE],
np.array([0.841471, 0.841471]),
tol,
)
assert_near_equal(
self.prob[Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE],
np.array([15.36423, 15.36423]),
tol,
)
expected_values = {
Dynamic.Mission.VELOCITY_RATE: np.array([-27.10027, -27.10027]),
Dynamic.Mission.DISTANCE_RATE: np.array([0.5403023, 0.5403023]),
'normal_force': np.array([-0.0174524, -0.0174524]),
'fuselage_pitch': np.array([58.2958, 58.2958]),
'load_factor': np.array([1.883117, 1.883117]),
Dynamic.Mission.ALTITUDE_RATE: np.array([0.841471, 0.841471]),
Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE: np.array([15.36423, 15.36423]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand All @@ -56,17 +48,17 @@ def test_case2(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.VELOCITY_RATE],
np.array([-27.09537, -27.09537]),
tol,
)
assert_near_equal(
self.prob[Dynamic.Mission.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)
assert_near_equal(self.prob['load_factor'], np.array([1.850816, 1.850816]), tol)
expected_values = {
Dynamic.Mission.VELOCITY_RATE: np.array([-27.09537, -27.09537]),
Dynamic.Mission.DISTANCE_RATE: np.array([0.5403023, 0.5403023]),
'normal_force': np.array([-0.0, -0.0]),
'fuselage_pitch': np.array([57.29578, 57.29578]),
'load_factor': np.array([1.850816, 1.850816]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)
Expand Down
25 changes: 13 additions & 12 deletions aviary/mission/two_dof/ode/test/test_groundroll_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,19 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob[Dynamic.Mission.VELOCITY_RATE],
np.array([1.5597, 1.5597]),
tol,
)
assert_near_equal(
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['normal_force'], np.array([175200.0, 175200.0]), tol)
assert_near_equal(self.prob['fuselage_pitch'], np.array([0.0, 0.0]), tol)
expected_values = {
Dynamic.Mission.VELOCITY_RATE: np.array([1.5597, 1.5597]),
Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE: np.array([0.0, 0.0]),
Dynamic.Mission.ALTITUDE_RATE: np.array([0.0, 0.0]),
Dynamic.Mission.DISTANCE_RATE: np.array([10.0, 10.0]),
'normal_force': np.array([175200.0, 175200.0]),
'fuselage_pitch': np.array([0.0, 0.0]),
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-12, rtol=1e-12)

Expand Down
70 changes: 31 additions & 39 deletions aviary/mission/two_dof/ode/test/test_landing_eom.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,36 +68,26 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob.get_val(Mission.Landing.INITIAL_VELOCITY, units='kn'), 142.783, tol
) # note: actual GASP value is: 142.74
assert_near_equal(
self.prob.get_val(Mission.Landing.STALL_VELOCITY, units='kn'), 109.8331, tol
) # note: EAS in GASP, although at this altitude they are nearly identical. actual GASP value is 109.73
assert_near_equal(
self.prob.get_val('TAS_touchdown', units='kn'), 126.3081, tol
) # note: actual GASP value is: 126.27
assert_near_equal(
self.prob.get_val('density_ratio', units='unitless'), 1.0, tol
) # note: calculated from GASP glide speed values as: .998739
assert_near_equal(
self.prob.get_val('wing_loading_land', units='lbf/ft**2'), 120.61519375, tol
) # note: actual GASP value is: 120.61
assert_near_equal(
self.prob.get_val('theta', units='deg'), 3.56857, tol
) # note: actual GASP value is: 3.57
assert_near_equal(
self.prob.get_val('glide_distance', units='ft'), 801.7444, tol
) # note: actual GASP value is: 802
assert_near_equal(
self.prob.get_val('tr_distance', units='ft'), 166.5303, tol
) # note: actual GASP value is: 167
assert_near_equal(
self.prob.get_val('delay_distance', units='ft'), 213.184, tol
) # note: actual GASP value is: 213
assert_near_equal(
self.prob.get_val('flare_alt', units='ft'), 20.73407, tol
) # note: actual GASP value is: 20.8
# note: actual GASP values differ slightly
# GASP values: INITIAL_VELOCITY=142.74, STALL_VELOCITY=109.73, TAS_touchdown=126.27,
# density_ratio=.998739, wing_loading_land=120.61, theta=3.57,
# glide_distance=802, tr_distance=167, delay_distance=213, flare_alt=20.8
expected_values = {
(Mission.Landing.INITIAL_VELOCITY, 'kn'): 142.783,
(Mission.Landing.STALL_VELOCITY, 'kn'): 109.8331,
('TAS_touchdown', 'kn'): 126.3081,
('density_ratio', 'unitless'): 1.0,
('wing_loading_land', 'lbf/ft**2'): 120.61519375,
('theta', 'deg'): 3.56857,
('glide_distance', 'ft'): 801.7444,
('tr_distance', 'ft'): 166.5303,
('delay_distance', 'ft'): 213.184,
('flare_alt', 'ft'): 20.73407,
}

for (var_name, units), expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob.get_val(var_name, units=units), expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=1e-10, rtol=1e-12)
Expand Down Expand Up @@ -172,15 +162,17 @@ def test_case1(self):
tol = 1e-6
self.prob.run_model()

assert_near_equal(
self.prob['ground_roll_distance'], 2406.43116212, tol
) # actual GASP value is: 1798
assert_near_equal(
self.prob[Mission.Landing.GROUND_DISTANCE], 3588.43116212, tol
) # actual GASP value is: 2980
assert_near_equal(
self.prob['average_acceleration'], 0.29308129, tol
) # actual GASP value is: 0.3932
# note: actual GASP values differ: ground_roll_distance=1798, GROUND_DISTANCE=2980,
# average_acceleration=0.3932
expected_values = {
'ground_roll_distance': 2406.43116212,
Mission.Landing.GROUND_DISTANCE: 3588.43116212,
'average_acceleration': 0.29308129,
}

for var_name, expected in expected_values.items():
with self.subTest(var=var_name):
assert_near_equal(self.prob[var_name], expected, tol)

partial_data = self.prob.check_partials(out_stream=None, method='cs')
assert_check_partials(partial_data, atol=5e-12, rtol=1e-12)
Expand Down
Loading
Loading