diff --git a/.gitignore b/.gitignore index dd8663cd2..c9fb3a1b9 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,7 @@ target/ # Jupyter Notebook .ipynb_checkpoints +.db-journal # IPython profile_default/ diff --git a/aviary/api.py b/aviary/api.py index 4136c3aa8..4648b7f4a 100644 --- a/aviary/api.py +++ b/aviary/api.py @@ -40,7 +40,7 @@ from aviary.interface.methods_for_level2 import AviaryProblem from aviary.interface.utils.check_phase_info import check_phase_info from aviary.utils.engine_deck_conversion import EngineDeckConverter -from aviary.utils.fortran_to_aviary import create_aviary_deck +from aviary.utils.fortran_to_aviary import fortran_to_aviary from aviary.utils.functions import set_aviary_input_defaults, set_aviary_initial_values, get_path from aviary.utils.options import list_options from aviary.constants import GRAV_METRIC_GASP, GRAV_ENGLISH_GASP, GRAV_METRIC_FLOPS, GRAV_ENGLISH_FLOPS, GRAV_ENGLISH_LBM, RHO_SEA_LEVEL_ENGLISH, RHO_SEA_LEVEL_METRIC, MU_TAKEOFF, MU_LANDING, PSLS_PSF, TSLS_DEGR, RADIUS_EARTH_METRIC diff --git a/aviary/docs/examples/outputted_phase_info.py b/aviary/docs/examples/outputted_phase_info.py index daf97400c..0737bef2c 100644 --- a/aviary/docs/examples/outputted_phase_info.py +++ b/aviary/docs/examples/outputted_phase_info.py @@ -1,2 +1,21 @@ -phase_info = {'pre_mission': {'include_takeoff': True, 'optimize_mass': True}, 'climb_1': {'subsystem_options': {'core_aerodynamics': {'method': 'computed'}}, 'user_options': {'optimize_mach': True, 'optimize_altitude': True, 'polynomial_control_order': [1, 2], 'use_polynomial_control': True, 'num_segments': [1], 'order': 1, 'solve_for_distance': True, 'initial_mach': (1, None), 'final_mach': (2, None), 'mach_bounds': ( - (0.98, 2.02), None), 'initial_altitude': (1, None), 'final_altitude': (2, None), 'altitude_bounds': ((0.0, 502), None), 'throttle_enforcement': 'path_constraint', 'fix_initial': True, 'constrain_final': True, 'fix_duration': False, 'initial_bounds': ((0.0, 0.0), None), 'duration_bounds': ((0.5, 1.5), None)}, 'initial_guesses': {'time': ([1, 1], None)}}, 'post_mission': {'include_landing': True, 'constrain_range': True, 'target_range': (514.5, None)}} +phase_info = { + 'pre_mission': { + 'include_takeoff': True, 'optimize_mass': True}, 'climb_1': { + 'subsystem_options': { + 'core_aerodynamics': { + 'method': 'computed'}}, 'user_options': { + 'optimize_mach': True, 'optimize_altitude': True, 'polynomial_control_order': [ + 1, 2], 'use_polynomial_control': True, 'num_segments': [1], 'order': 1, 'solve_for_distance': True, 'initial_mach': ( + 1, None), 'final_mach': ( + 2, None), 'mach_bounds': ( + (0.98, 2.02), None), 'initial_altitude': ( + 1, None), 'final_altitude': ( + 2, None), 'altitude_bounds': ( + (0.0, 502), None), 'throttle_enforcement': 'path_constraint', 'fix_initial': True, 'constrain_final': True, 'fix_duration': False, 'initial_bounds': ( + (0.0, 0.0), None), 'duration_bounds': ( + (0.5, 1.5), None)}, 'initial_guesses': { + 'time': ( + [ + 1, 1], None)}}, 'post_mission': { + 'include_landing': True, 'constrain_range': True, 'target_range': ( + 514.5, None)}} diff --git a/aviary/docs/examples/reserve_missions.ipynb b/aviary/docs/examples/reserve_missions.ipynb index 15b3b0e7c..f0887e094 100644 --- a/aviary/docs/examples/reserve_missions.ipynb +++ b/aviary/docs/examples/reserve_missions.ipynb @@ -186,7 +186,7 @@ ], "metadata": { "kernelspec": { - "display_name": "latest_env", + "display_name": "aviary", "language": "python", "name": "python3" }, @@ -200,7 +200,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/aviary/docs/getting_started/onboarding_level1.ipynb b/aviary/docs/getting_started/onboarding_level1.ipynb index bbae17fe3..5ff20cd63 100644 --- a/aviary/docs/getting_started/onboarding_level1.ipynb +++ b/aviary/docs/getting_started/onboarding_level1.ipynb @@ -764,7 +764,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "aviary", "language": "python", "name": "python3" }, @@ -778,7 +778,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/aviary/docs/user_guide/aviary_commands.ipynb b/aviary/docs/user_guide/aviary_commands.ipynb index 853d6ec5e..4edf1409a 100644 --- a/aviary/docs/user_guide/aviary_commands.ipynb +++ b/aviary/docs/user_guide/aviary_commands.ipynb @@ -88,7 +88,7 @@ "\n", "`run_mission` is a command line interface that will run an analysis on a given csv input file.\n", "\n", - "To use small_single_aisle_GwGm.csv run the command `aviary run_mission models/small_single_aisle/small_single_aisle_GwGm.csv`
\n", + "To use small_single_aisle_GASP.csv run the command `aviary run_mission models/small_single_aisle/small_single_aisle_GASP.csv`
\n", "\n", "SNOPT is the default optimizer, but IPOPT is available as well." ] @@ -105,7 +105,7 @@ "source": [ "# Testing Cell\n", "import subprocess\n", - "command = 'aviary run_mission models/small_single_aisle/small_single_aisle_GwGm.csv'\n", + "command = 'aviary run_mission models/small_single_aisle/small_single_aisle_GASP.csv'\n", "command += ' --max_iter 0 --optimizer IPOPT' # max_iter to limit build time, IPOPT to run on CI\n", "subprocess.run(command.split()).check_returncode();\n" ] @@ -141,10 +141,10 @@ "`-o` or `--outdir` is the directory to write outputs. The default is current directory.\n", "`--optimizer` is the name of the optimizer. The default is `SNOPT`.\n", "`--shooting` indicates that the integration method is shooting method instead of collocation scheme. The default is collocation.\n", - "`--phase_info` is the path to phase info file. If it is missing, it depends on the integration method (collocation or shooting) and on the mission method (settings:equations+of_motion with value of `2DOF` or `height_energy`) which is defined in the .csv input file.\n", + "`--phase_info` is the path to phase info file. If it is missing, it depends on the integration method (collocation or shooting) and on the mission method (`settings:equations_of_motion` with value of `2DOF` or `height_energy`) which is defined in the .csv input file.\n", "`--max_iter` is the maximum number of iterations. The default is 50.\n", "\n", - "More detailed discussions can be found in [onboarding_level1](../getting_started/onboarding_level1.ipynb)." + "More detailed information and examples can be found in the [Level 1 interface](../getting_started/onboarding_level1.ipynb)." ] }, { @@ -157,9 +157,7 @@ "\n", "The `aviary fortran_to_aviary` command will convert a Fortran input deck to an Aviary csv.\n", "\n", - "The only two required inputs are `-l` (for `--legacy_code` with options `FLOPS` and `GASP`) and the filepath to the input deck. \n", - "Optionally, a deck of default values can be specified via the option `-d` (for `--defaults_deck`) and a default deck file, this is useful if an input deck assumes certain values for any unspecified variables.\n", - "When this command is run, a brief message is printed. To print more messages, one can set verbosity level higher. For example, `-v 3` will result in debug messages being printed. See [Controlling Display Levels](../developer_guide/coding_standards.ipynb) for more details.\n", + "The only two required inputs are the filepath to the input deck and `-l` (for `--legacy_code` with options `FLOPS` and `GASP`). When this command is run, a brief message is printed. To print more messages, one can set verbosity level higher. For example, `-v 3` will result in debug messages being printed. See [Controlling Display Levels](../developer_guide/coding_standards.ipynb) for more details.\n", "If an invalid filepath is given, pre-packaged resources will be checked for input decks with a matching name.\n", "If the output file name is not specified, a detault name is assumed to be the trunk of the input file name with `csv` as file extension. For example, an input file `sample.dat` will result in `sample_converted.csv`.\n", "If the output file exists, the command will not run unless the user specifies `--force` to force the overwritten action.\n", @@ -167,27 +165,23 @@ "Here, pre-packaged resources are absolute path, relative path, and Aviary based path.\n", "\n", "Notes for input decks:\n", - "- FLOPS, GASP, or Aviary names can be used for variables (Ex WG or Mission:Design:GROSS_MASS)\n", - "- When specifying variables from FORTRAN, they should be in the appropriate NAMELIST.\n", - "- Aviary variable names should be specified outside any NAMELISTS.\n", - "- Names are not case-sensitive.\n", - "- Units can be specified using any of the openMDAO valid units.\n", - "- Comments can be added using !\n", - "- Lists can be entered by separating values with commas.\n", - "- Individual list elements can be specified by adding an index after the variable name.\n", - "- (NOTE: 1 indexing is used inside NAMELISTS, while 0 indexing is used outside NAMELISTS)\n", - "\n", - "Example inputs:\n", + "- When specifying variables from FORTRAN, they should be in the appropriate NAMELIST\n", + "- Names are not case-sensitive\n", + "- Comments can be added using \"!\"\n", + "- Lists can be entered by separating values with commas on the same line\n", + "- For GASP variables where required, individual list elements can be specified by adding an index after the variable name\n", + " - (NOTE: 1 indexing is used inside NAMELISTS, while 0 indexing is used outside NAMELISTS)\n", + "\n", + "Example inputs (GASP-style file):\n", "```\n", - "aircraft:fuselage:pressure_differential = .5, atm !DELP in GASP, but using atmospheres instead of psi\n", - "ARNGE(1) = 3600 !target range in nautical miles\n", - "pyc_phases = taxi, groundroll, rotation, landing\n", + "$INGASP\n", + "DELP = 7.34797 ! typical GASP input\n", + "ARNGE(1) = 3600 ! variable with specified index\n", + "ACLS = 0.0,0.40,0.60,0.80,1.00,1.20, 1.40,1.60,1.80, ! values given as array\n", "```\n", "\n", "Example usage:\n", - "```\n", - "`aviary fortran_to_aviary --legacy_code GASP --force GASP_test.dat` Convert the GASP input deck to Aviary (even if an output exists).\n", - "```\n" + "`aviary fortran_to_aviary --legacy_code GASP --force GASP_test.dat` Convert the GASP input deck to Aviary (even if a file with the name GASP_test.dat already exists)." ] }, { @@ -254,7 +248,7 @@ "import os\n", "commands = [\n", " 'engines','turbofan_22k.txt','N3CC/N3CC_data.py',\n", - " 'small_single_aisle_GwGm.dat small_single_aisle_GwGm.csv',\n", + " 'small_single_aisle_GASP.dat small_single_aisle_GASP.csv',\n", " 'turbofan_22k.txt -o ~/example_files']\n", "with tempfile.TemporaryDirectory() as tempdir:\n", " os.chdir(tempdir)\n", @@ -311,11 +305,12 @@ "\n", "\n", "Example usage:\n", - "```\n", + "\n", "`aviary convert_engine turbofan_23k_1.eng turbofan_23k_1_lbm_s.deck -f GASP` Convert a GASP based turbofan\n", - "`aviary convert_engine -f FLOPS turbofan_22k.eng turbofan_22k.txt` Convert a FLOPS based turbofan\n", - "`aviary convert_engine turboshaft_4465hp.eng turboshaft_4465hp.deck --data_format GASP_TS` Convert a GASP based turboshaft\n", - "```\n" + "\n", + "`aviary convert_engine turbofan_22k.eng turbofan_22k.txt -f FLOPS` Convert a FLOPS based turbofan\n", + "\n", + "`aviary convert_engine turboshaft_4465hp.eng turboshaft_4465hp.deck --data_format GASP_TS` Convert a GASP based turboshaft" ] }, { @@ -384,16 +379,10 @@ "\n", "\n", "Example usage:\n", - "```\n", - "`aviary convert_aero_table -f GASP subsystems/aerodynamics/gasp_based/data/GASP_aero_free.txt large_single_aisle_1_aero_flaps.txt` Convert a GASP based aero table\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`aviary convert_aero_table -f FLOPS utils/test/flops_test_polar.txt aviary_flops_polar.txt` Convert a FLOPS based aero table\n", - "```\n" + "\n", + "`aviary convert_aero_table -f GASP subsystems/aerodynamics/gasp_based/data/GASP_aero_free.txt large_single_aisle_1_aero_flaps.txt` Convert a GASP based aero table\n", + "\n", + "`aviary convert_aero_table -f FLOPS utils/test/flops_test_polar.txt aviary_flops_polar.txt` Convert a FLOPS based aero table\n" ] }, { @@ -456,11 +445,12 @@ "\n", "\n", "Example usage:\n", - "```\n", + "\n", "`aviary convert_prop_table -f GASP PropFan.map PropFan.prop` Convert a GASP based propeller map\n", + "\n", "`aviary convert_prop_table -f GASP general_aviation.map general_aviation.prop` Convert a GASP based propeller map\n", + "\n", "`aviary convert_prop_table general_aviation.map` Convert a GASP based propeller map\n", - "```\n", "\n", "The first example uses Mach number and the second example uses helical Mach number. \n", "Note that the output file name can be skipped as demonstrated in the third example. Since there is only one input data format that is supported at this time, it defaults to GASP if not provided. This is shown in the third example as well." @@ -558,7 +548,7 @@ "metadata": { "celltoolbar": "Tags", "kernelspec": { - "display_name": "latest_env", + "display_name": "aviary", "language": "python", "name": "python3" }, @@ -572,7 +562,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/aviary/examples/level2_shooting_traj.py b/aviary/examples/level2_shooting_traj.py index 89739c427..a418e60fe 100644 --- a/aviary/examples/level2_shooting_traj.py +++ b/aviary/examples/level2_shooting_traj.py @@ -139,6 +139,6 @@ def custom_run_aviary(aircraft_filename, optimizer=None, if __name__ == "__main__": - input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GwGm.csv' + input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GASP.csv' custom_run_aviary( input_deck, analysis_scheme=AnalysisScheme.SHOOTING, run_driver=False) diff --git a/aviary/examples/test/test_level2_shooting_traj.py b/aviary/examples/test/test_level2_shooting_traj.py index 9fb3a5155..4ce85d394 100644 --- a/aviary/examples/test/test_level2_shooting_traj.py +++ b/aviary/examples/test/test_level2_shooting_traj.py @@ -12,7 +12,7 @@ class CustomTrajTestCase(unittest.TestCase): @require_pyoptsparse(optimizer='IPOPT') def test_run_aviary(self): - input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GwGm.csv' + input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GASP.csv' custom_run_aviary( input_deck, analysis_scheme=AnalysisScheme.SHOOTING, run_driver=False) diff --git a/aviary/interface/test/test_cmd_entry_points.py b/aviary/interface/test/test_cmd_entry_points.py index c255fe9a2..1ff536a80 100644 --- a/aviary/interface/test/test_cmd_entry_points.py +++ b/aviary/interface/test/test_cmd_entry_points.py @@ -51,33 +51,38 @@ def bench_test_phase_info_cmd(self): class fortran_to_aviaryTestCases(CommandEntryPointsTestCases): def test_diff_configuration_conversion(self): filepath = get_aviary_resource_path( - 'models/test_aircraft/converter_configuration_test_data_GwGm.dat') - outfile = Path.cwd() / 'test_aircraft/converter_configuration_test_data_GwGm' / 'output.dat' + 'utils/test/data/configuration_test_data_GASP.dat' + ) + outfile = Path.cwd() / 'utils/test/data/configuration_test_data_GASP' / 'output.dat' cmd = f'aviary fortran_to_aviary {filepath} -o {outfile} -l GASP' self.run_and_test_cmd(cmd) def test_small_single_aisle_conversion(self): filepath = get_aviary_resource_path( - 'models/small_single_aisle/small_single_aisle_GwGm.dat') + 'models/small_single_aisle/small_single_aisle_GASP.dat' + ) outfile = Path.cwd() / 'small_single_aisle' / 'output.dat' cmd = f'aviary fortran_to_aviary {filepath} -o {outfile} -l GASP' self.run_and_test_cmd(cmd) def test_FLOPS_conversion(self): filepath = get_aviary_resource_path( - 'models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.txt') + 'models/N3CC/N3CC_generic_low_speed_polars_FLOPS.txt' + ) outfile = Path.cwd() / 'N3CC' / 'output.dat' cmd = f'aviary fortran_to_aviary {filepath} -o {outfile} -l FLOPS' self.run_and_test_cmd(cmd) def test_force_conversion(self): filepath = get_aviary_resource_path( - 'models/test_aircraft/converter_configuration_test_data_GwGm.dat') + 'models/small_single_aisle/small_single_aisle_GASP.dat' + ) outfile = Path.cwd() / 'output.dat' cmd1 = f'aviary fortran_to_aviary {filepath} -o {outfile} -l GASP' self.run_and_test_cmd(cmd1) filepath = get_aviary_resource_path( - 'models/test_aircraft/converter_configuration_test_data_GwGm.dat') + 'models/small_single_aisle/small_single_aisle_GASP.dat' + ) cmd2 = f'aviary fortran_to_aviary {filepath} -o {outfile} --force -l GASP' self.run_and_test_cmd(cmd2) @@ -96,12 +101,12 @@ def test_copy_n3cc_data(self): self.run_and_test_cmd(cmd) def test_copy_multiple(self): - cmd = f'aviary hangar small_single_aisle_GwGm.dat small_single_aisle_GwGm.csv' + cmd = f'aviary hangar small_single_aisle_GASP.dat small_single_aisle_GASP.csv' self.run_and_test_cmd(cmd) def test_copy_to(self): outfile = Path.cwd() / 'example_files' - cmd = f'aviary hangar small_single_aisle_GwGm.dat -o {outfile}' + cmd = f'aviary hangar small_single_aisle_GASP.dat -o {outfile}' self.run_and_test_cmd(cmd) diff --git a/aviary/interface/test/test_download_models.py b/aviary/interface/test/test_download_models.py index 26b629ca1..58f415cbc 100644 --- a/aviary/interface/test/test_download_models.py +++ b/aviary/interface/test/test_download_models.py @@ -40,7 +40,7 @@ def test_single_file_with_path(self): self.run_and_test_hangar(filename) def test_multiple_files(self): - filenames = ['small_single_aisle_GwGm.dat', 'small_single_aisle_GwGm.csv'] + filenames = ['small_single_aisle_GASP.dat', 'small_single_aisle_GASP.csv'] self.run_and_test_hangar(filenames) def test_folder(self): @@ -48,16 +48,17 @@ def test_folder(self): self.run_and_test_hangar(filename) def test_single_file_custom_outdir(self): - filename = 'small_single_aisle_GwGm.csv' + filename = 'small_single_aisle_GASP.csv' out_dir = '~/test_hangar' self.run_and_test_hangar(filename, out_dir) shutil.rmtree(out_dir) def test_expected_path(self): - aviary_path = get_model('converter_configuration_test_data_GwGm.dat') + aviary_path = get_model('large_single_aisle_1_GASP.dat') expected_path = get_aviary_resource_path( - 'models/test_aircraft/converter_configuration_test_data_GwGm.dat') + 'models/large_single_aisle_1/large_single_aisle_1_GASP.dat' + ) self.assertTrue(str(aviary_path) == str(expected_path)) diff --git a/aviary/interface/test/test_phase_info.py b/aviary/interface/test/test_phase_info.py index 9d4c0aca9..7345fbc60 100644 --- a/aviary/interface/test/test_phase_info.py +++ b/aviary/interface/test/test_phase_info.py @@ -87,7 +87,7 @@ def test_phase_info_parameterization_two_dof(self): prob = AviaryProblem() - csv_path = "models/small_single_aisle/small_single_aisle_GwGm.csv" + csv_path = "models/small_single_aisle/small_single_aisle_GASP.csv" prob.load_inputs(csv_path, phase_info) prob.check_and_preprocess_inputs() diff --git a/aviary/interface/test/test_reserve_support.py b/aviary/interface/test/test_reserve_support.py index 8219c7a6a..87105127f 100644 --- a/aviary/interface/test/test_reserve_support.py +++ b/aviary/interface/test/test_reserve_support.py @@ -50,7 +50,7 @@ def test_gasp_relative_reserve(self): prob = AviaryProblem() - csv_path = "models/small_single_aisle/small_single_aisle_GwGm.csv" + csv_path = "models/small_single_aisle/small_single_aisle_GASP.csv" prob.load_inputs(csv_path, phase_info) prob.check_and_preprocess_inputs() diff --git a/aviary/mission/gasp_based/test/test_idle_descent_estimation.py b/aviary/mission/gasp_based/test/test_idle_descent_estimation.py index 7fc63fb5e..b900c2f53 100644 --- a/aviary/mission/gasp_based/test/test_idle_descent_estimation.py +++ b/aviary/mission/gasp_based/test/test_idle_descent_estimation.py @@ -23,7 +23,7 @@ class IdleDescentTestCase(unittest.TestCase): """ def setUp(self): - input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GwGm.csv' + input_deck = 'models/large_single_aisle_1/large_single_aisle_1_GASP.csv' aviary_inputs, _ = create_vehicle(input_deck) aviary_inputs.set_val(Settings.VERBOSITY, 0) aviary_inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, val=28690, units="lbf") diff --git a/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv b/aviary/models/N3CC/N3CC_FLOPS.csv similarity index 100% rename from aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv rename to aviary/models/N3CC/N3CC_FLOPS.csv diff --git a/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.txt b/aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPS.txt similarity index 100% rename from aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.txt rename to aviary/models/N3CC/N3CC_generic_low_speed_polars_FLOPS.txt diff --git a/aviary/models/propellers/PropFan.map b/aviary/models/engines/propellers/PropFan.map similarity index 100% rename from aviary/models/propellers/PropFan.map rename to aviary/models/engines/propellers/PropFan.map diff --git a/aviary/models/propellers/PropFan.prop b/aviary/models/engines/propellers/PropFan.prop similarity index 100% rename from aviary/models/propellers/PropFan.prop rename to aviary/models/engines/propellers/PropFan.prop diff --git a/aviary/models/propellers/general_aviation.map b/aviary/models/engines/propellers/general_aviation.map similarity index 100% rename from aviary/models/propellers/general_aviation.map rename to aviary/models/engines/propellers/general_aviation.map diff --git a/aviary/models/propellers/general_aviation.prop b/aviary/models/engines/propellers/general_aviation.prop similarity index 100% rename from aviary/models/propellers/general_aviation.prop rename to aviary/models/engines/propellers/general_aviation.prop diff --git a/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv b/aviary/models/large_single_aisle_1/large_single_aisle_1_GASP.csv similarity index 100% rename from aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.csv rename to aviary/models/large_single_aisle_1/large_single_aisle_1_GASP.csv diff --git a/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.dat b/aviary/models/large_single_aisle_1/large_single_aisle_1_GASP.dat similarity index 99% rename from aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.dat rename to aviary/models/large_single_aisle_1/large_single_aisle_1_GASP.dat index 9869b5068..4cc3b3097 100644 --- a/aviary/models/large_single_aisle_1/large_single_aisle_1_GwGm.dat +++ b/aviary/models/large_single_aisle_1/large_single_aisle_1_GASP.dat @@ -1,5 +1,4 @@ LARGE SINGLE AISLE 1 / 23k SLS thrust turbofan -1 -1 -aircraft:engine:data_file=models/engines/turbofan_23k_1.deck $INGASP XCTCMX=.4 STATIC=.03 diff --git a/aviary/models/large_turboprop_freighter/large_turboprop_freighter.csv b/aviary/models/large_turboprop_freighter/large_turboprop_freighter_GASP.csv similarity index 100% rename from aviary/models/large_turboprop_freighter/large_turboprop_freighter.csv rename to aviary/models/large_turboprop_freighter/large_turboprop_freighter_GASP.csv diff --git a/aviary/models/large_turboprop_freighter/large_turboprop_freighter.dat b/aviary/models/large_turboprop_freighter/large_turboprop_freighter_GASP.dat similarity index 100% rename from aviary/models/large_turboprop_freighter/large_turboprop_freighter.dat rename to aviary/models/large_turboprop_freighter/large_turboprop_freighter_GASP.dat diff --git a/aviary/models/small_single_aisle/small_single_aisle_GwGm.csv b/aviary/models/small_single_aisle/small_single_aisle_GASP.csv similarity index 100% rename from aviary/models/small_single_aisle/small_single_aisle_GwGm.csv rename to aviary/models/small_single_aisle/small_single_aisle_GASP.csv diff --git a/aviary/models/small_single_aisle/small_single_aisle_GwGm.dat b/aviary/models/small_single_aisle/small_single_aisle_GASP.dat similarity index 98% rename from aviary/models/small_single_aisle/small_single_aisle_GwGm.dat rename to aviary/models/small_single_aisle/small_single_aisle_GASP.dat index a46cb52fd..253b395b0 100644 --- a/aviary/models/small_single_aisle/small_single_aisle_GwGm.dat +++ b/aviary/models/small_single_aisle/small_single_aisle_GASP.dat @@ -1,11 +1,5 @@ Small Single Aisle / turbofan_24k_2 -1 - aircraft:engine:data_file=models/engines/turbofan_24k_2.deck - aircraft:engine:data_file=models/engines/turbofan_23k_1.deck !temporary - mission:summary:gross_mass=124780 - aircraft:engine:reference_diameter=6.04 - - $INGASP AS=1., ! Number of aisles in the cabin AR=11.03, ! Wing aspect ratio diff --git a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv b/aviary/models/test_aircraft/configuration_test_GASP.csv similarity index 99% rename from aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv rename to aviary/models/test_aircraft/configuration_test_GASP.csv index 7b23f37b1..ee4319ca9 100644 --- a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.csv +++ b/aviary/models/test_aircraft/configuration_test_GASP.csv @@ -225,4 +225,4 @@ INGASP.WLPCT,0.9423 INGASP.WNAC,1240 INGASP.WPLX,0 INGASP.WPYLON,0 -INGASP.XTORQ,8000 +INGASP.XTORQ,8000 \ No newline at end of file diff --git a/aviary/subsystems/geometry/gasp_based/test/test_override.py b/aviary/subsystems/geometry/gasp_based/test/test_override.py index e26311714..bdb3b4d26 100644 --- a/aviary/subsystems/geometry/gasp_based/test/test_override.py +++ b/aviary/subsystems/geometry/gasp_based/test/test_override.py @@ -20,7 +20,8 @@ class GASPOverrideTestCase(unittest.TestCase): def setUp(self): aviary_inputs, initial_guesses = create_vehicle( - 'models/test_aircraft/converter_configuration_test_data_GwGm.csv') + 'models/test_aircraft/configuration_test_GASP.csv' + ) engines = build_engine_deck(aviary_inputs) diff --git a/aviary/subsystems/mass/flops_based/test/test_landing_gear.py b/aviary/subsystems/mass/flops_based/test/test_landing_gear.py index 6f67d9ffd..64f9184e5 100644 --- a/aviary/subsystems/mass/flops_based/test/test_landing_gear.py +++ b/aviary/subsystems/mass/flops_based/test/test_landing_gear.py @@ -78,7 +78,7 @@ def test_case(self): prob.set_val(Aircraft.Design.TOUCHDOWN_MASS, 100000.0, 'lbm') partial_data = prob.check_partials(out_stream=None, method="cs") - assert_check_partials(partial_data, atol=2e-12, rtol=1e-12) + assert_check_partials(partial_data, atol=1e-11, rtol=1e-12) class AltLandingGearMassTest(unittest.TestCase): diff --git a/aviary/subsystems/propulsion/test/test_hamilton_standard.py b/aviary/subsystems/propulsion/propeller/test/test_hamilton_standard.py similarity index 100% rename from aviary/subsystems/propulsion/test/test_hamilton_standard.py rename to aviary/subsystems/propulsion/propeller/test/test_hamilton_standard.py diff --git a/aviary/subsystems/propulsion/test/test_propeller_map.py b/aviary/subsystems/propulsion/propeller/test/test_propeller_map.py similarity index 93% rename from aviary/subsystems/propulsion/test/test_propeller_map.py rename to aviary/subsystems/propulsion/propeller/test/test_propeller_map.py index 197410766..a7ae7b393 100644 --- a/aviary/subsystems/propulsion/test/test_propeller_map.py +++ b/aviary/subsystems/propulsion/propeller/test/test_propeller_map.py @@ -21,7 +21,7 @@ def test_general_aviation(self): # The case when prop_type is helical_mach. tol = 0.005 aviary_options = get_option_defaults() - prop_file_path = 'models/propellers/general_aviation.prop' + prop_file_path = 'models/engines/propellers/general_aviation.prop' aviary_options.set_val( Aircraft.Engine.Propeller.DATA_FILE, val=prop_file_path, units='unitless' ) @@ -46,7 +46,7 @@ def test_propfan(self): # The case when prop_type is mach. tol = 0.005 aviary_options = get_option_defaults() - prop_file_path = 'models/propellers/PropFan.prop' + prop_file_path = 'models/engines/propellers/PropFan.prop' aviary_options.set_val( Aircraft.Engine.Propeller.DATA_FILE, val=prop_file_path, units='unitless' ) @@ -70,7 +70,7 @@ def test_propfan(self): def test_mach_type(self): # Test reading prop_type from .prop file. aviary_options = get_option_defaults() - prop_file_path = 'models/propellers/general_aviation.prop' + prop_file_path = 'models/engines/propellers/general_aviation.prop' aviary_options.set_val( Aircraft.Engine.Propeller.DATA_FILE, val=prop_file_path, units='unitless' ) diff --git a/aviary/subsystems/propulsion/test/test_propeller_performance.py b/aviary/subsystems/propulsion/propeller/test/test_propeller_performance.py similarity index 93% rename from aviary/subsystems/propulsion/test/test_propeller_performance.py rename to aviary/subsystems/propulsion/propeller/test/test_propeller_performance.py index d16ab2c72..cdee9cdc0 100644 --- a/aviary/subsystems/propulsion/test/test_propeller_performance.py +++ b/aviary/subsystems/propulsion/propeller/test/test_propeller_performance.py @@ -7,7 +7,11 @@ from aviary.subsystems.atmosphere.atmosphere import Atmosphere from aviary.subsystems.propulsion.propeller.propeller_performance import ( - OutMachs, PropellerPerformance, TipSpeed, AreaSquareRatio, AdvanceRatio + OutMachs, + PropellerPerformance, + TipSpeed, + AreaSquareRatio, + AdvanceRatio, ) from aviary.variable_info.enums import OutMachType from aviary.variable_info.functions import setup_model_options @@ -42,8 +46,26 @@ ] ) XFT = np.array( - [1.0, 1.0, 0.9976, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, - 1.0, 1.0, 1.0, 1.0, 1.0, 0.9976, 1.0, 1.0, 1.0,] + [ + 1.0, + 1.0, + 0.9976, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.9976, + 1.0, + 1.0, + 1.0, + ] ) # CTX = np.array([0.27651, 0.20518, 0.13062, 0.10236, 0.10236, 0.19331, # 0.10189, 0.10189, 0.18123, 0.08523, 0.06463, 0.02800]) @@ -477,11 +499,13 @@ def test_case_15_16_17(self): val=False, units='unitless', ) - prop_file_path = 'models/propellers/PropFan.prop' - options.set_val(Aircraft.Engine.Propeller.DATA_FILE, - val=prop_file_path, units='unitless') - options.set_val(Aircraft.Engine.INTERPOLATION_METHOD, - val='slinear', units='unitless') + prop_file_path = 'models/engines/propellers/PropFan.prop' + options.set_val( + Aircraft.Engine.Propeller.DATA_FILE, val=prop_file_path, units='unitless' + ) + options.set_val( + Aircraft.Engine.INTERPOLATION_METHOD, val='slinear', units='unitless' + ) setup_model_options(prob, options) @@ -507,11 +531,13 @@ def test_case_15_16_17(self): out_stream=None, compact_print=True, show_only_incorrect=True, - form='central', method="fd", + form='central', + method="fd", minimum_step=1e-12, - abs_err_tol=5.0E-4, - rel_err_tol=5.0E-5, - includes=["*selectedMach*"]) + abs_err_tol=5.0e-4, + rel_err_tol=5.0e-5, + includes=["*selectedMach*"], + ) assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -546,8 +572,9 @@ def test_helical_mach(self): form='central', method="fd", minimum_step=1e-12, - abs_err_tol=5.0E-4, - rel_err_tol=5.0E-5) + abs_err_tol=5.0e-4, + rel_err_tol=5.0e-5, + ) assert_check_partials(partial_data, atol=1e-4, rtol=1e-4) def test_mach(self): @@ -575,8 +602,9 @@ def test_mach(self): form='central', method="fd", minimum_step=1e-12, - abs_err_tol=5.0E-4, - rel_err_tol=5.0E-5) + abs_err_tol=5.0e-4, + rel_err_tol=5.0e-5, + ) assert_check_partials(partial_data, atol=1e-4, rtol=1e-4) def test_tip_mach(self): @@ -604,8 +632,9 @@ def test_tip_mach(self): form='central', method="fd", minimum_step=1e-12, - abs_err_tol=5.0E-4, - rel_err_tol=5.0E-5) + abs_err_tol=5.0e-4, + rel_err_tol=5.0e-5, + ) assert_check_partials(partial_data, atol=1e-4, rtol=1e-4) @@ -634,7 +663,9 @@ def test_tipspeed(self): val=[1116.42671, 1116.42671, 1015.95467], units='ft/s', ) - prob.set_val(Aircraft.Engine.Propeller.TIP_MACH_MAX, val=[0.8], units='unitless') + prob.set_val( + Aircraft.Engine.Propeller.TIP_MACH_MAX, val=[0.8], units='unitless' + ) prob.set_val(Aircraft.Engine.Propeller.TIP_SPEED_MAX, val=[800], units='ft/s') prob.set_val(Aircraft.Engine.Propeller.DIAMETER, val=[10.5], units='ft') @@ -674,8 +705,7 @@ def test_sqa_ratio_1(self): prob.run_model() sqa_ratio = prob.get_val("sqa_array", units='unitless') - assert_near_equal(sqa_ratio, [ - 0.08337656, 0.08337656], tolerance=1e-5) + assert_near_equal(sqa_ratio, [0.08337656, 0.08337656], tolerance=1e-5) partial_data = prob.check_partials(out_stream=None, method="cs") assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -733,14 +763,17 @@ def test_zje_1(self): promotes=["*"], ) prob.setup(force_alloc_complex=True) - prob.set_val("vtas", val=[0.1, 125., 300., 1000.], units='knot') - prob.set_val("tipspd", val=[800., 800., 750., 500.], units='ft/s') + prob.set_val("vtas", val=[0.1, 125.0, 300.0, 1000.0], units='knot') + prob.set_val("tipspd", val=[800.0, 800.0, 750.0, 500.0], units='ft/s') prob.set_val("sqa_array", val=[0.0756, 0.0756, 0.0756, 1.0], units='unitless') prob.run_model() equiv_adv_ratio = prob.get_val("equiv_adv_ratio", units='unitless') - assert_near_equal(equiv_adv_ratio, [ - 6.50074004e-04, 8.12592505e-01, 2.08023681e+00, 5.0], tolerance=1e-5) + assert_near_equal( + equiv_adv_ratio, + [6.50074004e-04, 8.12592505e-01, 2.08023681e00, 5.0], + tolerance=1e-5, + ) partial_data = prob.check_partials(out_stream=None, method="cs") assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -753,16 +786,16 @@ def test_zje_2(self): promotes=["*"], ) prob.setup(force_alloc_complex=True) - prob.set_val("vtas", val=[0.1, 125., 300., 1000.], units='knot') - prob.set_val("tipspd", val=[800., 800., 750., 500.], units='ft/s') + prob.set_val("vtas", val=[0.1, 125.0, 300.0, 1000.0], units='knot') + prob.set_val("tipspd", val=[800.0, 800.0, 750.0, 500.0], units='ft/s') prob.set_val("sqa_array", val=[0.0756, 0.0756, 0.0756, 1.0], units='unitless') prob.run_model() equiv_adv_ratio = prob.get_val("equiv_adv_ratio", units='unitless') assert_near_equal( equiv_adv_ratio, - [6.50074004e-04, 8.12592505e-01, 2.08023681e+00, 5.0], - tolerance=1e-5 + [6.50074004e-04, 8.12592505e-01, 2.08023681e00, 5.0], + tolerance=1e-5, ) partial_data = prob.check_partials(out_stream=None, method="cs") diff --git a/aviary/utils/engine_deck_conversion.py b/aviary/utils/engine_deck_conversion.py index 80d296103..361ba9531 100644 --- a/aviary/utils/engine_deck_conversion.py +++ b/aviary/utils/engine_deck_conversion.py @@ -4,6 +4,7 @@ import getpass from datetime import datetime from enum import Enum +from copy import deepcopy import numpy as np import openmdao.api as om @@ -43,17 +44,18 @@ def __str__(self): TEMPERATURE = EngineModelVariables.TEMPERATURE_T4 # EXIT_AREA = EngineModelVariables.EXIT_AREA -flops_keys = [ +_flops_keys = [ MACH, ALTITUDE, THROTTLE, GROSS_THRUST, RAM_DRAG, FUEL_FLOW, - NOX_RATE] # , EXIT_AREA] + NOX_RATE, +] # , EXIT_AREA] # later code assumes T4 is last item in keys -gasp_keys = [MACH, ALTITUDE, THROTTLE, FUEL_FLOW, TEMPERATURE] +_gasp_keys = [MACH, ALTITUDE, THROTTLE, FUEL_FLOW, TEMPERATURE] header_names = { MACH: 'Mach_Number', @@ -108,8 +110,8 @@ def EngineDeckConverter(input_file, output_file, data_format: EngineDeckType): f'# {legacy_code}-derived {engine_type} deck converted from {data_file.name}') if data_format == EngineDeckType.FLOPS: - header = {key: default_units[key] for key in flops_keys} - data = {key: np.array([]) for key in flops_keys} + header = {key: default_units[key] for key in _flops_keys} + data = {key: np.array([]) for key in _flops_keys} with open(data_file, newline='', encoding='utf-8-sig') as file: reader = _read_flops_engine(file) @@ -133,6 +135,9 @@ def EngineDeckConverter(input_file, output_file, data_format: EngineDeckType): # data[EXIT_AREA].append(line[7]) elif data_format in (EngineDeckType.GASP, EngineDeckType.GASP_TS): + # prevent modifications to gasp_keys from overwriting base _gasp_keys, to avoid + # errors when `EngineDeckConverter()` is ran multiple times in a row + gasp_keys = deepcopy(_gasp_keys) is_turbo_prop = True if data_format == EngineDeckType.GASP_TS else False temperature = gasp_keys.pop() fuelflow = gasp_keys.pop() diff --git a/aviary/utils/fortran_to_aviary.py b/aviary/utils/fortran_to_aviary.py index b783f7224..99c7fdbf4 100644 --- a/aviary/utils/fortran_to_aviary.py +++ b/aviary/utils/fortran_to_aviary.py @@ -1,5 +1,5 @@ """ -Fortran_to_Aviary.py is used to read in Fortran based vehicle decks and convert them to Aviary decks. +fortran_to_aviary.py is used to read in Fortran based vehicle decks and convert them to Aviary decks. FLOPS, GASP, or Aviary names can be used for variables (Ex WG or Mission:Design:GROSS_MASS) When specifying variables from FORTRAN, they should be in the appropriate NAMELIST. @@ -30,8 +30,12 @@ from aviary.variable_info.variables import Aircraft, Mission, Settings from aviary.variable_info.enums import LegacyCode, Verbosity, ProblemType from aviary.utils.functions import get_path -from aviary.utils.legacy_code_data.deprecated_vars import ( +from aviary.utils.legacy_code_data.flops_defaults import ( + flops_default_values, flops_deprecated_vars, +) +from aviary.utils.legacy_code_data.gasp_defaults import ( + gasp_default_values, gasp_deprecated_vars, ) @@ -39,10 +43,9 @@ GASP = LegacyCode.GASP -def create_aviary_deck( +def fortran_to_aviary( fortran_deck: str, legacy_code=None, - defaults_deck=None, out_file=None, force=False, verbosity=Verbosity.BRIEF, @@ -64,7 +67,6 @@ def create_aviary_deck( 'input_values': NamedValues(), 'unused_values': NamedValues(), 'initialization_guesses': initialization_guesses, - 'verbosity': verbosity, } fortran_deck: Path = get_path(fortran_deck, verbose=False) @@ -85,48 +87,65 @@ def create_aviary_deck( name = fortran_deck.stem out_file: Path = fortran_deck.parent.resolve().joinpath(name + '_converted.csv') + # create dictionary to convert legacy code variables to Aviary variables + # key: variable name, value: either None or relevant historical_name + aviary_variable_dict = generate_aviary_names(legacy_code.value) + + # Get legacy-code based depreciated variable list and set vehicle data to defaults if legacy_code is GASP: - default_extension = '.dat' + default_values = gasp_default_values deprecated_vars = gasp_deprecated_vars elif legacy_code is FLOPS: - default_extension = '.txt' + default_values = flops_default_values deprecated_vars = flops_deprecated_vars - if not defaults_deck: - defaults_filename = ( - legacy_code.value.lower() + '_default_values' + default_extension - ) - defaults_deck = ( - Path(__file__) - .parent.resolve() - .joinpath('legacy_code_data', defaults_filename) - ) - - # create dictionary to convert legacy code variables to Aviary variables - # key: variable name, value: either None or relevant historical_name - aviary_variable_dict = generate_aviary_names([legacy_code.value]) - - if defaults_deck: # If defaults are specified, initialize the vehicle with them - vehicle_data = input_parser( - defaults_deck, - vehicle_data, - aviary_variable_dict, - deprecated_vars, - legacy_code, + # Convert default data to Aviary names, add to vehicle_data + for item in default_values: + name = item[0].split('.') + val = str(item[1][0]) + vehicle_data = process_and_store_data( + data=val, + var_name=name[1], + legacy_code=legacy_code, + current_namelist=name[0], + alternate_names=aviary_variable_dict, + default_values=default_values, + vehicle_data=vehicle_data, + unused_vars=deprecated_vars, + verbosity=verbosity, ) - vehicle_data = input_parser( - fortran_deck, vehicle_data, aviary_variable_dict, deprecated_vars, legacy_code + # read in and convert input file + vehicle_data = parse_input_file( + fortran_deck, + vehicle_data, + aviary_variable_dict, + default_values, + deprecated_vars, + legacy_code, + verbosity, ) + + # Postprocessing step to handle special cases for conversion (not 1-to-1 match), + # per legacy code. if legacy_code is GASP: vehicle_data = update_gasp_options(vehicle_data) elif legacy_code is FLOPS: vehicle_data = update_flops_options(vehicle_data) vehicle_data = update_aviary_options(vehicle_data) - if ( - not out_file.is_file() - ): # default outputted file to be in same directory as input + # Add settings + if legacy_code is FLOPS: + eom = ['height_energy'] + mass = ['FLOPS'] + if legacy_code is GASP: + eom = ['2DOF'] + mass = ['GASP'] + vehicle_data['input_values'].set_val(Settings.EQUATIONS_OF_MOTION, eom) + vehicle_data['input_values'].set_val(Settings.MASS_METHOD, mass) + + if not out_file.is_file(): + # default outputted file to be in same directory as input out_file = fortran_deck.parent / out_file if out_file.is_file(): @@ -157,16 +176,6 @@ def create_aviary_deck( for var, (val, units) in sorted(vehicle_data['input_values']): writer.writerow([var] + val + [units]) - # TODO these should just get directly added to vehicle_data - if legacy_code is FLOPS: - EOM = 'height_energy' - mass = 'FLOPS' - if legacy_code is GASP: - EOM = '2DOF' - mass = 'GASP' - writer.writerow(['settings:equations_of_motion'] + [EOM]) - writer.writerow(['settings:mass_method'] + [mass]) - if legacy_code is GASP: # Values used in initial guessing of the trajectory writer.writerow([]) @@ -182,14 +191,23 @@ def create_aviary_deck( writer.writerow([var] + val) -def input_parser(fortran_deck, vehicle_data, alternate_names, unused_vars, legacy_code): +def parse_input_file( + fortran_deck, + vehicle_data, + alternate_names, + default_values, + unused_vars, + legacy_code, + verbosity=Verbosity.BRIEF, +): ''' - input_parser will modify the values in the vehicle_data dictionary using the data in the - fortran_deck. + parse_input_file reads the data in fortran_deck and adds it to vehicle_data. + Lines are read one by one, comments are removed, and namelists are tracked. - Lines with multiple variable-data pairs are supported, but the last value per variable must - be followed by a trailing comma. + Lines with multiple variable-data pairs are supported, but the last value per + variable must be followed by a trailing comma. ''' + input_data = NamedValues() with open(fortran_deck, 'r') as f_in: current_namelist = current_tag = '' for line in f_in: @@ -206,7 +224,7 @@ def input_parser(fortran_deck, vehicle_data, alternate_names, unused_vars, legac # Track when namelists are opened and closed if (line.lstrip()[0] in ['$', '&']) and current_tag == '': current_tag = line.lstrip()[0] - current_namelist = line.split(current_tag)[1].split()[0] + '.' + current_namelist = line.split(current_tag)[1].split()[0] elif (line.lstrip()[0] == current_tag) or (line.rstrip()[-1] == '/'): line = line.replace('/', '') terminate_namelist = True @@ -224,9 +242,11 @@ def input_parser(fortran_deck, vehicle_data, alternate_names, unused_vars, legac legacy_code, current_namelist, alternate_names, + default_values, vehicle_data, unused_vars, comment, + verbosity, ) except Exception as err: if current_namelist == '': @@ -262,9 +282,11 @@ def input_parser(fortran_deck, vehicle_data, alternate_names, unused_vars, legac legacy_code, current_namelist, alternate_names, + default_values, vehicle_data, unused_vars, comment, + verbosity, ) except Exception as err: if current_namelist == '': @@ -289,9 +311,11 @@ def process_and_store_data( legacy_code, current_namelist, alternate_names, + default_values, vehicle_data, unused_vars, comment='', + verbosity=Verbosity.BRIEF, ): ''' process_and_store_data takes in a string that contains the data, the current variable's name and @@ -305,7 +329,7 @@ def process_and_store_data( var_ind = data_units = None skip_variable = False # skip any variables that shouldn't get converted - if re.search(current_namelist + var_name + '\\Z', str(unused_vars), re.IGNORECASE): + if re.search(current_namelist + '.' + var_name, str(unused_vars), re.IGNORECASE): return vehicle_data # remove any elements that are empty (caused by trailing commas or extra commas) data_list = [dat for dat in data.split(',') if dat != ''] @@ -320,7 +344,7 @@ def process_and_store_data( var_values = [] list_of_equivalent_aviary_names, var_ind = update_name( - alternate_names, current_namelist + var_name, vehicle_data['verbosity'] + alternate_names, current_namelist + '.' + var_name, verbosity ) # Fortran uses 1 indexing, Python uses 0 indexing @@ -329,7 +353,7 @@ def process_and_store_data( var_ind -= fortran_offset # Aviary has a reduction gearbox which is 1/gear ratio of GASP gearbox - if current_namelist + var_name == 'INPROP.GR': + if current_namelist + '.' + var_name == 'INPROP.GR': var_values = [1 / var for var in var_values] vehicle_data['input_values'] = set_value( Aircraft.Engine.Gearbox.GEAR_RATIO, @@ -347,29 +371,37 @@ def process_and_store_data( continue elif name in _MetaData: + if current_namelist + '.' + var_name in default_values: + data_units = default_values.get_item( + current_namelist + '.' + var_name + )[1] + else: + data_units = None vehicle_data['input_values'] = set_value( name, var_values, + data_units, vehicle_data['input_values'], var_ind=var_ind, - units=data_units, ) continue vehicle_data['unused_values'] = set_value( name, var_values, + data_units, vehicle_data['unused_values'], var_ind=var_ind, - units=data_units, ) - if vehicle_data['verbosity'].value >= Verbosity.VERBOSE: + if verbosity >= Verbosity.VERBOSE: print('Unused:', name, var_values, comment) return vehicle_data -def set_value(var_name, var_value, value_dict: NamedValues, var_ind=None, units=None): +def set_value( + var_name, var_value, units=None, value_dict: NamedValues = None, var_ind=None +): ''' set_value will update the current value of a variable in a value dictionary that contains a value and it's associated units. @@ -383,9 +415,8 @@ def set_value(var_name, var_value, value_dict: NamedValues, var_ind=None, units= else: current_value = None if var_name in _MetaData: - units = _MetaData[var_name]['units'] - else: - units = 'unitless' + if not units: + units = _MetaData[var_name]['units'] if not units: units = 'unitless' @@ -413,23 +444,20 @@ def set_value(var_name, var_value, value_dict: NamedValues, var_ind=None, units= return value_dict -def generate_aviary_names(code_bases): +def generate_aviary_names(legacy_code): ''' - Create a dictionary for each of the specified Fortran code bases to map to the Aviary - variable names. Each dictionary of Aviary names will have a list of Fortran names for - each variable + Create a dictionary that maps the specified Fortran code to Aviary variable names. + Each Aviary variable will have a list of matching Fortran names ''' alternate_names = {} - for code_base in code_bases: - alternate_names[code_base] = {} - for key in _MetaData.keys(): - historical_dict = _MetaData[key]['historical_name'] - if historical_dict and code_base in historical_dict: - alt_name = _MetaData[key]['historical_name'][code_base] - if isinstance(alt_name, str): - alt_name = [alt_name] - alternate_names[code_base][key] = alt_name + for key in _MetaData.keys(): + historical_dict = _MetaData[key]['historical_name'] + if historical_dict and legacy_code in historical_dict: + alt_name = _MetaData[key]['historical_name'][legacy_code] + if isinstance(alt_name, str): + alt_name = [alt_name] + alternate_names[key] = alt_name return alternate_names @@ -444,20 +472,19 @@ def update_name(alternate_names, var_name, verbosity=Verbosity.BRIEF): var_ind = None all_equivalent_names = [] - for code_base in alternate_names.keys(): - for key, list_of_names in alternate_names[code_base].items(): - if list_of_names is not None: - for altname in list_of_names: - altname = altname.lower() - if altname.endswith(var_name.lower()): - all_equivalent_names.append(key) - continue - elif var_ind is not None and altname.endswith( - f'{var_name.lower()}({var_ind})' - ): - all_equivalent_names.append(key) - var_ind = None - continue + for key, list_of_names in alternate_names.items(): + if list_of_names is not None: + for altname in list_of_names: + altname = altname.lower() + if altname.endswith(var_name.lower()): + all_equivalent_names.append(key) + continue + elif var_ind is not None and altname.endswith( + f'{var_name.lower()}({var_ind})' + ): + all_equivalent_names.append(key) + var_ind = None + continue # if there are no equivalent variable names, return the original name if len(all_equivalent_names) == 0: @@ -596,13 +623,17 @@ def update_gasp_options(vehicle_data): [[0.12, 0.23, 0.13, 0.23, 0.23, 0.1, 0.15][flap_ind]], ) - res = input_values.get_val(Aircraft.Design.RESERVE_FUEL_ADDITIONAL, units='lbm')[0] - if res <= 0: + reserve_fuel_additional = input_values.get_val( + Aircraft.Design.RESERVE_FUEL_ADDITIONAL, units='lbm' + )[0] + if reserve_fuel_additional <= 0: input_values.set_val(Aircraft.Design.RESERVE_FUEL_ADDITIONAL, [0], units='lbm') input_values.set_val( - Aircraft.Design.RESERVE_FUEL_FRACTION, [-res], units='unitless' + Aircraft.Design.RESERVE_FUEL_FRACTION, + [-reserve_fuel_additional], + units='unitless', ) - elif res >= 10: + elif reserve_fuel_additional >= 10: input_values.set_val( Aircraft.Design.RESERVE_FUEL_FRACTION, [0], units='unitless' ) @@ -631,6 +662,15 @@ def update_gasp_options(vehicle_data): # the mission input_values.set_val(Aircraft.Engine.GLOBAL_THROTTLE, [True]) + # GEARBOX + # Aviary has a reduction gearbox which is 1/gear ratio of GASP gearbox + if Aircraft.Engine.Gearbox.GEAR_RATIO in input_values: + ratios = input_values.get_val(Aircraft.Engine.Gearbox.GEAR_RATIO) + ratios = [1 / val for val in ratios] + input_values.set_val( + Aircraft.Engine.Gearbox.GEAR_RATIO, ratios, units='unitless' + ) + vehicle_data['input_values'] = input_values return vehicle_data @@ -650,7 +690,6 @@ def update_flops_options(vehicle_data): input_values.delete(Aircraft.Design.THRUST_TO_WEIGHT_RATIO) # WSR - # Additional mass fraction scaler set to zero to not add mass twice if Aircraft.Engine.ADDITIONAL_MASS_FRACTION in input_values: if input_values.get_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION)[0] >= 1: @@ -840,12 +879,6 @@ def _setup_F2A_parser(parser): choices=set(LegacyCode), required=True, ) - parser.add_argument( - "-d", - "--defaults_deck", - default=None, - help="Deck of default values for unspecified variables", - ) parser.add_argument( "--force", action="store_true", @@ -870,11 +903,4 @@ def _exec_F2A(args, user_args): # convert verbosity from int to enum verbosity = Verbosity(args.verbosity) - create_aviary_deck( - filepath, - args.legacy_code, - args.defaults_deck, - args.out_file, - args.force, - verbosity, - ) + fortran_to_aviary(filepath, args.legacy_code, args.out_file, args.force, verbosity) diff --git a/aviary/utils/legacy_code_data/deprecated_vars.py b/aviary/utils/legacy_code_data/deprecated_vars.py deleted file mode 100644 index 7c71e8728..000000000 --- a/aviary/utils/legacy_code_data/deprecated_vars.py +++ /dev/null @@ -1,18 +0,0 @@ -## Depreciated Variables ## -# FLOPS -flops_deprecated_vars = [ - 'AERIN.MODARO', - 'ENGDIN.IGENEN', - 'ENGDIN.BOOST', - 'ENGDIN.EXTFAC', - 'ENGDIN.IXTRAP', - 'ENGDIN.NPCODE', - 'ENGDIN.PCODE', - 'ENGDIN.NOX', - 'OPTION.IOPT', - 'OPTION.IPOLP', - 'OPTION.NOISE' -] - -# GASP -gasp_deprecated_vars = [] diff --git a/aviary/utils/legacy_code_data/flops_default_values.txt b/aviary/utils/legacy_code_data/flops_default_values.txt deleted file mode 100644 index a2ce69a57..000000000 --- a/aviary/utils/legacy_code_data/flops_default_values.txt +++ /dev/null @@ -1,18 +0,0 @@ -Default Values from FLOPS - - &WTIN - EEXP=1.15,unitless - IALTWT=False,unitless - CARGF=False,unitless - CARBAS=False,unitless - \ - &ENGDIN - IDLE=False,unitless - IGEO=False,unitless - NONEG=False,unitless - \ - &AERIN - MIKE=False,unitless - SWETF=1,unitless - SWETV=1,unitless - \ \ No newline at end of file diff --git a/aviary/utils/legacy_code_data/flops_defaults.py b/aviary/utils/legacy_code_data/flops_defaults.py new file mode 100644 index 000000000..121b5bf34 --- /dev/null +++ b/aviary/utils/legacy_code_data/flops_defaults.py @@ -0,0 +1,32 @@ +from aviary.utils.named_values import NamedValues + +## Defaults ## +flops_default_values = NamedValues( + { + 'WTIN.EEXP': (1.15, 'unitless'), + 'WTIN.IALTWT': (False, 'unitless'), + 'WTIN.CARGF': (False, 'unitless'), + 'WTIN.CARBAS': (False, 'unitless'), + 'ENGDIN.IDLE': (False, 'unitless'), + 'ENGDIN.IGEO': (False, 'unitless'), + 'ENGDIN.NONEG': (False, 'unitless'), + 'AERIN.MIKE': (False, 'unitless'), + 'AERIN.SWETF': (1, 'unitless'), + 'AERIN.SWETV': (1, 'unitless'), + } +) + +## Depreciated Variables ## +flops_deprecated_vars = [ + 'AERIN.MODARO', + 'ENGDIN.IGENEN', + 'ENGDIN.BOOST', + 'ENGDIN.EXTFAC', + 'ENGDIN.IXTRAP', + 'ENGDIN.NPCODE', + 'ENGDIN.PCODE', + 'ENGDIN.NOX', + 'OPTION.IOPT', + 'OPTION.IPOLP', + 'OPTION.NOISE', +] diff --git a/aviary/utils/legacy_code_data/gasp_default_values.dat b/aviary/utils/legacy_code_data/gasp_default_values.dat deleted file mode 100644 index ea6fe30f3..000000000 --- a/aviary/utils/legacy_code_data/gasp_default_values.dat +++ /dev/null @@ -1,157 +0,0 @@ -Default Values from GASP - $INGASP -ALPHL0=-1.2,deg -ALTLND=0,ft -AR=10,unitless -ARHT=4.75,unitless -ARNGE(1)=0,NM -ARNGE(3)=0,NM -ARVT=1.67,unitless -AS=1,unitless -BLEOB=0.9,unitless -BOELTV=0,unitless -BTEOB=0.75,unitless -CATD=3,unitless -CFOC=0.3,unitless -CK10=1,unitless -CK11=1,unitless -CK12=1,unitless -CK14=1,unitless -CK15=1,unitless -CK18=1,unitless -CK19=1,unitless -CK21=1,unitless -CK5=1,unitless -CK7=1,unitless -CK8=1,unitless -CK9=1,unitless -CKF=1,unitless -CKFF=1,unitless -CKHT=1,unitless -CKI=0,unitless -CKN=1,unitless -CKSTRT=0,unitless -CKVT=1,unitless -CKW=1,unitless -CLEARqDN=0.2,unitless -CLEOC=0,unitless -COELTH=0,unitless -CRALT=37500,ft -CRMACH=0.8,unitless -CW(1)=0,lbm -CW(10)=1,lbm -CW(11)=0,lbm -CW(12)=0.7,lbm -CW(13)=6,unitless -CW(2)=0.0862,unitless -CW(3)=0.1,unitless -CW(4)=0.16,unitless -CW(5)=0,lbm -CW(6)=1,unitless -CW(7)=0,lbm -CW(8)=0,lbm -CW(9)=2,lbm -DCDOTE=0,unitless -DCLMLE=0.93,unitless -DCLMTE=0,unitless -DELCD=0.0015,unitless -DELCG=0.25,unitless -DELFE=0.25,ft**2 -DELLED=0,deg -DELLED=0,deg -DELLEO=45,deg -DELP=7.5,psi -DELTEO=0,deg -DELTT=0.1677,h -DELWFC=0,lbm -DELWST=0,lbm -DFLPLD=40,deg -DFLPTO=10,deg -DIAM_REF=5.8,ft -DLMC4=25,deg -DNQDE=1,unitless -DV1=5,kn -DVR=5,kn -DWPQCH=25,deg -DWPQCV=35,deg -ELODN=2,unitless -ELODT=3.2,unitless -ELPC=4.44,ft -ENP=2,unitless -EYEW=1.5,deg -FLAPN=1,unitless -FN_REF=28690,lbf -FPYL=0.7,unitless -FRESF=4998,lbm -FUELD=6.687,lbm/galUS -FVOL_MRG=0,unitless -HAPP=50,ft -HCK=2.47,ft -HPORT=0,ft -HTG=3,ft -HWING=0,unitless -IGEAR=False,unitless -JENGSZ=4,unitless -JFLTYP=single_slotted,unitless -NTYE=7,unitless -PAX=180,unitless -PS=29,inch -ROCTOC=300,ft/min -RCLMAX=1,unitless -RSMX=1000,ft/min -SAB=6,unitless -SAH=0,unitless -SCFAC=0,unitless -SF_FAC=1,unitless -SHT=0,ft**2 -SINKTD=3,ft/s -SKB=136,unitless -SKCC=11,unitless -SKFS=0.0195,unitless -SKFW=0.404,unitless -SKLG=0.0318,unitless -SKMG=0.8,unitless -SKPEI=0.135,unitless -SKSAS=0,lbm -SKSTRUT=0,unitless -SKTL=1,unitless -SKWF=0.43,unitless -SKWFOLD=0,unitless -SKWW=133.4,unitless -SKY=0.18,unitless -SKZ=0.22,unitless -SLM=0.33,unitless -SLMH=0.352,unitless -SLMV=0.801,unitless -SSTQSW=0,unitless -STATIC=0.05,unitless -STRUT=0 -SVT=0,ft**2 -SWSLS=0,lbm/lbf -TCHT=0.12,unitless -TCR=0.15,unitless -TCT=0.12,unitless -TCVT=0.12,unitless -TDELAY=1,s -THIN=0,lbf -UWNAC=3,lbm/ft**2 -UWPAX=200,lbm -VBARHX=0,unitless -VBARVX=0,unitless -VMLFSL=402.5,mi/h -VRATT=1.3,unitless -WAS=24,inch -WCARGO=0,lbm -WCFLAP=0,unitless -WG=150000,lbm -WGS=1,lbf/ft**2 -WS=20.2,inch -XCPS=0.3,unitless -XCTCMX=0.35,unitless -XLFMX=1.2,unitless -XLQDE=3.5,unitless -XWQLF=0.4,unitless -YMG=0.15,unitless -YP=0.35,unitless -YWFOLD=0,ft - $END diff --git a/aviary/utils/legacy_code_data/gasp_defaults.py b/aviary/utils/legacy_code_data/gasp_defaults.py new file mode 100644 index 000000000..aefa8ec9e --- /dev/null +++ b/aviary/utils/legacy_code_data/gasp_defaults.py @@ -0,0 +1,168 @@ +from aviary.utils.named_values import NamedValues + +## Defaults ## +# commented out values were not in metadata at the time +gasp_default_values = NamedValues( + { + 'INGASP.ALPHL0': (-1.2, 'deg'), + 'INGASP.ALTLND': (0, 'ft'), + 'INGASP.AR': (10, 'unitless'), + 'INGASP.ARHT': (4.75, 'unitless'), + 'INGASP.ARNGE(1)': (0, 'NM'), + 'INGASP.ARNGE(3)': (0, 'NM'), + 'INGASP.ARVT': (1.67, 'unitless'), + 'INGASP.AS': (1, 'unitless'), + 'INGASP.B': (117.8, 'ft'), # needs verification + 'INGASP.BLEOB': (0.9, 'unitless'), + 'INGASP.BOELTV': (0, 'unitless'), + 'INGASP.BTEOB': (0.75, 'unitless'), + 'INGASP.CATD': (3, 'unitless'), + 'INGASP.CBARW': (12.615, 'ft'), # needs verification + 'INGASP.CFOC': (0.3, 'unitless'), + 'INGASP.CK5': (1, 'unitless'), + # 'INGASP.CK7': (1, 'unitless'), + # 'INGASP.CK8': (1, 'unitless'), + # 'INGASP.CK9': (1, 'unitless'), + # 'INGASP.CK10': (1, 'unitless'), + # 'INGASP.CK11': (1, 'unitless'), + 'INGASP.CK12': (1, 'unitless'), + 'INGASP.CK14': (1, 'unitless'), + 'INGASP.CK15': (1, 'unitless'), + # 'INGASP.CK18': (1, 'unitless'), + 'INGASP.CK19': (1, 'unitless'), + 'INGASP.CK21': (1, 'unitless'), + 'INGASP.CKF': (1, 'unitless'), + 'INGASP.CKFF': (1, 'unitless'), + 'INGASP.CKHT': (1, 'unitless'), + 'INGASP.CKI': (0, 'unitless'), + 'INGASP.CKN': (1, 'unitless'), + 'INGASP.CKSTRT': (0, 'unitless'), + 'INGASP.CKVT': (1, 'unitless'), + 'INGASP.CKW': (1, 'unitless'), + 'INGASP.CLALPH': (7.1765, '1/rad'), # needs verification + 'INGASP.CLEARqDN': (0.2, 'unitless'), + 'INGASP.CLEOC': (0, 'unitless'), + 'INGASP.COELTH': (0, 'unitless'), + 'INGASP.CRALT': (37500, 'ft'), + 'INGASP.CRMACH': (0.8, 'unitless'), + 'INGASP.CW(1)': (0, 'lbm'), + 'INGASP.CW(2)': (0.0862, 'unitless'), + 'INGASP.CW(3)': (0.1, 'unitless'), + 'INGASP.CW(4)': (0.16, 'unitless'), + 'INGASP.CW(5)': (0, 'lbm'), + 'INGASP.CW(6)': (1, 'unitless'), + 'INGASP.CW(7)': (0, 'lbm'), + 'INGASP.CW(8)': (0, 'lbm'), + 'INGASP.CW(9)': (2, 'lbm'), + 'INGASP.CW(10)': (1, 'lbm'), + 'INGASP.CW(11)': (0, 'lbm'), + 'INGASP.CW(12)': (0.7, 'lbm'), + 'INGASP.CW(13)': (6, 'unitless'), + 'INGASP.DCDOTE': (0, 'unitless'), + 'INGASP.DCLMLE': (0.93, 'unitless'), + 'INGASP.DCLMTE': (0, 'unitless'), + 'INGASP.DELCD': (0.0015, 'unitless'), + 'INGASP.DELCG': (0.25, 'unitless'), + 'INGASP.DELFE': (0.25, 'ft**2'), + 'INGASP.DELLED': (0, 'deg'), + 'INGASP.DELLEO': (45, 'deg'), + 'INGASP.DELP': (7.5, 'psi'), + 'INGASP.DELTEO': (55, 'deg'), + 'INGASP.DELTT': (0.1677, 'h'), + 'INGASP.DELWFC': (0, 'lbm'), + 'INGASP.DELWST': (0, 'lbm'), + 'INGASP.DFLPLD': (40, 'deg'), + 'INGASP.DFLPTO': (10, 'deg'), + 'INGASP.DIAM_REF': (5.8, 'ft'), + 'INGASP.DLMC4': (25, 'deg'), + 'INGASP.DNQDE': (1, 'unitless'), + 'INGASP.DV1': (5, 'kn'), + 'INGASP.DVR': (5, 'kn'), + 'INGASP.DWPQCH': (25, 'deg'), + 'INGASP.DWPQCV': (35, 'deg'), + 'INGASP.ELF': (0, 'ft'), # needs verification + 'INGASP.ELODN': (2, 'unitless'), + 'INGASP.ELODT': (3.2, 'unitless'), + 'INGASP.ELPC': (4.44, 'ft'), + 'INGASP.ENP': (2, 'unitless'), + 'INGASP.EYEW': (1.5, 'deg'), + 'INGASP.FLAPN': (1, 'unitless'), + 'INGASP.FN_REF': (28690, 'lbf'), + 'INGASP.FPYL': (0.7, 'unitless'), + 'INGASP.FRESF': (4998, 'lbm'), + 'INGASP.FUELD': (6.687, 'lbm/galUS'), + 'INGASP.FVOL_MRG': (0, 'unitless'), + 'INGASP.HAPP': (50, 'ft'), + 'INGASP.HCK': (2.47, 'ft'), + # 'INGASP.HPORT': (0, 'ft'), + 'INGASP.HTG': (3, 'ft'), + 'INGASP.HWING': (0, 'unitless'), + 'INGASP.IGEAR': (False, 'unitless'), + # 'INGASP.JENGSZ': (4, 'unitless'), + 'INGASP.JFLTYP': ('single_slotted', 'unitless'), + 'INGASP.NTYE': (7, 'unitless'), + 'INGASP.PAX': (180, 'unitless'), + 'INGASP.PS': (29, 'inch'), + 'INGASP.ROCTOC': (300, 'ft/min'), + 'INGASP.RCLMAX': (1, 'unitless'), + 'INGASP.RSMX': (1000, 'ft/min'), + 'INGASP.SAB': (6, 'unitless'), + 'INGASP.SAH': (0, 'unitless'), + 'INGASP.SCFAC': (0, 'unitless'), + 'INGASP.SF_FAC': (1, 'unitless'), + 'INGASP.SHT': (0, 'ft**2'), + 'INGASP.SINKTD': (3, 'ft/s'), + 'INGASP.SKB': (136, 'unitless'), + 'INGASP.SKCC': (11, 'unitless'), + 'INGASP.SKFS': (0.0195, 'unitless'), + 'INGASP.SKFW': (0.404, 'unitless'), + 'INGASP.SKLG': (0.0318, 'unitless'), + 'INGASP.SKMG': (0.8, 'unitless'), + 'INGASP.SKPEI': (0.135, 'unitless'), + 'INGASP.SKSAS': (0, 'lbm'), + 'INGASP.SKSTRUT': (0, 'unitless'), + 'INGASP.SKTL': (1, 'unitless'), + 'INGASP.SKWF': (0.43, 'unitless'), + 'INGASP.SKWFOLD': (0, 'unitless'), + 'INGASP.SKWW': (133.4, 'unitless'), + 'INGASP.SKY': (0.18, 'unitless'), + 'INGASP.SKZ': (0.22, 'unitless'), + 'INGASP.SLM': (0.33, 'unitless'), + 'INGASP.SLMH': (0.352, 'unitless'), + 'INGASP.SLMV': (0.801, 'unitless'), + 'INGASP.SSTQSW': (0, 'unitless'), + 'INGASP.STATIC': (0.05, 'unitless'), + 'INGASP.STRUT': (0, 'ft'), + 'INGASP.SVT': (0, 'ft**2'), + 'INGASP.SWSLS': (0, 'lbm/lbf'), + 'INGASP.TCHT': (0.12, 'unitless'), + 'INGASP.TCR': (0.15, 'unitless'), + 'INGASP.TCT': (0.12, 'unitless'), + 'INGASP.TCVT': (0.12, 'unitless'), + 'INGASP.TDELAY': (1, 's'), + 'INGASP.THIN': (0, 'lbf'), + 'INGASP.UWNAC': (3, 'lbm/ft**2'), + 'INGASP.UWPAX': (200, 'lbm'), + 'INGASP.VBARHX': (0, 'unitless'), + 'INGASP.VBARVX': (0, 'unitless'), + 'INGASP.VMLFSL': (402.5, 'mi/h'), + 'INGASP.VRATT': (1.3, 'unitless'), + 'INGASP.WAS': (24, 'inch'), + 'INGASP.WCARGO': (0, 'lbm'), + 'INGASP.WCFLAP': (0, 'unitless'), + 'INGASP.WG': (150000, 'lbm'), + 'INGASP.WGS': (1, 'lbf/ft**2'), + 'INGASP.WS': (20.2, 'inch'), + 'INGASP.XCPS': (0.3, 'unitless'), + 'INGASP.XCTCMX': (0.35, 'unitless'), + 'INGASP.XLFMX': (1.2, 'unitless'), + 'INGASP.XLQDE': (3.5, 'unitless'), + 'INGASP.XWQLF': (0.4, 'unitless'), + 'INGASP.YMG': (0.15, 'unitless'), + 'INGASP.YP': (0.35, 'unitless'), + 'INGASP.YWFOLD': (0, 'ft'), + } +) + +## Depreciated Variables ## +gasp_deprecated_vars = [] diff --git a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.dat b/aviary/utils/test/data/configuration_test_data_GASP.dat similarity index 99% rename from aviary/models/test_aircraft/converter_configuration_test_data_GwGm.dat rename to aviary/utils/test/data/configuration_test_data_GASP.dat index d2c81517f..fe44e08e6 100644 --- a/aviary/models/test_aircraft/converter_configuration_test_data_GwGm.dat +++ b/aviary/utils/test/data/configuration_test_data_GASP.dat @@ -1,7 +1,4 @@ Baseline new configuration Mach 0.80 / 23k SLS thrust turbofan -1 -1 - -aircraft:engine:reference_diameter = 6.15, -aircraft:engine:data_file=models/engines/turbofan_23k_1.deck $INGASP AS=1., ! Number of aisles in the cabin @@ -234,4 +231,3 @@ aircraft:engine:data_file=models/engines/turbofan_23k_1.deck TBO=3500., ! time between overhauls, hr (0. default which deletes cost computations) TR=1.0, ! property tax rate; tax/value (0.) $END - diff --git a/aviary/utils/test/data/converter_test_N3CC_FLOPS.csv b/aviary/utils/test/data/converter_test_N3CC_FLOPS.csv new file mode 100644 index 000000000..a189ad140 --- /dev/null +++ b/aviary/utils/test/data/converter_test_N3CC_FLOPS.csv @@ -0,0 +1,445 @@ +# FLOPS-derived aircraft input deck converted from N3CC_generic_low_speed_polars_FLOPS.txt + +# Input Values +aircraft:air_conditioning:mass_scaler,0.98094,unitless +aircraft:anti_icing:mass_scaler,0.53202,unitless +aircraft:apu:mass_scaler,1.02321,unitless +aircraft:avionics:mass_scaler,1.123226,unitless +aircraft:canard:laminar_flow_lower,0,unitless +aircraft:canard:laminar_flow_upper,0,unitless +aircraft:canard:mass_scaler,1,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,35,lbm +aircraft:crew_and_payload:design:num_business_class,20,unitless +aircraft:crew_and_payload:design:num_first_class,16,unitless +aircraft:crew_and_payload:design:num_tourist_class,118,unitless +aircraft:crew_and_payload:flight_crew_mass_scaler,1,unitless +aircraft:crew_and_payload:mass_per_passenger,165,lbm +aircraft:crew_and_payload:misc_cargo,0,lbm +aircraft:crew_and_payload:non_flight_crew_mass_scaler,1,unitless +aircraft:crew_and_payload:num_flight_attendants,-1,unitless +aircraft:crew_and_payload:num_flight_crew,-1,unitless +aircraft:crew_and_payload:num_galley_crew,-1,unitless +aircraft:crew_and_payload:passenger_service_mass_scaler,1,unitless +aircraft:crew_and_payload:wing_cargo,0,lbm +aircraft:design:base_area,0,ft**2 +aircraft:design:empty_mass_margin_scaler,0.01498,unitless +aircraft:design:landing_to_takeoff_mass_ratio,0.84,unitless +aircraft:design:lift_dependent_drag_coeff_factor,0.93,unitless +aircraft:design:subsonic_drag_coeff_factor,0.95,unitless +aircraft:design:supersonic_drag_coeff_factor,1,unitless +aircraft:design:touchdown_mass,0,lbm +aircraft:design:use_alt_mass,False,unitless +aircraft:design:zero_lift_drag_coeff_factor,0.96,unitless +aircraft:electrical:mass_scaler,1.1976,unitless +aircraft:engine:additional_mass_fraction,0,unitless +aircraft:engine:constant_fuel_consumption,0,lbm/h +aircraft:engine:flight_idle_max_fraction,1,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +aircraft:engine:fuel_flow_scaler_constant_term,0,unitless +aircraft:engine:fuel_flow_scaler_linear_term,0,unitless +aircraft:engine:generate_flight_idle,True,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:mass_scaler,1.15,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_wing_engines,2,unitless +aircraft:engine:reference_mass,6293.8,lbm +aircraft:engine:reference_sls_thrust,22200.5,lbf +aircraft:engine:scale_factor,0.99997747798473,unitless +aircraft:engine:scaled_sls_thrust,22200,0,0,0,0,0,lbf +aircraft:engine:subsonic_fuel_flow_scaler,1,unitless +aircraft:engine:supersonic_fuel_flow_scaler,1,unitless +aircraft:engine:wing_locations,0.289682918,unitless +aircraft:fins:area,0,ft**2 +aircraft:fins:mass_scaler,1,unitless +aircraft:fins:num_fins,0,unitless +aircraft:fins:taper_ratio,-10,unitless +aircraft:fuel:auxiliary_fuel_capacity,0,lbm +aircraft:fuel:density_ratio,1,unitless +aircraft:fuel:fuel_system_mass_scaler,0.93202,unitless +aircraft:fuel:fuselage_fuel_capacity,0,lbm +aircraft:fuel:num_tanks,7,unitless +aircraft:fuel:total_capacity,0,lbm +aircraft:fuel:unusable_fuel_mass_scaler,1,unitless +aircraft:fuel:wing_fuel_capacity,25.903,lbm +aircraft:furnishings:mass_scaler,0.81859,unitless +aircraft:fuselage:laminar_flow_lower,0,unitless +aircraft:fuselage:laminar_flow_upper,0,unitless +aircraft:fuselage:length,125,ft +aircraft:fuselage:mass_scaler,0.69981,unitless +aircraft:fuselage:max_height,13,ft +aircraft:fuselage:max_width,12.3,ft +aircraft:fuselage:military_cargo_floor,False,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,97.5,ft +aircraft:fuselage:wetted_area,4235.082096,ft**2 +aircraft:horizontal_tail:area,349.522730527158,ft**2 +aircraft:horizontal_tail:aspect_ratio,5.22699386503068,unitless +aircraft:horizontal_tail:laminar_flow_lower,0,unitless +aircraft:horizontal_tail:laminar_flow_upper,29,unitless +aircraft:horizontal_tail:mass_scaler,1.42225,unitless +aircraft:horizontal_tail:sweep,30.5853213018973,deg +aircraft:horizontal_tail:taper_ratio,0.2734375,unitless +aircraft:horizontal_tail:thickness_to_chord,0.115,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0,unitless +aircraft:horizontal_tail:wetted_area,576.571192,ft**2 +aircraft:hydraulics:mass_scaler,0.95543,unitless +aircraft:hydraulics:system_pressure,5000,psi +aircraft:instruments:mass_scaler,1.66955,unitless +aircraft:landing_gear:carrier_based,False,unitless +aircraft:landing_gear:drag_coefficient,0.024,unitless +aircraft:landing_gear:main_gear_mass_scaler,0.8846,unitless +aircraft:landing_gear:main_gear_oleo_length,0,inch +aircraft:landing_gear:nose_gear_mass_scaler,0.8846,unitless +aircraft:landing_gear:nose_gear_oleo_length,0,inch +aircraft:nacelle:avg_diameter,7.2,ft +aircraft:nacelle:avg_length,35,ft +aircraft:nacelle:laminar_flow_lower,0,unitless +aircraft:nacelle:laminar_flow_upper,0,unitless +aircraft:nacelle:wetted_area,244.468282,ft**2 +aircraft:paint:mass_per_unit_area,0,lbm/ft**2 +aircraft:propulsion:engine_oil_mass_scaler,1,unitless +aircraft:propulsion:misc_mass_scaler,0,unitless +aircraft:vertical_tail:area,227.184358191707,ft**2 +aircraft:vertical_tail:aspect_ratio,1.77777777777778,unitless +aircraft:vertical_tail:laminar_flow_lower,29,unitless +aircraft:vertical_tail:laminar_flow_upper,29,unitless +aircraft:vertical_tail:mass_scaler,1.42225,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:sweep,39.735053245438,deg +aircraft:vertical_tail:taper_ratio,0.25,unitless +aircraft:vertical_tail:thickness_to_chord,0.1,unitless +aircraft:vertical_tail:wetted_area,445.645658,ft**2 +aircraft:wing:aeroelastic_tailoring_factor,0.33333,unitless +aircraft:wing:airfoil_technology,1.6,unitless +aircraft:wing:area,1220,1,0,0,0,0,ft**2 +aircraft:wing:aspect_ratio,11.5587605382765,1,0,0,0,0,unitless +aircraft:wing:aspect_ratio_reference,11.5587605382765,unitless +aircraft:wing:bending_material_mass_scaler,1,unitless +aircraft:wing:bwb_aft_body_mass_scaler,1,unitless +aircraft:wing:chord_per_semispan,0.273522534166506,0.204274849507037,0.0888152947868224,0.0725353313595661,unitless +aircraft:wing:composite_fraction,0.33333,unitless +aircraft:wing:control_surface_area_ratio,0.333,unitless +aircraft:wing:dihedral,6,deg +aircraft:wing:glove_and_bat,0,ft**2 +aircraft:wing:input_station_dist,0,0.34453777998,0.919,1,unitless +aircraft:wing:laminar_flow_lower,0,unitless +aircraft:wing:laminar_flow_upper,58,unitless +aircraft:wing:load_distribution_control,2,unitless +aircraft:wing:load_fraction,1,unitless +aircraft:wing:load_path_sweep_dist,0,23.6286942529271,23.6286942529271,deg +aircraft:wing:mass_scaler,0.7412,unitless +aircraft:wing:max_camber_at_70_semispan,0.015,unitless +aircraft:wing:misc_mass_scaler,1.7,unitless +aircraft:wing:num_integration_stations,100,unitless +aircraft:wing:shear_control_mass_scaler,0.749,unitless +aircraft:wing:span,118.7505278165,ft +aircraft:wing:span_efficiency_factor,0.95,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:strut_bracing_factor,0,unitless +aircraft:wing:surface_ctrl_mass_scaler,1.77696,unitless +aircraft:wing:sweep,23.6286942529271,0,0,0,0,0,deg +aircraft:wing:taper_ratio,0.265189599754917,0,0,0,0,0,unitless +aircraft:wing:thickness_to_chord,0.12233,0,0,0,0,0,unitless +aircraft:wing:thickness_to_chord_dist,0.14233,0.12233,0.1108,0.1058,unitless +aircraft:wing:thickness_to_chord_reference,0.116565,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0,unitless +aircraft:wing:wetted_area,2210.280228,ft**2 +mission:constraints:max_mach,0.785,unitless +mission:design:gross_mass,1,lbm +mission:design:lift_coefficient,-1,unitless +mission:design:mach,-1,unitless +mission:design:range,3500,NM +mission:design:thrust_takeoff_per_eng,0,lbf +mission:landing:flare_rate,2.2,deg/s +mission:landing:initial_velocity,145,ft/s +mission:landing:lift_coefficient_max,2.5,unitless +mission:summary:cruise_mach,0.785,0,0,0,0,0,unitless +mission:summary:fuel_flow_scaler,1,unitless +mission:takeoff:angle_of_attack_runway,0,deg +mission:takeoff:braking_friction_coefficient,0.35,unitless +mission:takeoff:final_altitude,35,ft +mission:takeoff:fuel_simple,0,lbm +mission:takeoff:lift_coefficient_max,2,unitless +mission:takeoff:rolling_friction_coefficient,0.0175,unitless +mission:takeoff:spoiler_drag_coefficient,0.085,unitless +mission:takeoff:spoiler_lift_coefficient,-0.81,unitless +mission:takeoff:thrust_incidence,0,deg +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS + +# Unconverted Values +AERIN.clapp,2 +AERIN.dratio,1 +AERIN.elodma,0 +AERIN.elodss,0 +AERIN.flldg,8190 +AERIN.flto,8190 +AERIN.thrma,0 +AERIN.thrss,0 +AERIN.xllam,1 +CONFIN.ch,43000,0,0,0,0,0 +CONFIN.fixful,0 +CONFIN.fixspn,0 +CONFIN.gw,180000,1,0,0,0,0 +CONFIN.htvc,1 +CONFIN.pglov,0 +CONFIN.plr,0,0,0,0,0,0 +CONFIN.rotvel,0,0,0,0,0,0 +CONFIN.varth,0,0,0,0,0,0 +CONFIN.vtvc,1 +CONFIN.wsr,0 +ENGDIN.ifill,2 +ENGDIN.maxcr,1 +ENGDIN.ngprt,1 +MISSIN.NPCON,0 +MISSIN.altran,200 +MISSIN.appfff,2 +MISSIN.apprtm,4 +MISSIN.cdfeth,0 +MISSIN.clamax,10000,43000 +MISSIN.clamin,0,10000 +MISSIN.cldcd,0,0 +MISSIN.clmmax,0.45222,0.785 +MISSIN.clmmin,0.3,0.45222 +MISSIN.cralt,43000 +MISSIN.crclmx,1 +MISSIN.crdcd,0 +MISSIN.crmach,0.785 +MISSIN.crmmin,0.45222 +MISSIN.dcwt,1 +MISSIN.deamax,43000 +MISSIN.deamin,0 +MISSIN.decl,0.74 +MISSIN.dedcd,0 +MISSIN.demmax,0.785 +MISSIN.demmin,0.3 +MISSIN.divlim,0 +MISSIN.dtc,0 +MISSIN.dwt,1 +MISSIN.erealt,10000 +MISSIN.eremch,0.45222 +MISSIN.faprfl,0 +MISSIN.feathf,0.5 +MISSIN.ffuel,1 +MISSIN.flrcr,1 +MISSIN.fnox,0 +MISSIN.ftxifl,0 +MISSIN.ftxofl,0 +MISSIN.fwf,-1,-1 +MISSIN.holdtm,20 +MISSIN.hpmin,15000 +MISSIN.iata,0 +MISSIN.icron,0 +MISSIN.idoq,0 +MISSIN.ifaacl,2 +MISSIN.ifaade,-1 +MISSIN.ifeath,0 +MISSIN.iflag,2 +MISSIN.ihopos,2 +MISSIN.indr,0 +MISSIN.ioc,1 +MISSIN.ippcl,1,1 +MISSIN.irs,1 +MISSIN.irw,1 +MISSIN.iskal,1 +MISSIN.ittff,1 +MISSIN.ivs,2 +MISSIN.keasvc,0 +MISSIN.keasvd,0 +MISSIN.maxcl,1,1 +MISSIN.msumpt,1 +MISSIN.mywts,0 +MISSIN.nclimb,2 +MISSIN.nclres,1 +MISSIN.ncrcl,1,1 +MISSIN.ncrhol,1 +MISSIN.ncrres,1 +MISSIN.ncrth,1 +MISSIN.ncruse,1 +MISSIN.nhold,0 +MISSIN.nincl,3,30 +MISSIN.ninde,18 +MISSIN.nodive,1 +MISSIN.npcon,1 +MISSIN.nql,2 +MISSIN.owfact,1 +MISSIN.qlalt,1500,10000 +MISSIN.qlim,425 +MISSIN.rcin,300 +MISSIN.rdlim,-3000 +MISSIN.resrfu,0 +MISSIN.restrp,0.03 +MISSIN.rtol,0.001 +MISSIN.spdlim,288.69 +MISSIN.srealt,1500 +MISSIN.sremch,0.3 +MISSIN.takoff,0 +MISSIN.takotm,2 +MISSIN.taxitm,5 +MISSIN.taxotm,9 +MISSIN.thold,0 +MISSIN.timmap,2 +MISSIN.tlwind,0 +MISSIN.txfufl,0 +MISSIN.vqlm,260,320 +OPTION.ianal,3 +OPTION.icost,0 +OPTION.ifite,0 +OPTION.iland,1 +OPTION.ineng,0 +OPTION.iplths,0 +OPTION.ipltth,2 +OPTION.itakof,1 +OPTION.ixfl,1 +OPTION.lpfile,0 +OPTION.mprint,1 +OPTION.nmach,3 +OPTION.nopro,1 +OPTION.npfile,1 +OPTION.pmach,0.3,0.45222,0.785 +OPTION.polalt,39000 +PCONIN.conalt,43000 +PCONIN.conaux,2 +PCONIN.confm,1 +PCONIN.conlim,300 +PCONIN.conmch,0.785 +PCONIN.connz,1 +PCONIN.conpc,1 +PCONIN.conwt,0 +PCONIN.conwta,0 +PCONIN.iconsg,2 +PCONIN.icontp,5 +PCONIN.icstdg,0 +PCONIN.neo,2 +PROIN.alpmin,0 +PROIN.gamlim,0 +PROIN.ipcmax,1 +PROIN.npol,0 +PROIN.ntime,1 +PROIN.txf,-1 +RERUN.desrng,900 +RERUN.iland,0 +RERUN.iplrng,-1 +RERUN.itakof,0 +RERUN.mywts,1 +SEGIN.dstop,23000 +SEGIN.hstop,10000 +SEGIN.key,'LAST' +SEGIN.nflap,1 +SEGIN.vfix,10 +SEGIN.vstop,288.69 +TOLIN.acclim,16 +TOLIN.almxld,12 +TOLIN.almxto,15 +TOLIN.alpld,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +TOLIN.alprot,8.8 +TOLIN.alpto,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +TOLIN.apa,0 +TOLIN.aprang,-3 +TOLIN.aprhgt,100 +TOLIN.argef,1 +TOLIN.cdeout,0.0046077279938182 +TOLIN.cdld,0.1,0.1,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.2,0.22,0.24,0.26,0.3,0.32,0.34 +TOLIN.cdmld,0.045 +TOLIN.cdmto,0.05 +TOLIN.cdrev,0 +TOLIN.cdto,0.0674,0.065,0.065,0.07,0.072,0.076,0.084,0.09,0.1,0.11,0.12,0.13,0.15,0.16,0.18,0.2 +TOLIN.clld,0.7,0.9,1.05,1.15,1.25,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4 +TOLIN.clldm,2.4 +TOLIN.clrev,0 +TOLIN.clto,0.5178,0.6,0.75,0.85,0.95,1.05,1.15,1.25,1.35,1.5,1.6,1.7,1.8,1.85,1.9,1.95 +TOLIN.cltom,2 +TOLIN.deldfl,2 +TOLIN.delhap,2 +TOLIN.deltcl,0.2 +TOLIN.deltrn,0.25 +TOLIN.deltro,0.2 +TOLIN.delvto,4 +TOLIN.dtct,10 +TOLIN.fcdmld,0.3 +TOLIN.fcdmto,0.3 +TOLIN.fldcd,1 +TOLIN.fldcl,1 +TOLIN.ftocd,1 +TOLIN.ftocl,1 +TOLIN.ibal,2 +TOLIN.igobs,0 +TOLIN.incgef,1 +TOLIN.inthld,2 +TOLIN.inthrv,2 +TOLIN.inthto,2 +TOLIN.irev,0 +TOLIN.ispol,1 +TOLIN.itime,1 +TOLIN.itxout,0 +TOLIN.magrup,1 +TOLIN.noflar,0 +TOLIN.obsld,50 +TOLIN.pilott,1 +TOLIN.revcut,-1000 +TOLIN.rvfact,0 +TOLIN.tdelg,3 +TOLIN.tdsink,8 +TOLIN.thfact,1 +TOLIN.thrld +TOLIN.tibra,0 +TOLIN.tibrak,1.46 +TOLIN.ticut,1.46 +TOLIN.tigear,8 +TOLIN.tirva,0 +TOLIN.tirvrs,2 +TOLIN.tispa,0 +TOLIN.tispol,1.46 +TOLIN.vangl,6 +TOLIN.vrotat,1.05 +TOLIN.whgt,8.6 +WTIN.arfin,-10 +WTIN.cgacon,0 +WTIN.cgais,0 +WTIN.cgammo,0 +WTIN.cgap,0 +WTIN.cgarm,0 +WTIN.cgav,0 +WTIN.cgaxg,0 +WTIN.cgaxt,0 +WTIN.cgcan,0 +WTIN.cgcf,0 +WTIN.cgcr,0 +WTIN.cgcw,0 +WTIN.cgea,0 +WTIN.cgef,0 +WTIN.cgf,0 +WTIN.cgfin,0 +WTIN.cgfwf,0 +WTIN.cght,0 +WTIN.cglgm,0 +WTIN.cglgn,0 +WTIN.cgmis,0 +WTIN.cgp,0 +WTIN.cgrefl,0 +WTIN.cgrefx,0 +WTIN.cgvt,0 +WTIN.cgw,0 +WTIN.cgzwf,0 +WTIN.dldwt,0 +WTIN.einl,1 +WTIN.enoz,1 +WTIN.ifufu,0 +WTIN.ispowe,0 +WTIN.mldwt,0 +WTIN.mywts,0 +WTIN.netaw,4 +WTIN.nwref,39 +WTIN.paylmx,52000 +WTIN.spwcon,38584 +WTIN.spwgw,0.104087 +WTIN.spwsw,9.5 +WTIN.spwth,2.2344 +WTIN.swpfin,-10 +WTIN.tcfin,0 +WTIN.warm,0 +WTIN.wauxt,1 +WTIN.winl,0 +WTIN.wnoz,0 diff --git a/aviary/utils/test/data/converter_test_configuration_GASP.csv b/aviary/utils/test/data/converter_test_configuration_GASP.csv new file mode 100644 index 000000000..5e33e153f --- /dev/null +++ b/aviary/utils/test/data/converter_test_configuration_GASP.csv @@ -0,0 +1,226 @@ +# GASP-derived aircraft input deck converted from configuration_test_data_GASP.dat + +# Input Values +aircraft:air_conditioning:mass_coefficient,1.65,unitless +aircraft:anti_icing:mass,126,lbm +aircraft:apu:mass,1014,lbm +aircraft:avionics:mass,1504,lbm +aircraft:controls:cockpit_control_mass_scaler,1,unitless +aircraft:controls:control_mass_increment,0,lbm +aircraft:controls:stability_augmentation_system_mass,0,lbm +aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless +aircraft:crew_and_payload:cargo_mass,15970,lbm +aircraft:crew_and_payload:catering_items_mass_per_passenger,10,lbm +aircraft:crew_and_payload:design:num_passengers,154,unitless +aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm +aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm +aircraft:crew_and_payload:water_mass_per_occupant,3,lbm +aircraft:design:cg_delta,0.25,unitless +aircraft:design:cockpit_control_mass_coefficient,30,unitless +aircraft:design:drag_increment,0.0014,unitless +aircraft:design:emergency_equipment_mass,0,lbm +aircraft:design:lift_curve_slope,7.1765,1/rad +aircraft:design:max_structural_speed,440,mi/h +aircraft:design:part25_structural_category,3,unitless +aircraft:design:reserve_fuel_additional,0,lbm +aircraft:design:reserve_fuel_fraction,0.15,unitless +aircraft:design:static_margin,0.05,unitless +aircraft:design:structural_mass_increment,0,lbm +aircraft:design:supercritical_drag_shift,0.033,unitless +aircraft:engine:additional_mass_fraction,0.165,unitless +aircraft:engine:global_throttle,True,unitless +aircraft:engine:mass_scaler,1,unitless +aircraft:engine:mass_specific,0.21366,lbm/lbf +aircraft:engine:num_engines,2,unitless +aircraft:engine:pod_mass_scaler,1,unitless +aircraft:engine:pylon_factor,1.25,unitless +aircraft:engine:reference_diameter,5.8,ft +aircraft:engine:reference_sls_thrust,28690,lbf +aircraft:engine:scale_factor,0.7376089229696758,unitless +aircraft:engine:scaled_sls_thrust,21162,lbf +aircraft:engine:type,7,unitless +aircraft:engine:wing_locations,0.2143,unitless +aircraft:fuel:density,6.687,lbm/galUS +aircraft:fuel:fuel_margin,0,unitless +aircraft:fuel:fuel_system_mass_coefficient,0.06,unitless +aircraft:fuel:fuel_system_mass_scaler,1,unitless +aircraft:fuel:unusable_fuel_mass_coefficient,12,unitless +aircraft:fuel:wing_fuel_fraction,0.5625,unitless +aircraft:furnishings:mass,9114,lbm +aircraft:fuselage:aisle_width,24,inch +aircraft:fuselage:delta_diameter,4.5,ft +aircraft:fuselage:flat_plate_area_increment,0.25,ft**2 +aircraft:fuselage:form_factor,1.146,unitless +aircraft:fuselage:length,0,ft +aircraft:fuselage:mass_coefficient,102.82,unitless +aircraft:fuselage:nose_fineness,1,unitless +aircraft:fuselage:num_aisles,1,unitless +aircraft:fuselage:num_seats_abreast,6,unitless +aircraft:fuselage:pilot_compartment_length,6.85,ft +aircraft:fuselage:pressure_differential,7.5,psi +aircraft:fuselage:seat_pitch,44.2,inch +aircraft:fuselage:seat_width,20.2,inch +aircraft:fuselage:tail_fineness,1.18,unitless +aircraft:fuselage:wetted_area_scaler,1,unitless +aircraft:horizontal_tail:area,0,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.025,unitless +aircraft:horizontal_tail:form_factor,1.7,unitless +aircraft:horizontal_tail:mass_coefficient,0.2076,unitless +aircraft:horizontal_tail:moment_ratio,0.13067,unitless +aircraft:horizontal_tail:sweep,43.5,deg +aircraft:horizontal_tail:taper_ratio,0.352,unitless +aircraft:horizontal_tail:thickness_to_chord,0.11,unitless +aircraft:horizontal_tail:vertical_tail_fraction,1,unitless +aircraft:horizontal_tail:volume_coefficient,1.43,unitless +aircraft:hydraulics:flight_control_mass_coefficient,0.085,unitless +aircraft:hydraulics:gear_mass_coefficient,0.105,unitless +aircraft:instruments:mass_coefficient,0.0736,unitless +aircraft:landing_gear:fixed_gear,False,unitless +aircraft:landing_gear:main_gear_location,0,unitless +aircraft:landing_gear:main_gear_mass_coefficient,0.85,unitless +aircraft:landing_gear:mass_coefficient,0.0339,unitless +aircraft:landing_gear:tail_hook_mass_scaler,1,unitless +aircraft:landing_gear:total_mass_scaler,1,unitless +aircraft:nacelle:clearance_ratio,0.2,unitless +aircraft:nacelle:core_diameter_ratio,1.2095,unitless +aircraft:nacelle:fineness,1.715,unitless +aircraft:nacelle:form_factor,1.5,unitless +aircraft:nacelle:mass_specific,2.5,lbm/ft**2 +aircraft:strut:area_ratio,0.32,unitless +aircraft:strut:attachment_location,118,ft +aircraft:strut:dimensional_location_specified,True,unitless +aircraft:strut:fuselage_interference_factor,1.125,unitless +aircraft:strut:mass_coefficient,0.238,unitless +aircraft:strut:thickness_to_chord,0.1,unitless +aircraft:vertical_tail:area,0,ft**2 +aircraft:vertical_tail:aspect_ratio,0.825,unitless +aircraft:vertical_tail:form_factor,2,unitless +aircraft:vertical_tail:mass_coefficient,0.2587,unitless +aircraft:vertical_tail:moment_ratio,3.0496,unitless +aircraft:vertical_tail:sweep,35,deg +aircraft:vertical_tail:taper_ratio,0.801,unitless +aircraft:vertical_tail:thickness_to_chord,0.1,unitless +aircraft:vertical_tail:volume_coefficient,0.066,unitless +aircraft:wing:aspect_ratio,19.565,unitless +aircraft:wing:average_chord,12.615,ft +aircraft:wing:center_distance,0.463,unitless +aircraft:wing:choose_fold_location,False,unitless +aircraft:wing:flap_chord_ratio,0.25,unitless +aircraft:wing:flap_deflection_landing,40,deg +aircraft:wing:flap_deflection_takeoff,10,deg +aircraft:wing:flap_drag_increment_optimum,0.1,unitless +aircraft:wing:flap_lift_increment_optimum,1,unitless +aircraft:wing:flap_span_ratio,0.88,unitless +aircraft:wing:flap_type,double_slotted,unitless +aircraft:wing:fold_dimensional_location_specified,True,unitless +aircraft:wing:fold_mass_coefficient,0.2,unitless +aircraft:wing:folded_span,0,ft +aircraft:wing:fuselage_interference_factor,1.21,unitless +aircraft:wing:has_fold,True,unitless +aircraft:wing:has_strut,True,unitless +aircraft:wing:height,15.2,ft +aircraft:wing:high_lift_mass_coefficient,1.9,unitless +aircraft:wing:incidence,1.5,deg +aircraft:wing:loading,93.1,lbf/ft**2 +aircraft:wing:mass_coefficient,106.28,unitless +aircraft:wing:max_lift_ref,1.15,unitless +aircraft:wing:max_slat_deflection_landing,10,deg +aircraft:wing:max_slat_deflection_takeoff,10,deg +aircraft:wing:max_thickness_location,0.35,unitless +aircraft:wing:min_pressure_location,0.3,unitless +aircraft:wing:mounting_type,1,unitless +aircraft:wing:num_flap_segments,2,unitless +aircraft:wing:optimum_flap_deflection,55,deg +aircraft:wing:optimum_slat_deflection,20,deg +aircraft:wing:slat_chord_ratio,0.1,unitless +aircraft:wing:slat_lift_increment_optimum,0.93,unitless +aircraft:wing:slat_span_ratio,0.9,unitless +aircraft:wing:span,117.8,ft +aircraft:wing:surface_ctrl_mass_coefficient,0.5936,unitless +aircraft:wing:sweep,22.47,deg +aircraft:wing:taper_ratio,0.346,unitless +aircraft:wing:thickness_to_chord_root,0.11,unitless +aircraft:wing:thickness_to_chord_tip,0.1,unitless +aircraft:wing:zero_lift_angle,-1.2,deg +mission:design:cruise_altitude,36000,ft +mission:design:gross_mass,160000,lbm +mission:design:mach,0.8,unitless +mission:design:range,3500,NM +mission:design:rate_of_climb_at_top_of_climb,300,ft/min +mission:landing:airport_altitude,0,ft +mission:landing:braking_delay,1,s +mission:landing:glide_to_stall_ratio,1.3,unitless +mission:landing:maximum_flare_load_factor,1.15,unitless +mission:landing:maximum_sink_rate,900,ft/min +mission:landing:obstacle_height,50,ft +mission:landing:touchdown_sink_rate,5,ft/s +mission:summary:fuel_flow_scaler,1,unitless +mission:takeoff:decision_speed_increment,10,kn +mission:takeoff:rotation_speed_increment,5,kn +mission:taxi:duration,0.1677,h +settings:equations_of_motion,2DOF +settings:mass_method,GASP + +# Initialization Guesses +actual_takeoff_mass,0 +climb_range,0 +cruise_mass_final,0 +flight_duration,0 +fuel_burn_per_passenger_mile,0 +reserves,0 +rotation_mass,0 +time_to_climb,0 + +# Unconverted Values +INGASP.ALR,1.11 +INGASP.BENGOB,0.05 +INGASP.CINP,0.11 +INGASP.CLIAB,1984 +INGASP.CMF,15 +INGASP.CMV,0.15 +INGASP.CRWOH,15 +INGASP.DCDSE,-1 +INGASP.DYR,12 +INGASP.EMCRU,0.8 +INGASP.FCSF,2.5 +INGASP.HBTP,0.472 +INGASP.HIR,0.015 +INGASP.HNCRU,36000 +INGASP.HRI,2500 +INGASP.HSCREQ,25000 +INGASP.ICLM,3 +INGASP.ICRUS,0 +INGASP.IWLD,2 +INGASP.JENGSZ,4 +INGASP.KNAC,1 +INGASP.KODEAC,7 +INGASP.KODECL,7 +INGASP.KODETO,5 +INGASP.KODETR,6 +INGASP.MX,0 +INGASP.NFAIL,0 +INGASP.OFALT,0 +INGASP.OFEM,0.78 +INGASP.OHR,350 +INGASP.PRV,0.15 +INGASP.RCCRU,100 +INGASP.RELP,0 +INGASP.RELR,0.4524 +INGASP.RF,0.05,125,20000,25000 +INGASP.RI,0.8 +INGASP.ROSCAB,9999 +INGASP.RWCRTX,0.985 +INGASP.SKPES,0.258 +INGASP.SM1D,0.625 +INGASP.SRPM,18000 +INGASP.TBO,3500 +INGASP.TDELLD,27 +INGASP.TDELTO,27 +INGASP.TR,1 +INGASP.VCLMB,270 +INGASP.WENG,4218 +INGASP.WLPCT,0.9423 +INGASP.WNAC,1240 +INGASP.WPLX,0 +INGASP.WPYLON,0 +INGASP.XTORQ,8000 diff --git a/aviary/utils/test/data/converter_test_large_single_aisle_1_GASP.csv b/aviary/utils/test/data/converter_test_large_single_aisle_1_GASP.csv new file mode 100644 index 000000000..79a79d9cc --- /dev/null +++ b/aviary/utils/test/data/converter_test_large_single_aisle_1_GASP.csv @@ -0,0 +1,226 @@ +# GASP-derived aircraft input deck converted from large_single_aisle_1_GASP.dat + +# Input Values +aircraft:air_conditioning:mass_coefficient,1.65,unitless +aircraft:anti_icing:mass,551,lbm +aircraft:apu:mass,928,lbm +aircraft:avionics:mass,1959,lbm +aircraft:controls:cockpit_control_mass_scaler,1,unitless +aircraft:controls:control_mass_increment,0,lbm +aircraft:controls:stability_augmentation_system_mass,0,lbm +aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless +aircraft:crew_and_payload:cargo_mass,10040,lbm +aircraft:crew_and_payload:catering_items_mass_per_passenger,7.6,lbm +aircraft:crew_and_payload:design:num_passengers,180,unitless +aircraft:crew_and_payload:passenger_mass_with_bags,200,lbm +aircraft:crew_and_payload:passenger_service_mass_per_passenger,5,lbm +aircraft:crew_and_payload:water_mass_per_occupant,3,lbm +aircraft:design:cg_delta,0.25,unitless +aircraft:design:cockpit_control_mass_coefficient,16.5,unitless +aircraft:design:drag_increment,0.00175,unitless +aircraft:design:emergency_equipment_mass,50,lbm +aircraft:design:lift_curve_slope,7.1765,1/rad +aircraft:design:max_structural_speed,402.5,mi/h +aircraft:design:part25_structural_category,3,unitless +aircraft:design:reserve_fuel_additional,4998,lbm +aircraft:design:reserve_fuel_fraction,0,unitless +aircraft:design:static_margin,0.03,unitless +aircraft:design:structural_mass_increment,0,lbm +aircraft:design:supercritical_drag_shift,0.033,unitless +aircraft:engine:additional_mass_fraction,0.14,unitless +aircraft:engine:global_throttle,True,unitless +aircraft:engine:mass_scaler,1,unitless +aircraft:engine:mass_specific,0.21366,lbm/lbf +aircraft:engine:num_engines,2,unitless +aircraft:engine:pod_mass_scaler,1,unitless +aircraft:engine:pylon_factor,1.25,unitless +aircraft:engine:reference_diameter,5.8,ft +aircraft:engine:reference_sls_thrust,28690,lbf +aircraft:engine:scale_factor,1.0,unitless +aircraft:engine:scaled_sls_thrust,28690,lbf +aircraft:engine:type,7,unitless +aircraft:engine:wing_locations,0.35,unitless +aircraft:fuel:density,6.687,lbm/galUS +aircraft:fuel:fuel_margin,0,unitless +aircraft:fuel:fuel_system_mass_coefficient,0.041,unitless +aircraft:fuel:fuel_system_mass_scaler,1,unitless +aircraft:fuel:unusable_fuel_mass_coefficient,12,unitless +aircraft:fuel:wing_fuel_fraction,0.6,unitless +aircraft:furnishings:mass,11192,lbm +aircraft:fuselage:aisle_width,24,inch +aircraft:fuselage:delta_diameter,4.5,ft +aircraft:fuselage:flat_plate_area_increment,0.25,ft**2 +aircraft:fuselage:form_factor,1.25,unitless +aircraft:fuselage:length,0,ft +aircraft:fuselage:mass_coefficient,128,unitless +aircraft:fuselage:nose_fineness,1,unitless +aircraft:fuselage:num_aisles,1,unitless +aircraft:fuselage:num_seats_abreast,6,unitless +aircraft:fuselage:pilot_compartment_length,9.5,ft +aircraft:fuselage:pressure_differential,7.5,psi +aircraft:fuselage:seat_pitch,29,inch +aircraft:fuselage:seat_width,20.2,inch +aircraft:fuselage:tail_fineness,3,unitless +aircraft:fuselage:wetted_area,4000,ft**2 +aircraft:horizontal_tail:area,0,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.75,unitless +aircraft:horizontal_tail:form_factor,1.25,unitless +aircraft:horizontal_tail:mass_coefficient,0.232,unitless +aircraft:horizontal_tail:moment_ratio,0.2307,unitless +aircraft:horizontal_tail:sweep,25,deg +aircraft:horizontal_tail:taper_ratio,0.352,unitless +aircraft:horizontal_tail:thickness_to_chord,0.12,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0,unitless +aircraft:horizontal_tail:volume_coefficient,1.189,unitless +aircraft:hydraulics:flight_control_mass_coefficient,0.112,unitless +aircraft:hydraulics:gear_mass_coefficient,0.14,unitless +aircraft:instruments:mass_coefficient,0.0736,unitless +aircraft:landing_gear:fixed_gear,False,unitless +aircraft:landing_gear:main_gear_location,0.15,unitless +aircraft:landing_gear:main_gear_mass_coefficient,0.85,unitless +aircraft:landing_gear:mass_coefficient,0.04,unitless +aircraft:landing_gear:tail_hook_mass_scaler,1,unitless +aircraft:landing_gear:total_mass_scaler,1,unitless +aircraft:nacelle:clearance_ratio,0.2,unitless +aircraft:nacelle:core_diameter_ratio,1.25,unitless +aircraft:nacelle:fineness,2,unitless +aircraft:nacelle:form_factor,1.5,unitless +aircraft:nacelle:mass_specific,3,lbm/ft**2 +aircraft:strut:area_ratio,0,unitless +aircraft:strut:attachment_location,0,ft +aircraft:strut:attachment_location_dimensionless,0,unitless +aircraft:strut:dimensional_location_specified,False,unitless +aircraft:strut:fuselage_interference_factor,0,unitless +aircraft:strut:mass_coefficient,0,unitless +aircraft:strut:thickness_to_chord,0,unitless +aircraft:vertical_tail:area,0,ft**2 +aircraft:vertical_tail:aspect_ratio,1.67,unitless +aircraft:vertical_tail:form_factor,1.25,unitless +aircraft:vertical_tail:mass_coefficient,0.289,unitless +aircraft:vertical_tail:moment_ratio,2.362,unitless +aircraft:vertical_tail:sweep,35,deg +aircraft:vertical_tail:taper_ratio,0.801,unitless +aircraft:vertical_tail:thickness_to_chord,0.12,unitless +aircraft:vertical_tail:volume_coefficient,0.145,unitless +aircraft:wing:aspect_ratio,10.13,unitless +aircraft:wing:average_chord,12.615,ft +aircraft:wing:center_distance,0.463,unitless +aircraft:wing:choose_fold_location,True,unitless +aircraft:wing:flap_chord_ratio,0.3,unitless +aircraft:wing:flap_deflection_landing,40,deg +aircraft:wing:flap_deflection_takeoff,10,deg +aircraft:wing:flap_drag_increment_optimum,0.1,unitless +aircraft:wing:flap_lift_increment_optimum,1.5,unitless +aircraft:wing:flap_span_ratio,0.65,unitless +aircraft:wing:flap_type,double_slotted,unitless +aircraft:wing:fold_dimensional_location_specified,False,unitless +aircraft:wing:fold_mass_coefficient,0,unitless +aircraft:wing:folded_span,0,ft +aircraft:wing:form_factor,1.25,unitless +aircraft:wing:fuselage_interference_factor,1.1,unitless +aircraft:wing:has_fold,False,unitless +aircraft:wing:has_strut,False,unitless +aircraft:wing:height,8,ft +aircraft:wing:high_lift_mass_coefficient,1.9,unitless +aircraft:wing:incidence,1.5,deg +aircraft:wing:loading,128,lbf/ft**2 +aircraft:wing:mass_coefficient,102.5,unitless +aircraft:wing:max_lift_ref,1.15,unitless +aircraft:wing:max_slat_deflection_landing,10,deg +aircraft:wing:max_slat_deflection_takeoff,10,deg +aircraft:wing:max_thickness_location,0.4,unitless +aircraft:wing:min_pressure_location,0.3,unitless +aircraft:wing:mounting_type,0,unitless +aircraft:wing:num_flap_segments,2,unitless +aircraft:wing:optimum_flap_deflection,55,deg +aircraft:wing:optimum_slat_deflection,20,deg +aircraft:wing:slat_chord_ratio,0.15,unitless +aircraft:wing:slat_lift_increment_optimum,0.93,unitless +aircraft:wing:slat_span_ratio,0.9,unitless +aircraft:wing:span,117.8,ft +aircraft:wing:surface_ctrl_mass_coefficient,0.95,unitless +aircraft:wing:sweep,25,deg +aircraft:wing:taper_ratio,0.33,unitless +aircraft:wing:thickness_to_chord_root,0.15,unitless +aircraft:wing:thickness_to_chord_tip,0.12,unitless +aircraft:wing:zero_lift_angle,-1.2,deg +mission:design:cruise_altitude,37500,ft +mission:design:gross_mass,175400,lbm +mission:design:mach,0.8,unitless +mission:design:range,3675,NM +mission:design:rate_of_climb_at_top_of_climb,300,ft/min +mission:landing:airport_altitude,0,ft +mission:landing:braking_delay,1,s +mission:landing:glide_to_stall_ratio,1.3,unitless +mission:landing:maximum_flare_load_factor,1.15,unitless +mission:landing:maximum_sink_rate,900,ft/min +mission:landing:obstacle_height,50,ft +mission:landing:touchdown_sink_rate,5,ft/s +mission:summary:fuel_flow_scaler,1,unitless +mission:takeoff:decision_speed_increment,10,kn +mission:takeoff:rotation_speed_increment,5,kn +mission:taxi:duration,0.1677,h +settings:equations_of_motion,2DOF +settings:mass_method,GASP + +# Initialization Guesses +actual_takeoff_mass,0 +climb_range,0 +cruise_mass_final,0 +flight_duration,0 +fuel_burn_per_passenger_mile,0 +reserves,0 +rotation_mass,0 +time_to_climb,0 + +# Unconverted Values +INGASP.ALR,1.11 +INGASP.BENGOB,0.05 +INGASP.CINP,0.11 +INGASP.CLIAB,1984 +INGASP.CMF,15 +INGASP.CMV,0.15 +INGASP.CRWOH,15 +INGASP.DCDSE,-1 +INGASP.DYR,12 +INGASP.EMCRU,0.8 +INGASP.FCSF,2.5 +INGASP.FPYLND,1 +INGASP.HBTP,0.333 +INGASP.HIR,0.015 +INGASP.HNCRU,37500 +INGASP.HRI,2500 +INGASP.HSCREQ,20000 +INGASP.ICLM,3 +INGASP.ICRUS,0 +INGASP.IWLD,2 +INGASP.JENGSZ,4 +INGASP.KNAC,1 +INGASP.KODEAC,7 +INGASP.KODECL,7 +INGASP.KODETO,5 +INGASP.KODETR,6 +INGASP.MX,0 +INGASP.NFAIL,0 +INGASP.OFALT,0 +INGASP.OFEM,0.78 +INGASP.OHR,350 +INGASP.PRV,0.15 +INGASP.RELP,0 +INGASP.RELR,0.4524 +INGASP.RF,0.05,125,20000,25000 +INGASP.RI,0.8 +INGASP.ROSCAB,9999 +INGASP.RWCRTX,0.985 +INGASP.SKPES,0.258 +INGASP.SM1D,0.625 +INGASP.SRPM,18000 +INGASP.TBO,3500 +INGASP.TR,1 +INGASP.VCLMB,270 +INGASP.WENG,6130 +INGASP.WLPCT,0.9423 +INGASP.WNAC,0 +INGASP.WPLX,0 +INGASP.WPYLON,0 +INGASP.XTORQ,8000 diff --git a/aviary/utils/test/data/converter_test_small_single_aisle_GASP.csv b/aviary/utils/test/data/converter_test_small_single_aisle_GASP.csv new file mode 100644 index 000000000..1465fbf34 --- /dev/null +++ b/aviary/utils/test/data/converter_test_small_single_aisle_GASP.csv @@ -0,0 +1,230 @@ +# GASP-derived aircraft input deck converted from small_single_aisle_GASP.dat + +# Input Values +aircraft:air_conditioning:mass_coefficient,1.65,unitless +aircraft:anti_icing:mass,397,lbm +aircraft:apu:mass,778,lbm +aircraft:avionics:mass,1349,lbm +aircraft:controls:cockpit_control_mass_scaler,1,unitless +aircraft:controls:control_mass_increment,0,lbm +aircraft:controls:stability_augmentation_system_mass,0,lbm +aircraft:controls:stability_augmentation_system_mass_scaler,1,unitless +aircraft:crew_and_payload:cargo_mass,8598,lbm +aircraft:crew_and_payload:catering_items_mass_per_passenger,6,lbm +aircraft:crew_and_payload:design:num_passengers,96,unitless +aircraft:crew_and_payload:passenger_mass_with_bags,210,lbm +aircraft:crew_and_payload:passenger_service_mass_per_passenger,7.6,lbm +aircraft:crew_and_payload:water_mass_per_occupant,3,lbm +aircraft:design:cg_delta,0.25,unitless +aircraft:design:cockpit_control_mass_coefficient,16.5,unitless +aircraft:design:drag_increment,0.0018,unitless +aircraft:design:emergency_equipment_mass,50,lbm +aircraft:design:lift_curve_slope,7.1765,1/rad +aircraft:design:max_structural_speed,402.5,mi/h +aircraft:design:part25_structural_category,3,unitless +aircraft:design:reserve_fuel_additional,0,lbm +aircraft:design:reserve_fuel_fraction,0.125,unitless +aircraft:design:static_margin,0.05,unitless +aircraft:design:structural_mass_increment,0,lbm +aircraft:design:supercritical_drag_shift,0.025,unitless +aircraft:engine:additional_mass_fraction,0.14,unitless +aircraft:engine:global_throttle,True,unitless +aircraft:engine:mass_scaler,1,unitless +aircraft:engine:mass_specific,0.2153,lbm/lbf +aircraft:engine:num_engines,2,unitless +aircraft:engine:pod_mass_scaler,1,unitless +aircraft:engine:pylon_factor,0.6,unitless +aircraft:engine:reference_diameter,5.8,ft +aircraft:engine:reference_sls_thrust,28690,lbf +aircraft:engine:scale_factor,0.8295573370512374,unitless +aircraft:engine:scaled_sls_thrust,23800,lbf +aircraft:engine:type,7,unitless +aircraft:engine:wing_locations,0.272,unitless +aircraft:fuel:density,6.687,lbm/galUS +aircraft:fuel:fuel_margin,0,unitless +aircraft:fuel:fuel_system_mass_coefficient,0.0333,unitless +aircraft:fuel:fuel_system_mass_scaler,1,unitless +aircraft:fuel:unusable_fuel_mass_coefficient,12,unitless +aircraft:fuel:wing_fuel_fraction,0.6,unitless +aircraft:furnishings:mass,9071,lbm +aircraft:fuselage:aisle_width,19,inch +aircraft:fuselage:delta_diameter,4.25,ft +aircraft:fuselage:flat_plate_area_increment,0.25,ft**2 +aircraft:fuselage:form_factor,1.55,unitless +aircraft:fuselage:length,0,ft +aircraft:fuselage:mass_coefficient,121.2,unitless +aircraft:fuselage:nose_fineness,0.845,unitless +aircraft:fuselage:num_aisles,1,unitless +aircraft:fuselage:num_seats_abreast,4,unitless +aircraft:fuselage:pilot_compartment_length,11.7,ft +aircraft:fuselage:pressure_differential,7.5,psi +aircraft:fuselage:seat_pitch,31,inch +aircraft:fuselage:seat_width,24,inch +aircraft:fuselage:tail_fineness,3.368,unitless +aircraft:fuselage:wetted_area_scaler,1,unitless +aircraft:horizontal_tail:area,0,ft**2 +aircraft:horizontal_tail:aspect_ratio,4.26,unitless +aircraft:horizontal_tail:form_factor,1.55,unitless +aircraft:horizontal_tail:mass_coefficient,0.325,unitless +aircraft:horizontal_tail:moment_ratio,0.1844,unitless +aircraft:horizontal_tail:sweep,34.7,deg +aircraft:horizontal_tail:taper_ratio,0.381,unitless +aircraft:horizontal_tail:thickness_to_chord,0.107,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0,unitless +aircraft:horizontal_tail:volume_coefficient,1.2266,unitless +aircraft:hydraulics:flight_control_mass_coefficient,0.112,unitless +aircraft:hydraulics:gear_mass_coefficient,0.14,unitless +aircraft:instruments:mass_coefficient,0.06,unitless +aircraft:landing_gear:fixed_gear,False,unitless +aircraft:landing_gear:main_gear_location,0.199,unitless +aircraft:landing_gear:main_gear_mass_coefficient,0.85,unitless +aircraft:landing_gear:mass_coefficient,0.036,unitless +aircraft:landing_gear:tail_hook_mass_scaler,1,unitless +aircraft:landing_gear:total_mass_scaler,1,unitless +aircraft:nacelle:clearance_ratio,0.2,unitless +aircraft:nacelle:core_diameter_ratio,1.265,unitless +aircraft:nacelle:fineness,1.505,unitless +aircraft:nacelle:form_factor,1.5,unitless +aircraft:nacelle:mass_specific,3,lbm/ft**2 +aircraft:strut:area_ratio,0,unitless +aircraft:strut:attachment_location,0,ft +aircraft:strut:attachment_location_dimensionless,0,unitless +aircraft:strut:dimensional_location_specified,False,unitless +aircraft:strut:fuselage_interference_factor,0,unitless +aircraft:strut:mass_coefficient,0,unitless +aircraft:vertical_tail:area,0,ft**2 +aircraft:vertical_tail:aspect_ratio,1.84,unitless +aircraft:vertical_tail:form_factor,1.55,unitless +aircraft:vertical_tail:mass_coefficient,0.425,unitless +aircraft:vertical_tail:moment_ratio,1.9409,unitless +aircraft:vertical_tail:sweep,29.95,deg +aircraft:vertical_tail:taper_ratio,0.267,unitless +aircraft:vertical_tail:thickness_to_chord,0.13,unitless +aircraft:vertical_tail:volume_coefficient,0.08105,unitless +aircraft:wing:aspect_ratio,11.03,unitless +aircraft:wing:average_chord,12.615,ft +aircraft:wing:center_distance,0.463,unitless +aircraft:wing:choose_fold_location,True,unitless +aircraft:wing:flap_chord_ratio,0.15,unitless +aircraft:wing:flap_deflection_landing,40,deg +aircraft:wing:flap_deflection_takeoff,5,deg +aircraft:wing:flap_drag_increment_optimum,0.1,unitless +aircraft:wing:flap_lift_increment_optimum,1.5,unitless +aircraft:wing:flap_span_ratio,0.863,unitless +aircraft:wing:flap_type,single_slotted,unitless +aircraft:wing:fold_dimensional_location_specified,False,unitless +aircraft:wing:fold_mass_coefficient,0,unitless +aircraft:wing:folded_span,0,ft +aircraft:wing:form_factor,1.55,unitless +aircraft:wing:fuselage_interference_factor,1.25,unitless +aircraft:wing:has_fold,False,unitless +aircraft:wing:has_strut,False,unitless +aircraft:wing:height,6.5,ft +aircraft:wing:high_lift_mass_coefficient,1.9,unitless +aircraft:wing:incidence,1.5,deg +aircraft:wing:loading,112.6,lbf/ft**2 +aircraft:wing:mass_coefficient,108.75,unitless +aircraft:wing:max_lift_ref,1.4,unitless +aircraft:wing:max_slat_deflection_landing,10,deg +aircraft:wing:max_slat_deflection_takeoff,10,deg +aircraft:wing:max_thickness_location,0.35,unitless +aircraft:wing:min_pressure_location,0.3,unitless +aircraft:wing:mounting_type,0,unitless +aircraft:wing:num_flap_segments,2,unitless +aircraft:wing:optimum_flap_deflection,20,deg +aircraft:wing:optimum_slat_deflection,20,deg +aircraft:wing:slat_chord_ratio,0.1,unitless +aircraft:wing:slat_lift_increment_optimum,0.93,unitless +aircraft:wing:slat_span_ratio,0.9,unitless +aircraft:wing:span,117.8,ft +aircraft:wing:surface_ctrl_mass_coefficient,0.845,unitless +aircraft:wing:sweep,26.34,deg +aircraft:wing:taper_ratio,0.301,unitless +aircraft:wing:thickness_to_chord_root,0.1125,unitless +aircraft:wing:thickness_to_chord_tip,0.12,unitless +aircraft:wing:zero_lift_angle,-1.2,deg +mission:design:cruise_altitude,37000,ft +mission:design:gross_mass,124780,lbm +mission:design:mach,0.78,unitless +mission:design:range,3480,NM +mission:design:rate_of_climb_at_top_of_climb,300,ft/min +mission:landing:airport_altitude,0,ft +mission:landing:braking_delay,1,s +mission:landing:glide_to_stall_ratio,1.3,unitless +mission:landing:maximum_flare_load_factor,1.15,unitless +mission:landing:maximum_sink_rate,900,ft/min +mission:landing:obstacle_height,50,ft +mission:landing:touchdown_sink_rate,5,ft/s +mission:summary:fuel_flow_scaler,1,unitless +mission:takeoff:decision_speed_increment,10,kn +mission:takeoff:rotation_speed_increment,5,kn +mission:taxi:duration,0.3333,h +settings:equations_of_motion,2DOF +settings:mass_method,GASP + +# Initialization Guesses +actual_takeoff_mass,0 +climb_range,0 +cruise_mass_final,0 +flight_duration,0 +fuel_burn_per_passenger_mile,0 +reserves,0 +rotation_mass,0 +time_to_climb,0 + +# Unconverted Values +INGASP.ALR,1.11 +INGASP.BENGOB,0 +INGASP.CINP,0.11 +INGASP.CLIAB,2021 +INGASP.CMF,15 +INGASP.CMV,0.15 +INGASP.CRWOH,15 +INGASP.DCDSE,0 +INGASP.DYR,12 +INGASP.EMCRU,0.78 +INGASP.FCSF,4.66 +INGASP.HBTP,0.45 +INGASP.HIR,0.015 +INGASP.HNCRU,37000 +INGASP.HQBWGLT,0 +INGASP.HRI,5000000 +INGASP.HSCREQ,0 +INGASP.HTMAX,1500 +INGASP.ICLM,3 +INGASP.ICRUS,10 +INGASP.IFERRY,0 +INGASP.ISWING,0 +INGASP.IWLD,2 +INGASP.JENGSZ,4 +INGASP.KNAC,1 +INGASP.KODEAC,7 +INGASP.KODECL,7 +INGASP.KODETO,5 +INGASP.KODETR,6 +INGASP.MX,0 +INGASP.NFAIL,0 +INGASP.OFALT,0 +INGASP.OFEM,0.78 +INGASP.OHR,350 +INGASP.PRV,0.15 +INGASP.RELP,0 +INGASP.RF,2,100,26400,1500 +INGASP.RI,0.8 +INGASP.ROSCAB,9999 +INGASP.RWCRTX,0.985 +INGASP.SKPES,0.258 +INGASP.SLMWGLT,0 +INGASP.SM1D,0.575 +INGASP.SRPM,18000 +INGASP.TBO,0 +INGASP.TDELLD,0 +INGASP.TDELTO,27 +INGASP.TDELTX,0 +INGASP.TR,1 +INGASP.UWTWGLT,7.5 +INGASP.VCLMB,265 +INGASP.WLPCT,0.9423 +INGASP.WPLX,0 +INGASP.XLFMAX,1.1 +INGASP.XTORQ,8000 diff --git a/aviary/utils/test/csv_test.csv b/aviary/utils/test/data/csv_test.csv similarity index 100% rename from aviary/utils/test/csv_test.csv rename to aviary/utils/test/data/csv_test.csv diff --git a/aviary/utils/test/flops_test_polar.txt b/aviary/utils/test/data/flops_test_polar.txt similarity index 100% rename from aviary/utils/test/flops_test_polar.txt rename to aviary/utils/test/data/flops_test_polar.txt diff --git a/aviary/utils/test/test_drag_polar_data.csv b/aviary/utils/test/data/test_drag_polar_data.csv similarity index 97% rename from aviary/utils/test/test_drag_polar_data.csv rename to aviary/utils/test/data/test_drag_polar_data.csv index 558d2b8ff..c762e6653 100644 --- a/aviary/utils/test/test_drag_polar_data.csv +++ b/aviary/utils/test/data/test_drag_polar_data.csv @@ -1,145 +1,145 @@ -altitude ,mach_number ,angle_of_attack,lift_coefficient, total_drag_coefficient -0,0.2,-2,0.094876064,0.009822906 -0,0.2,0,0.312245244,0.012348892 -0,0.2,2,0.526732695,0.018104994 -0,0.2,4,0.738624783,0.026931199 -0,0.2,6,0.948256669,0.038891873 -0,0.2,10,1.37381249,0.072045321 -0,0.4,-2,0.10109343,0.00897394 -0,0.4,0,0.331242642,0.011794696 -0,0.4,2,0.558215806,0.018197124 -0,0.4,4,0.78234899,0.028002964 -0,0.4,6,1.00403071,0.041269684 -0,0.4,10,1.4548071,0.078202412 -0,0.5,-2,0.106943991,0.008799865 -0,0.5,0,0.348482284,0.011907858 -0,0.5,2,0.586591715,0.018925735 -0,0.5,4,0.821646945,0.029659873 -0,0.5,6,1.0540806,0.044158552 -0,0.5,10,1.52725612,0.084663215 -0,0.6,-2,0.116201724,0.008755005 -0,0.6,0,0.374581734,0.012332239 -0,0.6,2,0.628753876,0.020345718 -0,0.6,4,0.880405735,0.032546498 -0,0.6,6,1.12886908,0.048978839 -0,0.6,10,1.63519161,0.095162308 -0,0.7,-2,0.132280494,0.008902517 -0,0.7,0,0.416816813,0.013336078 -0,0.7,2,0.696795397,0.023089868 -0,0.7,4,0.973468481,0.037876912 -0,0.7,6,1.24662498,0.057702287 -0,0.7,10,1.80500261,0.113703109 -0,0.8,-2,0.167428501,0.00957739 -0,0.8,0,0.497855602,0.016016403 -0,0.8,2,0.823365761,0.029601436 -0,0.8,4,1.14426867,0.049986007 -0,0.8,6,1.46094114,0.07706223 -0,0.8,10,2.11188335,0.153895725 -20000,0.2,-2,0.094876064,0.010748936 -20000,0.2,0,0.312245244,0.013278551 -20000,0.2,2,0.526732695,0.019035924 -20000,0.2,4,0.738624783,0.027861195 -20000,0.2,6,0.948256669,0.039818804 -20000,0.2,10,1.37381249,0.072958942 -20000,0.4,-2,0.10109343,0.009771491 -20000,0.4,0,0.331242642,0.01259557 -20000,0.4,2,0.558215806,0.018999276 -20000,0.4,4,0.78234899,0.028804499 -20000,0.4,6,1.00403071,0.042068785 -20000,0.4,10,1.4548071,0.078990525 -20000,0.5,-2,0.106943991,0.009561 -20000,0.5,0,0.348482284,0.012672322 -20000,0.5,2,0.586591715,0.019691561 -20000,0.5,4,0.821646945,0.030425263 -20000,0.5,6,1.0540806,0.044921782 -20000,0.5,10,1.52725612,0.085416334 -20000,0.6,-2,0.116201724,0.009487973 -20000,0.6,0,0.374581734,0.013068627 -20000,0.6,2,0.628753876,0.021083571 -20000,0.6,4,0.880405735,0.03328418 -20000,0.6,6,1.12886908,0.04971467 -20000,0.6,10,1.63519161,0.095888927 -20000,0.7,-2,0.132280494,0.009612703 -20000,0.7,0,0.416816813,0.014049894 -20000,0.7,2,0.696795397,0.023805393 -20000,0.7,4,0.973468481,0.038592556 -20000,0.7,6,1.24662498,0.058416441 -20000,0.7,10,1.80500261,0.11440913 -20000,0.8,-2,0.167428501,0.010268506 -20000,0.8,0,0.497855602,0.016711584 -20000,0.8,2,0.823365761,0.030298771 -20000,0.8,4,1.14426867,0.050683899 -20000,0.8,6,1.46094114,0.077759149 -20000,0.8,10,2.11188335,0.154586048 -30000,0.2,-2,0.094876064,0.01132055 -30000,0.2,0,0.312245244,0.013852395 -30000,0.2,2,0.526732695,0.019610547 -30000,0.2,4,0.738624783,0.028435235 -30000,0.2,6,0.948256669,0.040390954 -30000,0.2,10,1.37381249,0.073522871 -30000,0.4,-2,0.10109343,0.010261747 -30000,0.4,0,0.331242642,0.013087861 -30000,0.4,2,0.558215806,0.019492345 -30000,0.4,4,0.78234899,0.029297188 -30000,0.4,6,1.00403071,0.042559974 -30000,0.4,10,1.4548071,0.079474954 -30000,0.5,-2,0.106943991,0.010028278 -30000,0.5,0,0.348482284,0.013141634 -30000,0.5,2,0.586591715,0.020161704 -30000,0.5,4,0.821646945,0.030895132 -30000,0.5,6,1.0540806,0.045390324 -30000,0.5,10,1.52725612,0.085878672 -30000,0.6,-2,0.116201724,0.009937502 -30000,0.6,0,0.374581734,0.013520245 -30000,0.6,2,0.628753876,0.02153608 -30000,0.6,4,0.880405735,0.033736581 -30000,0.6,6,1.12886908,0.050165931 -30000,0.6,10,1.63519161,0.09633454 -30000,0.7,-2,0.132280494,0.010047891 -30000,0.7,0,0.416816813,0.0144873 -30000,0.7,2,0.696795397,0.024243841 -30000,0.7,4,0.973468481,0.039031073 -30000,0.7,6,1.24662498,0.058854041 -30000,0.7,10,1.80500261,0.114841741 -30000,0.8,-2,0.167428501,0.010691707 -30000,0.8,0,0.497855602,0.017137263 -30000,0.8,2,0.823365761,0.030725762 -30000,0.8,4,1.14426867,0.051111226 -30000,0.8,6,1.46094114,0.078185878 -30000,0.8,10,2.11188335,0.155008735 -40000,0.2,-2,0.094876064,0.012082662 -40000,0.2,0,0.312245244,0.01461747 -40000,0.2,2,0.526732695,0.020376651 -40000,0.2,4,0.738624783,0.029200558 -40000,0.2,6,0.948256669,0.041153752 -40000,0.2,10,1.37381249,0.074274716 -40000,0.4,-2,0.10109343,0.010913067 -40000,0.4,0,0.331242642,0.013741874 -40000,0.4,2,0.558215806,0.020147387 -40000,0.4,4,0.78234899,0.029951717 -40000,0.4,6,1.00403071,0.04321251 -40000,0.4,10,1.4548071,0.080118518 -40000,0.5,-2,0.106943991,0.0106484 -40000,0.5,0,0.348482284,0.013764447 -40000,0.5,2,0.586591715,0.020785612 -40000,0.5,4,0.821646945,0.031518677 -40000,0.5,6,1.0540806,0.046012099 -40000,0.5,10,1.52725612,0.086492212 -40000,0.6,-2,0.116201724,0.010533556 -40000,0.6,0,0.374581734,0.014119058 -40000,0.6,2,0.628753876,0.02213607 -40000,0.6,4,0.880405735,0.034336421 -40000,0.6,6,1.12886908,0.05076426 -40000,0.6,10,1.63519161,0.096925373 -40000,0.7,-2,0.132280494,0.010624519 -40000,0.7,0,0.416816813,0.015066856 -40000,0.7,2,0.696795397,0.024824771 -40000,0.7,4,0.973468481,0.039612086 -40000,0.7,6,1.24662498,0.059433833 -40000,0.7,10,1.80500261,0.115414928 -40000,0.8,-2,0.167428501,0.011252107 -40000,0.8,0,0.497855602,0.017700938 -40000,0.8,2,0.823365761,0.031291167 -40000,0.8,4,1.14426867,0.051677067 -40000,0.8,6,1.46094114,0.078750926 -40000,0.8,10,2.11188335,0.155568425 +altitude ,mach_number ,angle_of_attack,lift_coefficient, total_drag_coefficient +0,0.2,-2,0.094876064,0.009822906 +0,0.2,0,0.312245244,0.012348892 +0,0.2,2,0.526732695,0.018104994 +0,0.2,4,0.738624783,0.026931199 +0,0.2,6,0.948256669,0.038891873 +0,0.2,10,1.37381249,0.072045321 +0,0.4,-2,0.10109343,0.00897394 +0,0.4,0,0.331242642,0.011794696 +0,0.4,2,0.558215806,0.018197124 +0,0.4,4,0.78234899,0.028002964 +0,0.4,6,1.00403071,0.041269684 +0,0.4,10,1.4548071,0.078202412 +0,0.5,-2,0.106943991,0.008799865 +0,0.5,0,0.348482284,0.011907858 +0,0.5,2,0.586591715,0.018925735 +0,0.5,4,0.821646945,0.029659873 +0,0.5,6,1.0540806,0.044158552 +0,0.5,10,1.52725612,0.084663215 +0,0.6,-2,0.116201724,0.008755005 +0,0.6,0,0.374581734,0.012332239 +0,0.6,2,0.628753876,0.020345718 +0,0.6,4,0.880405735,0.032546498 +0,0.6,6,1.12886908,0.048978839 +0,0.6,10,1.63519161,0.095162308 +0,0.7,-2,0.132280494,0.008902517 +0,0.7,0,0.416816813,0.013336078 +0,0.7,2,0.696795397,0.023089868 +0,0.7,4,0.973468481,0.037876912 +0,0.7,6,1.24662498,0.057702287 +0,0.7,10,1.80500261,0.113703109 +0,0.8,-2,0.167428501,0.00957739 +0,0.8,0,0.497855602,0.016016403 +0,0.8,2,0.823365761,0.029601436 +0,0.8,4,1.14426867,0.049986007 +0,0.8,6,1.46094114,0.07706223 +0,0.8,10,2.11188335,0.153895725 +20000,0.2,-2,0.094876064,0.010748936 +20000,0.2,0,0.312245244,0.013278551 +20000,0.2,2,0.526732695,0.019035924 +20000,0.2,4,0.738624783,0.027861195 +20000,0.2,6,0.948256669,0.039818804 +20000,0.2,10,1.37381249,0.072958942 +20000,0.4,-2,0.10109343,0.009771491 +20000,0.4,0,0.331242642,0.01259557 +20000,0.4,2,0.558215806,0.018999276 +20000,0.4,4,0.78234899,0.028804499 +20000,0.4,6,1.00403071,0.042068785 +20000,0.4,10,1.4548071,0.078990525 +20000,0.5,-2,0.106943991,0.009561 +20000,0.5,0,0.348482284,0.012672322 +20000,0.5,2,0.586591715,0.019691561 +20000,0.5,4,0.821646945,0.030425263 +20000,0.5,6,1.0540806,0.044921782 +20000,0.5,10,1.52725612,0.085416334 +20000,0.6,-2,0.116201724,0.009487973 +20000,0.6,0,0.374581734,0.013068627 +20000,0.6,2,0.628753876,0.021083571 +20000,0.6,4,0.880405735,0.03328418 +20000,0.6,6,1.12886908,0.04971467 +20000,0.6,10,1.63519161,0.095888927 +20000,0.7,-2,0.132280494,0.009612703 +20000,0.7,0,0.416816813,0.014049894 +20000,0.7,2,0.696795397,0.023805393 +20000,0.7,4,0.973468481,0.038592556 +20000,0.7,6,1.24662498,0.058416441 +20000,0.7,10,1.80500261,0.11440913 +20000,0.8,-2,0.167428501,0.010268506 +20000,0.8,0,0.497855602,0.016711584 +20000,0.8,2,0.823365761,0.030298771 +20000,0.8,4,1.14426867,0.050683899 +20000,0.8,6,1.46094114,0.077759149 +20000,0.8,10,2.11188335,0.154586048 +30000,0.2,-2,0.094876064,0.01132055 +30000,0.2,0,0.312245244,0.013852395 +30000,0.2,2,0.526732695,0.019610547 +30000,0.2,4,0.738624783,0.028435235 +30000,0.2,6,0.948256669,0.040390954 +30000,0.2,10,1.37381249,0.073522871 +30000,0.4,-2,0.10109343,0.010261747 +30000,0.4,0,0.331242642,0.013087861 +30000,0.4,2,0.558215806,0.019492345 +30000,0.4,4,0.78234899,0.029297188 +30000,0.4,6,1.00403071,0.042559974 +30000,0.4,10,1.4548071,0.079474954 +30000,0.5,-2,0.106943991,0.010028278 +30000,0.5,0,0.348482284,0.013141634 +30000,0.5,2,0.586591715,0.020161704 +30000,0.5,4,0.821646945,0.030895132 +30000,0.5,6,1.0540806,0.045390324 +30000,0.5,10,1.52725612,0.085878672 +30000,0.6,-2,0.116201724,0.009937502 +30000,0.6,0,0.374581734,0.013520245 +30000,0.6,2,0.628753876,0.02153608 +30000,0.6,4,0.880405735,0.033736581 +30000,0.6,6,1.12886908,0.050165931 +30000,0.6,10,1.63519161,0.09633454 +30000,0.7,-2,0.132280494,0.010047891 +30000,0.7,0,0.416816813,0.0144873 +30000,0.7,2,0.696795397,0.024243841 +30000,0.7,4,0.973468481,0.039031073 +30000,0.7,6,1.24662498,0.058854041 +30000,0.7,10,1.80500261,0.114841741 +30000,0.8,-2,0.167428501,0.010691707 +30000,0.8,0,0.497855602,0.017137263 +30000,0.8,2,0.823365761,0.030725762 +30000,0.8,4,1.14426867,0.051111226 +30000,0.8,6,1.46094114,0.078185878 +30000,0.8,10,2.11188335,0.155008735 +40000,0.2,-2,0.094876064,0.012082662 +40000,0.2,0,0.312245244,0.01461747 +40000,0.2,2,0.526732695,0.020376651 +40000,0.2,4,0.738624783,0.029200558 +40000,0.2,6,0.948256669,0.041153752 +40000,0.2,10,1.37381249,0.074274716 +40000,0.4,-2,0.10109343,0.010913067 +40000,0.4,0,0.331242642,0.013741874 +40000,0.4,2,0.558215806,0.020147387 +40000,0.4,4,0.78234899,0.029951717 +40000,0.4,6,1.00403071,0.04321251 +40000,0.4,10,1.4548071,0.080118518 +40000,0.5,-2,0.106943991,0.0106484 +40000,0.5,0,0.348482284,0.013764447 +40000,0.5,2,0.586591715,0.020785612 +40000,0.5,4,0.821646945,0.031518677 +40000,0.5,6,1.0540806,0.046012099 +40000,0.5,10,1.52725612,0.086492212 +40000,0.6,-2,0.116201724,0.010533556 +40000,0.6,0,0.374581734,0.014119058 +40000,0.6,2,0.628753876,0.02213607 +40000,0.6,4,0.880405735,0.034336421 +40000,0.6,6,1.12886908,0.05076426 +40000,0.6,10,1.63519161,0.096925373 +40000,0.7,-2,0.132280494,0.010624519 +40000,0.7,0,0.416816813,0.015066856 +40000,0.7,2,0.696795397,0.024824771 +40000,0.7,4,0.973468481,0.039612086 +40000,0.7,6,1.24662498,0.059433833 +40000,0.7,10,1.80500261,0.115414928 +40000,0.8,-2,0.167428501,0.011252107 +40000,0.8,0,0.497855602,0.017700938 +40000,0.8,2,0.823365761,0.031291167 +40000,0.8,4,1.14426867,0.051677067 +40000,0.8,6,1.46094114,0.078750926 +40000,0.8,10,2.11188335,0.155568425 diff --git a/aviary/utils/test/data/FLOPS_turbofan_22k.txt b/aviary/utils/test/data/turbofan_22k.txt similarity index 100% rename from aviary/utils/test/data/FLOPS_turbofan_22k.txt rename to aviary/utils/test/data/turbofan_22k.txt diff --git a/aviary/utils/test/data/GASP_turbofan_23k_1.eng b/aviary/utils/test/data/turbofan_23k_1.eng similarity index 99% rename from aviary/utils/test/data/GASP_turbofan_23k_1.eng rename to aviary/utils/test/data/turbofan_23k_1.eng index 7f161d0cb..11092fba4 100644 --- a/aviary/utils/test/data/GASP_turbofan_23k_1.eng +++ b/aviary/utils/test/data/turbofan_23k_1.eng @@ -1,5 +1,5 @@ 1 0 994.36 3342. 3196. 3108. 1.25 -Georgia Tech Tube&Wing 2017 Turbofan Engine Model: Corrected Thrust +Turbofan Engine Model: Corrected Thrust 15 8 11 0.0000 diff --git a/aviary/models/engines/turboshaft_4465hp.eng b/aviary/utils/test/data/turboshaft_4465hp.eng similarity index 100% rename from aviary/models/engines/turboshaft_4465hp.eng rename to aviary/utils/test/data/turboshaft_4465hp.eng diff --git a/aviary/utils/test/test_aero_table_conversion.py b/aviary/utils/test/test_aero_table_conversion.py index 2b64bb3c7..d030dd10f 100644 --- a/aviary/utils/test/test_aero_table_conversion.py +++ b/aviary/utils/test/test_aero_table_conversion.py @@ -115,7 +115,7 @@ def test_FLOPS_table(self): 0.02848, 0.03093, 0.03398, 0.0374, 0.04091, 0.04479, 0.04904, 0.05377, 0.05891, 0.01965, 0.02021, 0.02122, 0.02265, 0.02451, 0.02647, 0.02862, 0.0311, 0.03411, 0.03749, 0.04103, 0.04504, 0.04954, 0.05461, 0.06022, 0.01997, 0.0205, 0.02149, 0.02293, 0.02484, 0.02678, 0.0289, 0.03138, 0.03439, 0.03774, 0.04173, 0.04658, 0.05226, 0.05893, 0.06653, 0.02069, 0.0211, 0.02206, 0.02355, 0.02556, 0.02756, 0.02973, 0.03226, 0.0356, 0.03965, 0.04498, 0.0511, 0.05799, 0.06558, 0.07388, 0.02252, 0.02265, 0.02352, 0.02511, 0.02742, 0.02979, 0.03244, 0.03596, 0.04021, 0.04641, 0.05251, 0.05976, 0.06817, 0.07769, 0.08832, 0.03669, 0.03593, 0.03651, 0.0384, 0.04164, 0.04582, 0.05105, 0.05619, 0.06639, 0.07341, 0.081, 0.08847, 0.0958, 0.10335, 0.11098]) expected_cdi_comments = ['# lift-dependent drag polar, function of Mach & CL'] - input = get_path('utils/test/flops_test_polar.txt') + input = get_path('utils/test/data/flops_test_polar.txt') cdi_data, cdi_comments, cd0_data, cd0_comments = _load_flops_aero_table(input) # test CDi @@ -161,13 +161,16 @@ def args(): return None self.assertEqual(line_no_whitespace.count(expected_line), 1) except Exception as error: - exc_string = f'Error: {args.output_file}\nFound: {line_no_whitespace}\nExpected: {expected_line}' + exc_string = ( + f'Error: {args.output_file}\nFound: ' + f'{line_no_whitespace}\nExpected: {expected_line}' + ) raise Exception(exc_string) def test_FLOPS_file(self): tempdir = tempfile.mkdtemp(prefix='testdir-') def args(): return None - args.input_file = 'utils/test/flops_test_polar.txt' + args.input_file = 'utils/test/data/flops_test_polar.txt' args.output_file = str(Path(tempdir, 'TEST_'+Path(args.input_file).name)) args.data_format = 'FLOPS' _exec_ATC(args, None) diff --git a/aviary/utils/test/test_csv_data_file.py b/aviary/utils/test/test_csv_data_file.py index 32494f4c6..e4346964e 100644 --- a/aviary/utils/test/test_csv_data_file.py +++ b/aviary/utils/test/test_csv_data_file.py @@ -21,7 +21,7 @@ class TestAviaryCSV(unittest.TestCase): """ def setUp(self): - self.filename = get_path('utils/test/csv_test.csv') + self.filename = get_path('utils/test/data/csv_test.csv') # what will get written to the csv self.data = NamedValues({'aircraft:wing:span': ([15.24, 118, 90, 171], 'ft'), 'aircraft:crew_and_payload:num_passengers': ([125, 28, 0.355, 44], diff --git a/aviary/utils/test/test_engine_deck_conversion.py b/aviary/utils/test/test_engine_deck_conversion.py index a728abad6..fffcb3bab 100644 --- a/aviary/utils/test/test_engine_deck_conversion.py +++ b/aviary/utils/test/test_engine_deck_conversion.py @@ -3,44 +3,33 @@ from openmdao.utils.testing_utils import use_tempdirs -from aviary.utils.engine_deck_conversion import EngineDeckType, _exec_EDC +from aviary.utils.engine_deck_conversion import EngineDeckType, EngineDeckConverter from aviary.utils.functions import get_path -class DummyArgs(object): - def __init__(self): - self.input_file = None - self.output_file = None - self.data_format = None - - @use_tempdirs class TestEngineDeckConversion(unittest.TestCase): """ Test engine deck conversion utility by comparing against previously converted engine deck files """ - def prepare_and_run(self, filename, output_file=None, data_format=EngineDeckType.GASP): - args = DummyArgs() - + def prepare_and_run( + self, filename, output_file=None, data_format=EngineDeckType.GASP + ): # Specify the input file - args.input_file = filepath = get_path('models/engines/'+filename) + input_file = get_path('utils/test/data/' + filename) # Specify the output file if not output_file: - filename = filepath.stem+'.deck' - args.output_file = Path.cwd() / Path('TEST_'+filename) + filename = input_file.stem + '.deck' + output_file = Path.cwd() / Path('TEST_' + filename) else: - args.output_file = str(Path(output_file)) - - # Specify the legacy code and engine type - args.data_format = data_format + output_file = str(Path(output_file)) # Execute the conversion - _exec_EDC(args, None) - return args + EngineDeckConverter(input_file, output_file, data_format) - def compare_files(self, filepath, skip_list=[]): + def compare_files(self, filepath, skip_list=['# created']): """ Compares the converted file with a validation file. @@ -73,16 +62,26 @@ def compare_files(self, filepath, skip_list=[]): ) raise Exception(exc_string) - # TODO currently untested!! - # def test_TF_conversion(self): - # return + def test_TF_conversion_FLOPS(self): + filename = 'turbofan_22k.txt' + + self.prepare_and_run(filename, data_format=EngineDeckType.FLOPS) + self.compare_files(filename) + + def test_TF_conversion_GASP(self): + filename = 'turbofan_23k_1.eng' + + self.prepare_and_run(filename, data_format=EngineDeckType.GASP) + self.compare_files(filename) def test_TP_conversion(self): filename = 'turboshaft_4465hp.eng' - args = self.prepare_and_run(filename, data_format=EngineDeckType.GASP_TS) - self.compare_files(filename, skip_list=['# created']) + self.prepare_and_run(filename, data_format=EngineDeckType.GASP_TS) + self.compare_files(filename) if __name__ == "__main__": unittest.main() + # test = TestEngineDeckConversion() + # test.test_TP_conversion() diff --git a/aviary/utils/test/test_fortran_to_aviary.py b/aviary/utils/test/test_fortran_to_aviary.py index ba46066af..53e824e3e 100644 --- a/aviary/utils/test/test_fortran_to_aviary.py +++ b/aviary/utils/test/test_fortran_to_aviary.py @@ -4,18 +4,10 @@ from openmdao.utils.testing_utils import use_tempdirs -from aviary.utils.functions import get_path -from aviary.utils.fortran_to_aviary import LegacyCode, _exec_F2A - +from aviary.variable_info.enums import LegacyCode -class DummyArgs(object): - def __init__(self): - self.input_deck = None - self.out_file = None - self.legacy_code = None - self.defaults_deck = False - self.force = False - self.verbosity = 0 +from aviary.utils.functions import get_path +from aviary.utils.fortran_to_aviary import fortran_to_aviary @use_tempdirs @@ -25,21 +17,16 @@ class TestFortranToAviary(unittest.TestCase): """ def prepare_and_run(self, filepath, out_file=None, legacy_code=LegacyCode.GASP): - args = DummyArgs() - - # Specify the input file and the legacy code - args.input_deck = filepath - # Specify the output file filename = filepath.split('.')[0]+'.csv' if not out_file: - args.out_file = Path.cwd() / Path('TEST_'+filename) + out_file = Path.cwd() / Path('TEST_' + filename) else: - args.out_file = Path(out_file) - args.legacy_code = legacy_code + out_file = Path(out_file) + legacy_code = legacy_code # Execute the conversion - _exec_F2A(args, None) + fortran_to_aviary(filepath, legacy_code, out_file, force=True, verbosity=0) def compare_files(self, filepath, skip_list=['# created ']): """ @@ -57,7 +44,7 @@ def compare_files(self, filepath, skip_list=['# created ']): with open('TEST_'+filename, 'r') as f_in, open(validation_data, 'r') as expected: for line in f_in: if any(s in line for s in skip_list): - break + continue # Remove whitespace and compare expected_line = ''.join(expected.readline().split()) @@ -76,35 +63,55 @@ def compare_files(self, filepath, skip_list=['# created ']): raise Exception(exc_string) def test_large_single_aisle(self): - filepath = 'models/large_single_aisle_1/large_single_aisle_1_GwGm.dat' + filepath = 'models/large_single_aisle_1/large_single_aisle_1_GASP.dat' + comparison_filepath = ( + 'utils/test/data/converter_test_large_single_aisle_1_GASP.csv' + ) - self.prepare_and_run(filepath) - self.compare_files(filepath) + self.prepare_and_run( + filepath, + out_file=Path.cwd() / Path('TEST_' + comparison_filepath), + ) + self.compare_files(comparison_filepath) def test_small_single_aisle(self): - filepath = 'models/small_single_aisle/small_single_aisle_GwGm.dat' + filepath = 'models/small_single_aisle/small_single_aisle_GASP.dat' + comparison_filepath = ( + 'utils/test/data/converter_test_small_single_aisle_GASP.csv' + ) - self.prepare_and_run(filepath) - self.compare_files(filepath) + self.prepare_and_run( + filepath, + out_file=Path.cwd() / Path('TEST_' + comparison_filepath), + ) + self.compare_files(comparison_filepath) def test_diff_configuration(self): - filepath = 'models/test_aircraft/converter_configuration_test_data_GwGm.dat' + filepath = 'utils/test/data/configuration_test_data_GASP.dat' + comparison_filepath = 'utils/test/data/converter_test_configuration_GASP.csv' - self.prepare_and_run(filepath) - self.compare_files(filepath) + self.prepare_and_run( + filepath, out_file=Path.cwd() / Path('TEST_' + comparison_filepath) + ) + self.compare_files(comparison_filepath) def test_N3CC(self): # Note: The csv comparison file N3CC_generic_low_speed_polars_FLOPSinp.csv was generated using the fortran-to-Aviary converter # and was not evaluated for comparison to the original. Thus, until this file is evaluated, this test is purely a regression # test. - filepath = 'models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.txt' - out_file = Path.cwd() / 'TEST_models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv' - - self.prepare_and_run(filepath, out_file=out_file, legacy_code=LegacyCode.FLOPS) - self.compare_files( - 'models/N3CC/N3CC_generic_low_speed_polars_FLOPSinp.csv') + filepath = 'models/N3CC/N3CC_generic_low_speed_polars_FLOPS.txt' + comparison_filepath = 'utils/test/data/converter_test_N3CC_FLOPS.csv' + self.prepare_and_run( + filepath, + out_file=Path.cwd() / Path('TEST_' + comparison_filepath), + legacy_code=LegacyCode.FLOPS, + ) + self.compare_files(comparison_filepath) if __name__ == "__main__": unittest.main() + + # test = TestFortranToAviary() + # test.test_small_single_aisle() diff --git a/aviary/utils/test/test_propeller_map_conversion.py b/aviary/utils/test/test_propeller_map_conversion.py index 09a686240..a144f7df7 100644 --- a/aviary/utils/test/test_propeller_map_conversion.py +++ b/aviary/utils/test/test_propeller_map_conversion.py @@ -24,7 +24,7 @@ def prepare_and_run(self, filename, output_file=None, data_format=PropMapType.GA args = DummyArgs() # Specify the input file - args.input_file = filepath = get_path('models/propellers/'+filename) + args.input_file = filepath = get_path('models/engines/propellers/' + filename) # Specify the output file if not output_file: @@ -49,7 +49,7 @@ def compare_files(self, filepath, skip_list=[]): """ filename = filepath.split('.')[0]+'.prop' - validation_data = get_path('models/propellers/'+filename) + validation_data = get_path('models/engines/propellers/' + filename) # Open the converted and validation files with open('TEST_'+filename, 'r') as f_in, open(validation_data, 'r') as expected: @@ -65,7 +65,10 @@ def compare_files(self, filepath, skip_list=[]): self.assertEqual(line_no_whitespace.count(expected_line), 1) except: - exc_string = f'Error: {filename}\nFound: {line_no_whitespace}\nExpected: {expected_line}' + exc_string = ( + f'Error: {filename}\nFound: {line_no_whitespace}' + f'\nExpected: {expected_line}' + ) raise Exception(exc_string) def test_PM_conversion(self): diff --git a/aviary/validation_cases/benchmark_tests/test_off_design_FwFm.py b/aviary/validation_cases/benchmark_tests/test_off_design_FwFm.py index ff9300cec..dfce9b25f 100644 --- a/aviary/validation_cases/benchmark_tests/test_off_design_FwFm.py +++ b/aviary/validation_cases/benchmark_tests/test_off_design_FwFm.py @@ -234,7 +234,8 @@ def test_off_design_SNOPT(self): if __name__ == '__main__': - test = TestOffDesign() - test.setUp() - test.test_off_design_SNOPT() - test.test_off_design_IPOPT() + unittest.main() + # test = TestOffDesign() + # test.setUp() + # test.test_off_design_SNOPT() + # test.test_off_design_IPOPT() diff --git a/aviary/validation_cases/benchmark_tests/test_off_design_GwGm.py b/aviary/validation_cases/benchmark_tests/test_off_design_GwGm.py index 619afa876..f3eadafcc 100644 --- a/aviary/validation_cases/benchmark_tests/test_off_design_GwGm.py +++ b/aviary/validation_cases/benchmark_tests/test_off_design_GwGm.py @@ -141,7 +141,8 @@ def test_off_design_SNOPT(self): if __name__ == '__main__': - test = TestOffDesign() - test.setUp() - test.test_off_design_SNOPT() - test.test_off_design_IPOPT() + unittest.main() + # test = TestOffDesign() + # test.setUp() + # test.test_off_design_SNOPT() + # test.test_off_design_IPOPT() diff --git a/setup.py b/setup.py index 89835c49e..5f8a77415 100644 --- a/setup.py +++ b/setup.py @@ -60,9 +60,9 @@ "models/engines/*.deck", "models/engines/*.txt", "models/engines/*.eng", + "models/engines/propellers/*.map", + "models/engines/propellers/*.prop", "models/N3CC/*", - "models/propellers/*.map", - "models/propellers/*.prop", "models/large_single_aisle_1/*", "models/large_single_aisle_2/*", "models/small_single_aisle/*",