diff --git a/aviary/core/aviary_group.py b/aviary/core/aviary_group.py index 9a9544a3af..b4999e7fec 100644 --- a/aviary/core/aviary_group.py +++ b/aviary/core/aviary_group.py @@ -295,7 +295,7 @@ def load_inputs( ## LOAD PHASE_INFO ### # if phase info is a file, load it if isinstance(phase_info, str) or isinstance(phase_info, Path): - phase_info_path = get_path(phase_info) + phase_info_path = get_path(phase_info, verbosity) spec = spec_from_file_location('phase_info_file', str(phase_info_path)) phase_info_file = module_from_spec(spec) sys.modules['phase_info_file'] = phase_info_file diff --git a/aviary/core/aviary_problem.py b/aviary/core/aviary_problem.py index e8badbf646..c03c32afdf 100644 --- a/aviary/core/aviary_problem.py +++ b/aviary/core/aviary_problem.py @@ -2156,7 +2156,7 @@ def reload_aviary_problem( # Initialize a new aviary problem and aviary_input data structure prob = AviaryProblem() - filename = get_path(filename) + filename = get_path(filename, verbosity) aviary_inputs = _read_sizing_json(filename, metadata, verbosity) diff --git a/aviary/docs/user_guide_unreviewed/aviary_commands.ipynb b/aviary/docs/user_guide_unreviewed/aviary_commands.ipynb index 77fec33d17..459b0f1778 100644 --- a/aviary/docs/user_guide_unreviewed/aviary_commands.ipynb +++ b/aviary/docs/user_guide_unreviewed/aviary_commands.ipynb @@ -140,7 +140,9 @@ "{glue:md}`aviary run_mission models/aircraft/small_single_aisle/small_single_aisle_GASP.csv` in\n", "{glue:md}`aviary/models/aircraft/small_single_aisle`\n", "\n", - "SNOPT is the default optimizer, but IPOPT is available as well." + "SNOPT is the default optimizer, but IPOPT is available as well.\n", + "\n", + "Note: Do not use the test models in `validation_cases/validation_data/test_models`. They are for testing purpose only." ] }, { diff --git a/aviary/interface/run_aviary.py b/aviary/interface/run_aviary.py index 9f09252895..9171cbb1fa 100644 --- a/aviary/interface/run_aviary.py +++ b/aviary/interface/run_aviary.py @@ -144,7 +144,7 @@ def run_aviary_cmd( } if isinstance(phase_info, str): - phase_info_path = get_path(phase_info) + phase_info_path = get_path(phase_info, verbosity) spec = spec_from_file_location('phase_info_file', str(phase_info_path)) phase_info_file = module_from_spec(spec) sys.modules['phase_info_file'] = phase_info_file diff --git a/aviary/interface/test/test_interface_bugs.py b/aviary/interface/test/test_interface_bugs.py index 91753da0bc..925c9fe0f1 100644 --- a/aviary/interface/test/test_interface_bugs.py +++ b/aviary/interface/test/test_interface_bugs.py @@ -10,13 +10,14 @@ ) from aviary.subsystems.subsystem_builder import SubsystemBuilder from aviary.utils.functions import get_aviary_resource_path +from aviary.variable_info.functions import add_aviary_input, add_aviary_output from aviary.variable_info.variables import Aircraft class WingWeightSubsys(om.ExplicitComponent): def setup(self): - self.add_input(Aircraft.Engine.MASS, 1.0, units='lbm') - self.add_output(Aircraft.Canard.ASPECT_RATIO, 1.0, units='unitless') + add_aviary_input(self, Aircraft.Engine.MASS, 1.0, units='lbm') + add_aviary_output(self, Aircraft.Canard.ASPECT_RATIO, 1.0, units='unitless') self.add_output('Tail', 1.0, units='unitless') self.declare_partials(Aircraft.Canard.ASPECT_RATIO, Aircraft.Engine.MASS, val=2.0) diff --git a/aviary/interface/test/test_shape_by_conn.py b/aviary/interface/test/test_shape_by_conn.py index dbed568a14..c90df0fd42 100644 --- a/aviary/interface/test/test_shape_by_conn.py +++ b/aviary/interface/test/test_shape_by_conn.py @@ -108,7 +108,9 @@ def test_shape_bug_two(self): class PostComponent(om.ExplicitComponent): def setup(self): - self.add_input(Aircraft.Design.DRAG_POLAR, shape_by_conn=True, units='unitless') + add_aviary_input( + self, Aircraft.Design.DRAG_POLAR, shape_by_conn=True, units='unitless' + ) add_aviary_input( self, Aircraft.Design.LIFT_POLAR, shape_by_conn=True, units='unitless' ) diff --git a/aviary/mission/energy_state/ode/landing_eom.py b/aviary/mission/energy_state/ode/landing_eom.py index 793eb9034f..c619a88e13 100644 --- a/aviary/mission/energy_state/ode/landing_eom.py +++ b/aviary/mission/energy_state/ode/landing_eom.py @@ -164,7 +164,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(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad') + add_aviary_input(self, 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') @@ -322,7 +322,7 @@ def setup(self): add_aviary_input(self, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, val=np.ones(nn), units='N') add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N') - self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad') + add_aviary_input(self, 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') diff --git a/aviary/mission/energy_state/ode/range_rate.py b/aviary/mission/energy_state/ode/range_rate.py index c3e64ced30..dfee0e2037 100644 --- a/aviary/mission/energy_state/ode/range_rate.py +++ b/aviary/mission/energy_state/ode/range_rate.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_input, add_aviary_output from aviary.variable_info.variables import Dynamic @@ -16,19 +17,22 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - self.add_input( + add_aviary_input( + self, Dynamic.Mission.ALTITUDE_RATE, val=np.ones(nn), desc='climb rate', units='m/s', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.ones(nn), desc='current velocity', units='m/s', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.DISTANCE_RATE, val=np.ones(nn), desc='current horizontal velocity (assumed no wind)', diff --git a/aviary/mission/energy_state/ode/required_thrust.py b/aviary/mission/energy_state/ode/required_thrust.py index 82b6b39a43..9ebf904782 100644 --- a/aviary/mission/energy_state/ode/required_thrust.py +++ b/aviary/mission/energy_state/ode/required_thrust.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_input from aviary.constants import GRAV_METRIC_FLOPS as gravity from aviary.variable_info.variables import Dynamic @@ -17,27 +18,30 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - self.add_input(Dynamic.Vehicle.DRAG, val=np.zeros(nn), units='N', desc='drag force') - self.add_input( + add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.zeros(nn), units='N', desc='drag force') + add_aviary_input( + self, Dynamic.Mission.ALTITUDE_RATE, val=np.zeros(nn), units='m/s', desc='rate of change of altitude', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='m/s', desc=Dynamic.Mission.VELOCITY, ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY_RATE, val=np.zeros(nn), units='m/s**2', desc='rate of change of velocity', ) - self.add_input( - Dynamic.Vehicle.MASS, val=np.zeros(nn), units='kg', desc='mass of the aircraft' + add_aviary_input( + self, Dynamic.Vehicle.MASS, val=np.zeros(nn), units='kg', desc='mass of the aircraft' ) self.add_output('thrust_required', val=np.zeros(nn), units='N', desc='required thrust') diff --git a/aviary/mission/energy_state/ode/takeoff_eom.py b/aviary/mission/energy_state/ode/takeoff_eom.py index 6a466cc8b7..f67054c210 100644 --- a/aviary/mission/energy_state/ode/takeoff_eom.py +++ b/aviary/mission/energy_state/ode/takeoff_eom.py @@ -544,7 +544,7 @@ def setup(self): add_aviary_input(self, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, val=np.ones(nn), units='N') add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N') - self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad') + add_aviary_input(self, 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') @@ -770,7 +770,7 @@ def setup(self): add_aviary_input(self, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, val=np.ones(nn), units='N') add_aviary_input(self, Dynamic.Vehicle.DRAG, val=np.ones(nn), units='N') - self.add_input(Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.zeros(nn), units='rad') + add_aviary_input(self, 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') diff --git a/aviary/mission/energy_state/ode/test/test_landing_eom.py b/aviary/mission/energy_state/ode/test/test_landing_eom.py index 5cac19dc98..1ca233014f 100644 --- a/aviary/mission/energy_state/ode/test/test_landing_eom.py +++ b/aviary/mission/energy_state/ode/test/test_landing_eom.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.landing_eom import ( FlareEOM, @@ -21,6 +22,7 @@ from aviary.variable_info.variables import Dynamic +@use_tempdirs class FlareEOMTest(unittest.TestCase): """Test against data of detailed_landing_flare from models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py.""" @@ -201,7 +203,4 @@ def test_GroundSumForces(self): if __name__ == '__main__': - # unittest.main() - test = FlareEOMTest() - test.setUp() - test.test_case() + unittest.main() diff --git a/aviary/mission/energy_state/ode/test/test_landing_ode.py b/aviary/mission/energy_state/ode/test/test_landing_ode.py index 74274e222b..8c536db882 100644 --- a/aviary/mission/energy_state/ode/test/test_landing_ode.py +++ b/aviary/mission/energy_state/ode/test/test_landing_ode.py @@ -1,6 +1,7 @@ import unittest import openmdao.api as om +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.landing_ode import FlareODE from aviary.validation_cases.validation_data.test_data.advanced_single_aisle_data import ( @@ -18,6 +19,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class FlareODETest(unittest.TestCase): """Test against data of detailed_landing_flare from models/aircraft/advanced_single_aisle/advanced_single_aisle_data.py.""" diff --git a/aviary/mission/energy_state/ode/test/test_mission_eom.py b/aviary/mission/energy_state/ode/test/test_mission_eom.py index e58169edbe..c2ba239c94 100644 --- a/aviary/mission/energy_state/ode/test/test_mission_eom.py +++ b/aviary/mission/energy_state/ode/test/test_mission_eom.py @@ -3,12 +3,15 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs + from aviary.mission.energy_state.ode.mission_EOM import MissionEOM from aviary.utils.test_utils.variable_test import assert_match_varnames from aviary.variable_info.variables import Dynamic +@use_tempdirs class MissionEOMTest(unittest.TestCase): """Test energy-method equations of motion.""" diff --git a/aviary/mission/energy_state/ode/test/test_range_rate.py b/aviary/mission/energy_state/ode/test/test_range_rate.py index 82275e669a..4094e0c1f4 100644 --- a/aviary/mission/energy_state/ode/test/test_range_rate.py +++ b/aviary/mission/energy_state/ode/test/test_range_rate.py @@ -1,6 +1,7 @@ import unittest import openmdao.api as om +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.range_rate import RangeRate from aviary.utils.test_utils.variable_test import assert_match_varnames @@ -9,6 +10,7 @@ from aviary.variable_info.variables import Dynamic +@use_tempdirs class RangeRateTest(unittest.TestCase): def setUp(self): """Test using data from validation_cases/validation_data/flops_data/full_mission_test_data.py.""" diff --git a/aviary/mission/energy_state/ode/test/test_required_thrust.py b/aviary/mission/energy_state/ode/test/test_required_thrust.py index e0366a51d2..12d15dfb3a 100644 --- a/aviary/mission/energy_state/ode/test/test_required_thrust.py +++ b/aviary/mission/energy_state/ode/test/test_required_thrust.py @@ -3,12 +3,14 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.required_thrust import RequiredThrust from aviary.utils.test_utils.variable_test import assert_match_varnames from aviary.variable_info.variables import Dynamic +@use_tempdirs class RequiredThrustTest(unittest.TestCase): """Test required thrust.""" diff --git a/aviary/mission/energy_state/ode/test/test_takeoff_eom.py b/aviary/mission/energy_state/ode/test/test_takeoff_eom.py index 46f4ef73b1..aeaadea167 100644 --- a/aviary/mission/energy_state/ode/test/test_takeoff_eom.py +++ b/aviary/mission/energy_state/ode/test/test_takeoff_eom.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.takeoff_eom import ( Accelerations, @@ -27,6 +28,7 @@ inputs.set_val(Aircraft.Engine.NUM_ENGINES, np.array([2])) +@use_tempdirs class TakeoffEOMTest(unittest.TestCase): """Test detailed takeoff equation of motion.""" diff --git a/aviary/mission/energy_state/ode/test/test_takeoff_ode.py b/aviary/mission/energy_state/ode/test/test_takeoff_ode.py index c757c8a7fb..21fc745cf2 100644 --- a/aviary/mission/energy_state/ode/test/test_takeoff_ode.py +++ b/aviary/mission/energy_state/ode/test/test_takeoff_ode.py @@ -2,6 +2,7 @@ from copy import deepcopy import openmdao.api as om +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.ode.takeoff_ode import TakeoffODE from aviary.validation_cases.validation_data.test_data.advanced_single_aisle_data import ( @@ -22,6 +23,7 @@ takeoff_subsystem_options = deepcopy(takeoff_subsystem_options) +@use_tempdirs class TakeoffODETest(unittest.TestCase): """Test detailed takeoff ODE.""" diff --git a/aviary/mission/energy_state/phases/simplified_takeoff.py b/aviary/mission/energy_state/phases/simplified_takeoff.py index 4671f5a1d1..041bba461e 100644 --- a/aviary/mission/energy_state/phases/simplified_takeoff.py +++ b/aviary/mission/energy_state/phases/simplified_takeoff.py @@ -21,7 +21,8 @@ def setup(self): desc='mass of the aircraft', ) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.DENSITY, val=1.225, units='kg/m**3', @@ -105,7 +106,8 @@ def setup(self): add_aviary_input(self, Mission.Takeoff.FUEL_MASS, val=10.0e3) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.DENSITY, val=1.225, units='kg/m**3', diff --git a/aviary/mission/energy_state/phases/test/test_building_landing.py b/aviary/mission/energy_state/phases/test/test_building_landing.py index 0c55a5d979..015e7968db 100644 --- a/aviary/mission/energy_state/phases/test/test_building_landing.py +++ b/aviary/mission/energy_state/phases/test/test_building_landing.py @@ -2,11 +2,13 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.phases.build_landing import Landing from aviary.variable_info.variables import Mission +@use_tempdirs class LandingPhaseTest(unittest.TestCase): """Test landing phase builder.""" diff --git a/aviary/mission/energy_state/phases/test/test_building_takeoff.py b/aviary/mission/energy_state/phases/test/test_building_takeoff.py index 864ed45f6d..78bd640938 100644 --- a/aviary/mission/energy_state/phases/test/test_building_takeoff.py +++ b/aviary/mission/energy_state/phases/test/test_building_takeoff.py @@ -2,11 +2,13 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.energy_state.phases.build_takeoff import Takeoff from aviary.variable_info.variables import Aircraft, Mission +@use_tempdirs class TakeoffPhaseTest(unittest.TestCase): """Test takeoff phase builder.""" diff --git a/aviary/mission/energy_state/phases/test/test_simplified_landing.py b/aviary/mission/energy_state/phases/test/test_simplified_landing.py index 811f2cd42c..2620c1578f 100644 --- a/aviary/mission/energy_state/phases/test/test_simplified_landing.py +++ b/aviary/mission/energy_state/phases/test/test_simplified_landing.py @@ -2,12 +2,14 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary import constants from aviary.mission.energy_state.phases.simplified_landing import LandingCalc, LandingGroup from aviary.variable_info.variables import Aircraft, Dynamic, Mission +@use_tempdirs class LandingCalcTest(unittest.TestCase): """Test computation in LandingCalc class (the simplified landing).""" @@ -77,6 +79,7 @@ def test_case1(self): assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) +@use_tempdirs class LandingGroupTest(unittest.TestCase): """Test the computation of LandingGroup.""" diff --git a/aviary/mission/energy_state/phases/test/test_simplified_takeoff.py b/aviary/mission/energy_state/phases/test/test_simplified_takeoff.py index 487a8e4086..4f8a0dcbd0 100644 --- a/aviary/mission/energy_state/phases/test/test_simplified_takeoff.py +++ b/aviary/mission/energy_state/phases/test/test_simplified_takeoff.py @@ -8,6 +8,7 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary import constants from aviary.mission.energy_state.phases.simplified_takeoff import ( @@ -18,6 +19,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic, Mission +@use_tempdirs class StallSpeedTest(unittest.TestCase): """Test computation in StallSpeed class.""" @@ -78,6 +80,7 @@ def test_case1(self): assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) +@use_tempdirs class FinalConditionsTest(unittest.TestCase): """Test final conditions computation in FinalTakeoffConditions class.""" @@ -154,6 +157,7 @@ def test_case1(self): assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) +@use_tempdirs class TakeoffGroupTest(unittest.TestCase): """Test computation in TakeoffGroup.""" diff --git a/aviary/mission/ode/altitude_rate.py b/aviary/mission/ode/altitude_rate.py index f5aee021b7..3de5842bb5 100644 --- a/aviary/mission/ode/altitude_rate.py +++ b/aviary/mission/ode/altitude_rate.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_input, add_aviary_output import aviary.constants as constants from aviary.variable_info.variables import Dynamic @@ -16,25 +17,29 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - self.add_input( + add_aviary_input( + self, Dynamic.Mission.SPECIFIC_ENERGY_RATE, val=np.ones(nn), desc='current specific power', units='m/s', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY_RATE, val=np.ones(nn), desc='current acceleration', units='m/s**2', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.ones(nn), desc='current velocity', units='m/s', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.ALTITUDE_RATE, val=np.ones(nn), desc='current climb rate', diff --git a/aviary/mission/ode/specific_energy_rate.py b/aviary/mission/ode/specific_energy_rate.py index 95d12ad54b..9eaff2412f 100644 --- a/aviary/mission/ode/specific_energy_rate.py +++ b/aviary/mission/ode/specific_energy_rate.py @@ -2,6 +2,7 @@ import openmdao.api as om from aviary.constants import GRAV_METRIC_FLOPS as gravity +from aviary.variable_info.functions import add_aviary_input, add_aviary_output from aviary.variable_info.variables import Dynamic @@ -17,21 +18,28 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.ones(nn), desc='current velocity', units='m/s', ) - self.add_input(Dynamic.Vehicle.MASS, val=np.ones(nn), desc='current mass', units='kg') - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.MASS, val=np.ones(nn), desc='current mass', units='kg' + ) + add_aviary_input( + self, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, val=np.ones(nn), desc='current thrust', units='N', ) - self.add_input(Dynamic.Vehicle.DRAG, val=np.ones(nn), desc='current drag', units='N') - self.add_output( + add_aviary_input( + self, Dynamic.Vehicle.DRAG, val=np.ones(nn), desc='current drag', units='N' + ) + add_aviary_output( + self, Dynamic.Mission.SPECIFIC_ENERGY_RATE, val=np.ones(nn), desc='current specific power', diff --git a/aviary/mission/ode/test/test_altitude_rate.py b/aviary/mission/ode/test/test_altitude_rate.py index cd2218bdca..bcfd77455d 100644 --- a/aviary/mission/ode/test/test_altitude_rate.py +++ b/aviary/mission/ode/test/test_altitude_rate.py @@ -1,6 +1,7 @@ import unittest import openmdao.api as om +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.ode.altitude_rate import AltitudeRate from aviary.utils.test_utils.variable_test import assert_match_varnames @@ -9,6 +10,7 @@ from aviary.variable_info.variables import Dynamic +@use_tempdirs class AltitudeRateTest(unittest.TestCase): def setUp(self): prob = self.prob = om.Problem() diff --git a/aviary/mission/ode/test/test_specific_energy_rate.py b/aviary/mission/ode/test/test_specific_energy_rate.py index 4959aa9316..3a3e4895e9 100644 --- a/aviary/mission/ode/test/test_specific_energy_rate.py +++ b/aviary/mission/ode/test/test_specific_energy_rate.py @@ -1,6 +1,7 @@ import unittest import openmdao.api as om +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.ode.specific_energy_rate import SpecificEnergyRate from aviary.utils.test_utils.variable_test import assert_match_varnames @@ -9,6 +10,7 @@ from aviary.variable_info.variables import Dynamic +@use_tempdirs class SpecificEnergyRateTest(unittest.TestCase): def setUp(self): prob = self.prob = om.Problem() diff --git a/aviary/mission/solved_two_dof/ode/gamma_comp.py b/aviary/mission/solved_two_dof/ode/gamma_comp.py index 1d93ab8303..986bebe3ec 100644 --- a/aviary/mission/solved_two_dof/ode/gamma_comp.py +++ b/aviary/mission/solved_two_dof/ode/gamma_comp.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_output from aviary.variable_info.variables import Dynamic @@ -27,7 +28,8 @@ def setup(self): desc='second derivative of altitude wrt range', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.FLIGHT_PATH_ANGLE, shape=nn, units='rad', diff --git a/aviary/mission/solved_two_dof/ode/groundroll_eom.py b/aviary/mission/solved_two_dof/ode/groundroll_eom.py index c19d33e764..3de99af335 100644 --- a/aviary/mission/solved_two_dof/ode/groundroll_eom.py +++ b/aviary/mission/solved_two_dof/ode/groundroll_eom.py @@ -14,7 +14,6 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - arange = np.arange(nn) add_aviary_input(self, Dynamic.Vehicle.MASS, val=np.ones(nn), units='lbm') add_aviary_input( @@ -68,6 +67,13 @@ def setup(self): add_aviary_output(self, Dynamic.Mission.DISTANCE_RATE, val=np.ones(nn), 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') + self.add_output( + 'angle_of_attack_rate', val=np.ones(nn), desc='angle of attack rate', units='deg/s' + ) + + def setup_partials(self): + nn = self.options['num_nodes'] + arange = np.arange(nn) self.declare_partials(Dynamic.Mission.FLIGHT_PATH_ANGLE_RATE, '*') self.declare_partials( @@ -130,10 +136,6 @@ def setup(self): ) self.declare_partials('fuselage_pitch', Aircraft.Wing.INCIDENCE, val=-1) - self.add_output( - 'angle_of_attack_rate', val=np.ones(nn), desc='angle of attack rate', units='deg/s' - ) - self.declare_partials('angle_of_attack_rate', ['*']) def compute(self, inputs, outputs): diff --git a/aviary/mission/solved_two_dof/ode/test/test_gamma_comp.py b/aviary/mission/solved_two_dof/ode/test/test_gamma_comp.py index 60fc35c960..cd90a9940d 100644 --- a/aviary/mission/solved_two_dof/ode/test/test_gamma_comp.py +++ b/aviary/mission/solved_two_dof/ode/test/test_gamma_comp.py @@ -3,12 +3,14 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.solved_two_dof.ode.gamma_comp import GammaComp from aviary.mission.solved_two_dof.ode.unsteady_solved_eom import UnsteadySolvedEOM from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class TestUnsteadyFlightEOM(unittest.TestCase): """Test 2-degrees-of-freedom equations of motion for unsteady flight.""" diff --git a/aviary/mission/solved_two_dof/ode/test/test_groundroll_ode.py b/aviary/mission/solved_two_dof/ode/test/test_groundroll_ode.py index 9aeef57a52..7d24c1a84e 100644 --- a/aviary/mission/solved_two_dof/ode/test/test_groundroll_ode.py +++ b/aviary/mission/solved_two_dof/ode/test/test_groundroll_ode.py @@ -2,6 +2,7 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.solved_two_dof.ode.groundroll_ode import GroundrollODE from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -13,6 +14,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class GroundrollODETestCase(unittest.TestCase): """Test groundroll ODE.""" diff --git a/aviary/mission/solved_two_dof/ode/test/test_unsteady_alpha_thrust_iter_group.py b/aviary/mission/solved_two_dof/ode/test/test_unsteady_alpha_thrust_iter_group.py index 468e20e189..43bde77a85 100644 --- a/aviary/mission/solved_two_dof/ode/test/test_unsteady_alpha_thrust_iter_group.py +++ b/aviary/mission/solved_two_dof/ode/test/test_unsteady_alpha_thrust_iter_group.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.constants import GRAV_ENGLISH_LBM from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -19,6 +20,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class TestUnsteadyAlphaThrustIterGroup(unittest.TestCase): """Test the UnsteadyControlIterGroup.""" diff --git a/aviary/mission/solved_two_dof/ode/test/test_unsteady_flight_conditions.py b/aviary/mission/solved_two_dof/ode/test/test_unsteady_flight_conditions.py index a725708b09..682a6a01cd 100644 --- a/aviary/mission/solved_two_dof/ode/test/test_unsteady_flight_conditions.py +++ b/aviary/mission/solved_two_dof/ode/test/test_unsteady_flight_conditions.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.constants import RHO_SEA_LEVEL_METRIC from aviary.mission.solved_two_dof.ode.unsteady_solved_flight_conditions import ( @@ -13,6 +14,7 @@ from aviary.variable_info.variables import Dynamic +@use_tempdirs class TestUnsteadyFlightConditions(unittest.TestCase): """Unit test for UnsteadySolvedFlightConditions.""" diff --git a/aviary/mission/solved_two_dof/ode/test/test_unsteady_solved_ode.py b/aviary/mission/solved_two_dof/ode/test/test_unsteady_solved_ode.py index f2cb556ecf..c86b1a2ccb 100644 --- a/aviary/mission/solved_two_dof/ode/test/test_unsteady_solved_ode.py +++ b/aviary/mission/solved_two_dof/ode/test/test_unsteady_solved_ode.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.constants import GRAV_ENGLISH_LBM from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -15,6 +16,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class TestUnsteadySolvedODE(unittest.TestCase): """Test the unsteady solved ODE in steady level flight.""" diff --git a/aviary/mission/solved_two_dof/ode/unsteady_solved_eom.py b/aviary/mission/solved_two_dof/ode/unsteady_solved_eom.py index 997b9e4323..1c216e700e 100644 --- a/aviary/mission/solved_two_dof/ode/unsteady_solved_eom.py +++ b/aviary/mission/solved_two_dof/ode/unsteady_solved_eom.py @@ -36,7 +36,9 @@ def setup(self): # Inputs - self.add_input(Dynamic.Mission.VELOCITY, shape=nn, desc='true air speed', units='m/s') + add_aviary_input( + self, Dynamic.Mission.VELOCITY, shape=nn, desc='true air speed', units='m/s' + ) # TODO: This should probably be declared in Newtons, but the weight variable # is really a mass. This should be resolved with an adapter component that diff --git a/aviary/mission/solved_two_dof/ode/unsteady_solved_flight_conditions.py b/aviary/mission/solved_two_dof/ode/unsteady_solved_flight_conditions.py index 1536043ca9..ed2eb3bde1 100644 --- a/aviary/mission/solved_two_dof/ode/unsteady_solved_flight_conditions.py +++ b/aviary/mission/solved_two_dof/ode/unsteady_solved_flight_conditions.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_input, add_aviary_output from aviary import constants from aviary.variable_info.enums import SpeedType @@ -65,20 +66,23 @@ def setup(self): ground_roll = self.options['ground_roll'] ar = np.arange(self.options['num_nodes']) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.DENSITY, val=np.zeros(nn), units='kg/m**3', desc='density of air', ) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.SPEED_OF_SOUND, val=np.zeros(nn), units='m/s', desc='speed of sound', ) - self.add_output( + add_aviary_output( + self, Dynamic.Atmosphere.DYNAMIC_PRESSURE, val=np.zeros(nn), units='N/m**2', @@ -93,22 +97,17 @@ def setup(self): ) if not ground_roll: - self.add_input( + add_aviary_input( + self, Dynamic.Mission.FLIGHT_PATH_ANGLE, shape=nn, units='rad', desc='flight path angle', ) - self.declare_partials( - of='dTAS_dt_approx', - wrt=[Dynamic.Mission.FLIGHT_PATH_ANGLE], - rows=ar, - cols=ar, - ) - if in_type is SpeedType.TAS: - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='m/s', @@ -128,36 +127,14 @@ def setup(self): units='m/s', desc='equivalent air speed', ) - self.add_output( + add_aviary_output( + self, Dynamic.Atmosphere.MACH, val=np.zeros(nn), units='unitless', desc='Mach number', ) - self.declare_partials( - of=Dynamic.Atmosphere.DYNAMIC_PRESSURE, - wrt=[Dynamic.Atmosphere.DENSITY, Dynamic.Mission.VELOCITY], - rows=ar, - cols=ar, - ) - self.declare_partials( - of=Dynamic.Atmosphere.MACH, - wrt=[Dynamic.Atmosphere.SPEED_OF_SOUND, Dynamic.Mission.VELOCITY], - rows=ar, - cols=ar, - ) - self.declare_partials( - of='EAS', - wrt=[Dynamic.Mission.VELOCITY, Dynamic.Atmosphere.DENSITY], - rows=ar, - cols=ar, - ) - self.declare_partials(of='dTAS_dt_approx', wrt=['dTAS_dr'], rows=ar, cols=ar) - self.declare_partials( - of='dTAS_dt_approx', wrt=[Dynamic.Mission.VELOCITY], rows=ar, cols=ar - ) - elif in_type is SpeedType.EAS: self.add_input( 'EAS', @@ -178,50 +155,24 @@ def setup(self): desc='change in air density per unit altitude', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='m/s', desc='true air speed', ) - self.add_output( + add_aviary_output( + self, Dynamic.Atmosphere.MACH, val=np.zeros(nn), units='unitless', desc='Mach number', ) - self.declare_partials( - of=Dynamic.Atmosphere.DYNAMIC_PRESSURE, - wrt=[Dynamic.Atmosphere.DENSITY, 'EAS'], - rows=ar, - cols=ar, - ) - self.declare_partials( - of=Dynamic.Atmosphere.MACH, - wrt=[ - Dynamic.Atmosphere.SPEED_OF_SOUND, - 'EAS', - Dynamic.Atmosphere.DENSITY, - ], - rows=ar, - cols=ar, - ) - self.declare_partials( - of=Dynamic.Mission.VELOCITY, - wrt=[Dynamic.Atmosphere.DENSITY, 'EAS'], - rows=ar, - cols=ar, - ) - self.declare_partials( - of='dTAS_dt_approx', - wrt=['drho_dh', Dynamic.Atmosphere.DENSITY, 'EAS', 'dEAS_dr'], - rows=ar, - cols=ar, - ) - else: - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.MACH, val=np.zeros(nn), units='unitless', @@ -246,13 +197,83 @@ def setup(self): units='m/s', desc='equivalent air speed', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='m/s', desc='true air speed', ) + def setup_partials(self): + nn = self.options['num_nodes'] + in_type = self.options['input_speed_type'] + ground_roll = self.options['ground_roll'] + ar = np.arange(self.options['num_nodes']) + + if not ground_roll: + self.declare_partials( + of='dTAS_dt_approx', + wrt=[Dynamic.Mission.FLIGHT_PATH_ANGLE], + rows=ar, + cols=ar, + ) + + if in_type is SpeedType.TAS: + self.declare_partials( + of=Dynamic.Atmosphere.DYNAMIC_PRESSURE, + wrt=[Dynamic.Atmosphere.DENSITY, Dynamic.Mission.VELOCITY], + rows=ar, + cols=ar, + ) + self.declare_partials( + of=Dynamic.Atmosphere.MACH, + wrt=[Dynamic.Atmosphere.SPEED_OF_SOUND, Dynamic.Mission.VELOCITY], + rows=ar, + cols=ar, + ) + self.declare_partials( + of='EAS', + wrt=[Dynamic.Mission.VELOCITY, Dynamic.Atmosphere.DENSITY], + rows=ar, + cols=ar, + ) + self.declare_partials(of='dTAS_dt_approx', wrt=['dTAS_dr'], rows=ar, cols=ar) + self.declare_partials( + of='dTAS_dt_approx', wrt=[Dynamic.Mission.VELOCITY], rows=ar, cols=ar + ) + + elif in_type is SpeedType.EAS: + self.declare_partials( + of=Dynamic.Atmosphere.DYNAMIC_PRESSURE, + wrt=[Dynamic.Atmosphere.DENSITY, 'EAS'], + rows=ar, + cols=ar, + ) + self.declare_partials( + of=Dynamic.Atmosphere.MACH, + wrt=[ + Dynamic.Atmosphere.SPEED_OF_SOUND, + 'EAS', + Dynamic.Atmosphere.DENSITY, + ], + rows=ar, + cols=ar, + ) + self.declare_partials( + of=Dynamic.Mission.VELOCITY, + wrt=[Dynamic.Atmosphere.DENSITY, 'EAS'], + rows=ar, + cols=ar, + ) + self.declare_partials( + of='dTAS_dt_approx', + wrt=['drho_dh', Dynamic.Atmosphere.DENSITY, 'EAS', 'dEAS_dr'], + rows=ar, + cols=ar, + ) + + else: self.declare_partials( of=Dynamic.Atmosphere.DYNAMIC_PRESSURE, wrt=[ diff --git a/aviary/mission/two_dof/ode/accel_eom.py b/aviary/mission/two_dof/ode/accel_eom.py index 5a42fe31d1..5d1a1ff096 100644 --- a/aviary/mission/two_dof/ode/accel_eom.py +++ b/aviary/mission/two_dof/ode/accel_eom.py @@ -2,6 +2,7 @@ import openmdao.api as om from aviary.constants import GRAV_ENGLISH_GASP, GRAV_ENGLISH_LBM +from aviary.variable_info.functions import add_aviary_input, add_aviary_output from aviary.variable_info.variables import Dynamic @@ -17,27 +18,30 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - arange = np.arange(nn) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.MASS, val=np.ones(nn) * 1e6, units='lbm', desc='total mass of the aircraft', ) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.DRAG, val=np.zeros(nn), units='lbf', desc='drag on aircraft', ) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.Propulsion.THRUST_TOTAL, val=np.zeros(nn), units='lbf', desc='total thrust', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.VELOCITY, val=np.zeros(nn), units='ft/s', @@ -50,13 +54,18 @@ def setup(self): units='ft/s**2', desc='rate of change of true air speed', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.DISTANCE_RATE, val=np.zeros(nn), units='ft/s', desc='rate of change of horizontal distance covered', ) + def setup_partials(self): + nn = self.options['num_nodes'] + arange = np.arange(nn) + self.declare_partials( Dynamic.Mission.VELOCITY_RATE, [ diff --git a/aviary/mission/two_dof/ode/breguet_cruise_eom.py b/aviary/mission/two_dof/ode/breguet_cruise_eom.py index 07d7aa8105..9a4b466f2f 100644 --- a/aviary/mission/two_dof/ode/breguet_cruise_eom.py +++ b/aviary/mission/two_dof/ode/breguet_cruise_eom.py @@ -2,6 +2,7 @@ import openmdao.api as om from aviary.constants import GRAV_ENGLISH_LBM +from aviary.variable_info.functions import add_aviary_input from aviary.variable_info.variables import Dynamic @@ -32,7 +33,8 @@ def setup(self): desc='mass at each node, monotonically nonincreasing', ) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.Propulsion.FUEL_MASS_FLOW_RATE_NEGATIVE_TOTAL, 0.74 * np.ones(nn), units='lbm/h', @@ -267,13 +269,15 @@ def setup(self): desc='range reference at which cruise begins', ) self.add_input('TAS_cruise', val=0.0001 * np.ones(nn), units='NM/s', desc='true airspeed') - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.CUMULATIVE_ELECTRIC_ENERGY_USED, 10.0 * np.ones(nn), units='kW*h', desc='total energy consumption, comes from propulsion', ) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.Propulsion.ELECTRIC_POWER_IN_TOTAL, 0.74 * np.ones(nn), units='kW', diff --git a/aviary/mission/two_dof/ode/constraints/flight_constraints.py b/aviary/mission/two_dof/ode/constraints/flight_constraints.py index 076ebab6a8..06efcfd6aa 100644 --- a/aviary/mission/two_dof/ode/constraints/flight_constraints.py +++ b/aviary/mission/two_dof/ode/constraints/flight_constraints.py @@ -23,7 +23,8 @@ def setup(self): nn = self.options['num_nodes'] arange = np.arange(nn) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.MASS, val=np.ones(nn), units='lbm', @@ -45,7 +46,8 @@ def setup(self): units='unitless', desc='maximum lift coefficient', ) - self.add_input( + add_aviary_input( + self, Dynamic.Mission.FLIGHT_PATH_ANGLE, val=np.ones(nn), units='rad', @@ -54,7 +56,8 @@ def setup(self): add_aviary_input(self, Aircraft.Wing.INCIDENCE, val=1.0, units='rad') - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.ANGLE_OF_ATTACK, val=np.ones(nn), units='rad', @@ -190,8 +193,8 @@ class ClimbAtTopOfClimb(om.ExplicitComponent): """This class is not used nor tested.""" def setup(self): - self.add_input(Dynamic.Mission.VELOCITY, units='ft/s', val=-200) - self.add_input(Dynamic.Mission.FLIGHT_PATH_ANGLE, units='rad', val=0.0) + add_aviary_input(self, Dynamic.Mission.VELOCITY, units='ft/s', val=-200) + add_aviary_input(self, Dynamic.Mission.FLIGHT_PATH_ANGLE, units='rad', val=0.0) self.add_output('ROC', units='ft/s') self.declare_partials('*', '*') diff --git a/aviary/mission/two_dof/ode/constraints/speed_constraints.py b/aviary/mission/two_dof/ode/constraints/speed_constraints.py index e70069a4ca..51f4a1bf1d 100644 --- a/aviary/mission/two_dof/ode/constraints/speed_constraints.py +++ b/aviary/mission/two_dof/ode/constraints/speed_constraints.py @@ -1,5 +1,6 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_input from aviary.variable_info.variables import Dynamic @@ -33,7 +34,8 @@ def setup(self): units='kn', desc='equivalent airspeed', ) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.MACH, val=np.ones(nn), units='unitless', diff --git a/aviary/mission/two_dof/ode/constraints/test/test_climb_constraints.py b/aviary/mission/two_dof/ode/constraints/test/test_climb_constraints.py index 2b4342d244..38f43e1e3b 100644 --- a/aviary/mission/two_dof/ode/constraints/test/test_climb_constraints.py +++ b/aviary/mission/two_dof/ode/constraints/test/test_climb_constraints.py @@ -3,11 +3,13 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.constraints.speed_constraints import SpeedConstraints from aviary.variable_info.variables import Dynamic +@use_tempdirs class SpeedConstraintTestCase1(unittest.TestCase): """Test speed constraint at MACH = 0.6 with targeted MACH at 0.8.""" diff --git a/aviary/mission/two_dof/ode/constraints/test/test_flight_constraints.py b/aviary/mission/two_dof/ode/constraints/test/test_flight_constraints.py index 8bc1e662ee..7e4e42cd66 100644 --- a/aviary/mission/two_dof/ode/constraints/test/test_flight_constraints.py +++ b/aviary/mission/two_dof/ode/constraints/test/test_flight_constraints.py @@ -3,11 +3,13 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.constraints.flight_constraints import FlightConstraints from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class FlightConstraintTestCase(unittest.TestCase): """Test minimum TAS computation.""" diff --git a/aviary/mission/two_dof/ode/landing_eom.py b/aviary/mission/two_dof/ode/landing_eom.py index 0b00e0d29a..85026e7cfe 100644 --- a/aviary/mission/two_dof/ode/landing_eom.py +++ b/aviary/mission/two_dof/ode/landing_eom.py @@ -567,7 +567,8 @@ def setup(self): self.add_input( 'CL_max', val=0.0, units='unitless', desc='CLMX: max CL at approach altitude' ) - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.MASS, val=0.0, units='lbm', diff --git a/aviary/mission/two_dof/ode/simple_cruise_eom.py b/aviary/mission/two_dof/ode/simple_cruise_eom.py index c15039dca3..792f81fed7 100644 --- a/aviary/mission/two_dof/ode/simple_cruise_eom.py +++ b/aviary/mission/two_dof/ode/simple_cruise_eom.py @@ -1,6 +1,7 @@ import numpy as np import openmdao.api as om +from aviary.variable_info.functions import add_aviary_output from aviary.variable_info.variables import Dynamic @@ -33,7 +34,8 @@ def setup(self): desc='Constant true airspeed at each point in cruise.', ) - self.add_output( + add_aviary_output( + self, Dynamic.Mission.DISTANCE, shape=(nn,), units='NM', diff --git a/aviary/mission/two_dof/ode/taxi_eom.py b/aviary/mission/two_dof/ode/taxi_eom.py index ae36ca7426..791fe7f705 100644 --- a/aviary/mission/two_dof/ode/taxi_eom.py +++ b/aviary/mission/two_dof/ode/taxi_eom.py @@ -1,6 +1,6 @@ import openmdao.api as om -from aviary.variable_info.functions import add_aviary_input, add_aviary_option +from aviary.variable_info.functions import add_aviary_input, add_aviary_option, add_aviary_output from aviary.variable_info.variables import Dynamic, Mission @@ -11,7 +11,8 @@ def initialize(self): add_aviary_option(self, Mission.Taxi.DURATION, units='s') def setup(self): - self.add_input( + add_aviary_input( + self, Dynamic.Vehicle.Propulsion.FUEL_MASS_FLOW_RATE_NEGATIVE_TOTAL, val=1.0, units='lbm/s', @@ -25,7 +26,8 @@ def setup(self): units='lbm', desc='taxi_fuel_consumed', ) - self.add_output( + add_aviary_output( + self, Dynamic.Vehicle.MASS, val=175000.0, units='lbm', diff --git a/aviary/mission/two_dof/ode/test/test_accel_eom.py b/aviary/mission/two_dof/ode/test/test_accel_eom.py index 35ee80b9a3..77a665723b 100644 --- a/aviary/mission/two_dof/ode/test/test_accel_eom.py +++ b/aviary/mission/two_dof/ode/test/test_accel_eom.py @@ -3,11 +3,13 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.accel_eom import AccelerationRates from aviary.variable_info.variables import Dynamic +@use_tempdirs class AccelerationTestCase(unittest.TestCase): """ These tests compare the output of the accel EOM to the output from GASP. There are some discrepancies. diff --git a/aviary/mission/two_dof/ode/test/test_accel_ode.py b/aviary/mission/two_dof/ode/test/test_accel_ode.py index bef24e3b70..f29af30fe9 100644 --- a/aviary/mission/two_dof/ode/test/test_accel_ode.py +++ b/aviary/mission/two_dof/ode/test/test_accel_ode.py @@ -2,6 +2,7 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.accel_ode import AccelODE from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -14,6 +15,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class AccelerationODETestCase(unittest.TestCase): """Test 2-degrees-of-freedom acceleration ODE.""" diff --git a/aviary/mission/two_dof/ode/test/test_breguet_cruise_eom.py b/aviary/mission/two_dof/ode/test/test_breguet_cruise_eom.py index 71da22e100..9da7f5da97 100644 --- a/aviary/mission/two_dof/ode/test/test_breguet_cruise_eom.py +++ b/aviary/mission/two_dof/ode/test/test_breguet_cruise_eom.py @@ -3,12 +3,14 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.constants import GRAV_ENGLISH_LBM from aviary.mission.two_dof.ode.breguet_cruise_eom import ElectricRangeComp, RangeComp from aviary.variable_info.variables import Dynamic +@use_tempdirs class TestBreguetResults(unittest.TestCase): """Test cruise range and time in RangeComp component.""" @@ -50,6 +52,7 @@ def test_case1(self): assert_check_partials(partial_data, atol=tol, rtol=tol) +@use_tempdirs class TestBreguetPartials(unittest.TestCase): def setUp(self): nn = 10 @@ -99,6 +102,7 @@ def test_partials(self): assert_check_partials(partial_data, atol=tol, rtol=tol) +@use_tempdirs class TestBreguetPartials2(unittest.TestCase): """Test mass-weight conversion.""" @@ -140,6 +144,7 @@ def test_partials(self): assert_check_partials(partial_data, atol=2e-11, rtol=1e-11) +@use_tempdirs class TestBreguetResults2(unittest.TestCase): def setUp(self): self.nn = nn = 100 @@ -181,6 +186,7 @@ def test_results(self): assert_near_equal(np.diff(t), -np.diff(W) / fuel_flow_avg, tolerance=1.0e-6) +@use_tempdirs class TestElectricBreguetResults(unittest.TestCase): """Test cruise range and time in E_RangeComp component.""" @@ -231,7 +237,4 @@ def test_partials(self): if __name__ == '__main__': - # unittest.main() - test = TestBreguetPartials2() - test.setUp() - test.test_partials() + unittest.main() diff --git a/aviary/mission/two_dof/ode/test/test_breguet_cruise_ode.py b/aviary/mission/two_dof/ode/test/test_breguet_cruise_ode.py index f7ac783382..cc64f5a013 100644 --- a/aviary/mission/two_dof/ode/test/test_breguet_cruise_ode.py +++ b/aviary/mission/two_dof/ode/test/test_breguet_cruise_ode.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.breguet_cruise_ode import ( BreguetCruiseODE, @@ -16,6 +17,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class CruiseODETestCase(unittest.TestCase): def setUp(self): self.prob = om.Problem() @@ -77,6 +79,7 @@ def test_cruise(self): assert_check_partials(partial_data, atol=1e-8, rtol=1e-8) +@use_tempdirs class ElectricCruiseODETestCase(unittest.TestCase): """This test uses a makeup electrical engine to test electrical Breguet cruise ODE.""" diff --git a/aviary/mission/two_dof/ode/test/test_flight_ode.py b/aviary/mission/two_dof/ode/test/test_flight_ode.py index 426bde6944..f748faeb25 100644 --- a/aviary/mission/two_dof/ode/test/test_flight_ode.py +++ b/aviary/mission/two_dof/ode/test/test_flight_ode.py @@ -4,6 +4,7 @@ import openmdao import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials +from openmdao.utils.testing_utils import use_tempdirs from packaging import version from aviary.mission.two_dof.ode.flight_ode import FlightODE @@ -17,6 +18,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class FlightODEClimbTestCase(unittest.TestCase): """Test 2-degrees-of-freedom climb ODE.""" @@ -133,6 +135,7 @@ def test_end_of_climb(self): check_prob_outputs(self.prob, testvals, 1e-6) +@use_tempdirs class FlightODEDescenTestCase(unittest.TestCase): """Test 2-degrees-of-freedom descent ODE.""" diff --git a/aviary/mission/two_dof/ode/test/test_simple_cruise_eom.py b/aviary/mission/two_dof/ode/test/test_simple_cruise_eom.py index 60013d2b8b..5da94f7900 100644 --- a/aviary/mission/two_dof/ode/test/test_simple_cruise_eom.py +++ b/aviary/mission/two_dof/ode/test/test_simple_cruise_eom.py @@ -3,12 +3,14 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.constants import GRAV_ENGLISH_LBM from aviary.mission.two_dof.ode.simple_cruise_eom import DistanceComp from aviary.variable_info.variables import Dynamic +@use_tempdirs class TestSimpleCruiseResults(unittest.TestCase): """Test cruise with DistanceComp component.""" @@ -35,6 +37,7 @@ def test_case1(self): assert_near_equal(distance[-1, ...], r_expected, tolerance=0.001) +@use_tempdirs class TestDistanceCompPartials(unittest.TestCase): def setUp(self): nn = 10 @@ -67,7 +70,4 @@ def test_partials(self): if __name__ == '__main__': - # unittest.main() - test = TestSimpleCruiseResults() - test.setUp() - test.test_case1() + unittest.main() diff --git a/aviary/mission/two_dof/ode/test/test_simple_cruise_ode.py b/aviary/mission/two_dof/ode/test/test_simple_cruise_ode.py index 75564c8bf7..4929e80f8d 100644 --- a/aviary/mission/two_dof/ode/test/test_simple_cruise_ode.py +++ b/aviary/mission/two_dof/ode/test/test_simple_cruise_ode.py @@ -3,6 +3,7 @@ import numpy as np import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.simple_cruise_ode import SimpleCruiseODE from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -13,6 +14,7 @@ from aviary.variable_info.variables import Aircraft, Dynamic +@use_tempdirs class CruiseODETestCase(unittest.TestCase): def setUp(self): self.prob = om.Problem() @@ -75,7 +77,4 @@ def test_cruise(self): if __name__ == '__main__': - # unittest.main() - z = CruiseODETestCase() - z.setUp() - z.test_cruise() + unittest.main() diff --git a/aviary/mission/two_dof/ode/test/test_taxi_eom.py b/aviary/mission/two_dof/ode/test/test_taxi_eom.py index 91ad71a8df..404161fd6c 100644 --- a/aviary/mission/two_dof/ode/test/test_taxi_eom.py +++ b/aviary/mission/two_dof/ode/test/test_taxi_eom.py @@ -2,6 +2,7 @@ import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal +from openmdao.utils.testing_utils import use_tempdirs from aviary.mission.two_dof.ode.taxi_eom import TaxiFuelComponent from aviary.utils.aviary_values import AviaryValues @@ -9,6 +10,7 @@ from aviary.variable_info.variables import Dynamic, Mission +@use_tempdirs class TaxiFuelComponentTestCase(unittest.TestCase): """Test the computation of fuel consumed during taxi in TaxiFuelComponent component.""" diff --git a/aviary/mission/two_dof/ode/test/test_taxi_ode.py b/aviary/mission/two_dof/ode/test/test_taxi_ode.py index 80f3292f81..9efa79fe5e 100644 --- a/aviary/mission/two_dof/ode/test/test_taxi_ode.py +++ b/aviary/mission/two_dof/ode/test/test_taxi_ode.py @@ -3,6 +3,7 @@ import openmdao import openmdao.api as om from openmdao.utils.assert_utils import assert_check_partials +from openmdao.utils.testing_utils import use_tempdirs from packaging import version from aviary.mission.two_dof.ode.test.params import set_params_for_unit_tests @@ -15,6 +16,7 @@ from aviary.variable_info.variables import Dynamic, Mission +@use_tempdirs class TaxiTestCase(unittest.TestCase): """Test computation of taxi group.""" diff --git a/aviary/utils/csv_data_file.py b/aviary/utils/csv_data_file.py index e7835d02bc..4498bbe26c 100644 --- a/aviary/utils/csv_data_file.py +++ b/aviary/utils/csv_data_file.py @@ -59,7 +59,7 @@ def read_data_file( """ verbosity = Verbosity(verbosity) - filepath = get_path(filename) + filepath = get_path(filename, verbosity) data = NamedValues() comments = [] diff --git a/aviary/utils/engine_deck_conversion.py b/aviary/utils/engine_deck_conversion.py index 4dae6758f6..c65d5fac69 100644 --- a/aviary/utils/engine_deck_conversion.py +++ b/aviary/utils/engine_deck_conversion.py @@ -12,10 +12,11 @@ from aviary.subsystems.propulsion.utils import EngineModelVariables, default_units from aviary.utils.conversion_utils import _parse, _read_map, _rep from aviary.utils.csv_data_file import write_data_file -from aviary.utils.functions import get_aviary_resource_path, get_path +from aviary.utils.functions import get_aviary_resource_path from aviary.utils.named_values import NamedValues from aviary.utils.utils import round_it from aviary.variable_info.enums import EngineDeckType +from aviary.variable_info.functions import add_aviary_input from aviary.variable_info.variables import Dynamic @@ -712,19 +713,22 @@ def initialize(self): def setup(self): nn = self.options['num_nodes'] - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.MACH, val=np.zeros(nn), desc='current Mach number', units='unitless', ) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.TEMPERATURE, val=np.zeros(nn), desc='current atmospheric temperature', units='degR', ) - self.add_input( + add_aviary_input( + self, Dynamic.Atmosphere.STATIC_PRESSURE, _PSLS_PSF, units='psf', diff --git a/aviary/utils/process_input_decks.py b/aviary/utils/process_input_decks.py index e6b6f76574..c28b54c99e 100644 --- a/aviary/utils/process_input_decks.py +++ b/aviary/utils/process_input_decks.py @@ -107,11 +107,7 @@ def create_vehicle(vehicle_deck='', meta_data=CoreMetaData, verbosity=Verbosity. initialization_guesses[key.removeprefix('initialization_guesses:')] = val aircraft_values.update(vehicle_deck) else: - if verbosity >= Verbosity.BRIEF: - verbose = True - else: - verbose = False - vehicle_deck = get_path(vehicle_deck, verbose) + vehicle_deck = get_path(vehicle_deck, verbosity) aircraft_values, initialization_guesses = parse_inputs( vehicle_deck=vehicle_deck, aircraft_values=aircraft_values, diff --git a/aviary/utils/test/test_engine_deck_conversion.py b/aviary/utils/test/test_engine_deck_conversion.py index 05dc0ed408..da3ff5f5a2 100644 --- a/aviary/utils/test/test_engine_deck_conversion.py +++ b/aviary/utils/test/test_engine_deck_conversion.py @@ -108,6 +108,6 @@ def test_bad_filenames(self): if __name__ == '__main__': - # unittest.main() - test = TestEngineDeckConversion() - test.test_TF_conversion_GASP() + unittest.main() + # test = TestEngineDeckConversion() + # test.test_TF_conversion_GASP()