Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for legacy code defaults #628

Open
wants to merge 26 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
e6884c3
moved example propellers into models/engines
Dec 10, 2024
a23ba00
updated fortran_to_aviary
Dec 10, 2024
5ce970c
updating test file configuration_test
Dec 10, 2024
19aece5
enforced consistent naming across example models
Dec 10, 2024
11e2b8d
moved more files to utils/test/data
Dec 10, 2024
f17ca3e
fixed other conversion tests
Dec 10, 2024
0f88346
fixed bug with depreciated variables not being removed from unconvert…
Dec 10, 2024
bfc7684
docs update
Dec 11, 2024
7c3c093
round of test fixes
Dec 11, 2024
6009c16
fixed messed up metadata for doc page
Dec 11, 2024
bf55b41
updated filename changes to docs examples
Dec 11, 2024
a3c631c
fixed broken paths in tests
Dec 13, 2024
e8103dc
more fixes to files
Dec 13, 2024
98b4381
removed Aviary variable names from GASP input file for converter tests
Dec 13, 2024
fd71831
fixed f-string formatting issue
Dec 16, 2024
d234a1e
Merge remote-tracking branch 'remotes/origin/main' into legacy_defaults
Dec 16, 2024
0909a1c
added global throttle settings to converter tests
Dec 16, 2024
13d3e98
Merge remote-tracking branch 'remotes/origin/main' into legacy_defaults
Dec 27, 2024
c6a54f6
merge fixes
Dec 27, 2024
60e7715
update openmdao min requirement
Dec 31, 2024
c5ed735
Merge remote-tracking branch 'remotes/origin/main' into legacy_defaults
Dec 31, 2024
0788bbe
updated variable names in converter test csv
Jan 2, 2025
83b3915
Merge remote-tracking branch 'remotes/origin/main' into legacy_defaults
Jan 8, 2025
2388b60
Merge branch 'main' into legacy_defaults
jkirk5 Jan 22, 2025
e638205
Fix manifest for the propeller decks
Kenneth-T-Moore Jan 22, 2025
786de29
Merge pull request #15 from Kenneth-T-Moore/legacy_defaults
jkirk5 Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ target/

# Jupyter Notebook
.ipynb_checkpoints
.db-journal

# IPython
profile_default/
Expand Down
2 changes: 1 addition & 1 deletion aviary/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 21 additions & 2 deletions aviary/docs/examples/outputted_phase_info.py
Original file line number Diff line number Diff line change
@@ -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)}}
4 changes: 2 additions & 2 deletions aviary/docs/examples/reserve_missions.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "latest_env",
"display_name": "aviary",
"language": "python",
"name": "python3"
},
Expand All @@ -200,7 +200,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
"version": "3.12.3"
}
},
"nbformat": 4,
Expand Down
4 changes: 2 additions & 2 deletions aviary/docs/getting_started/onboarding_level1.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "aviary",
"language": "python",
"name": "python3"
},
Expand All @@ -778,7 +778,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
"version": "3.12.3"
}
},
"nbformat": 4,
Expand Down
76 changes: 33 additions & 43 deletions aviary/docs/user_guide/aviary_commands.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -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`<br>\n",
"To use small_single_aisle_GASP.csv run the command `aviary run_mission models/small_single_aisle/small_single_aisle_GASP.csv`<br>\n",
"\n",
"SNOPT is the default optimizer, but IPOPT is available as well."
]
Expand All @@ -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"
]
Expand Down Expand Up @@ -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)."
]
},
{
Expand All @@ -157,37 +157,31 @@
"\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",
"\n",
"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)."
]
},
{
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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"
]
},
{
Expand Down Expand Up @@ -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"
]
},
{
Expand Down Expand Up @@ -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."
Expand Down Expand Up @@ -558,7 +548,7 @@
"metadata": {
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "latest_env",
"display_name": "aviary",
"language": "python",
"name": "python3"
},
Expand All @@ -572,7 +562,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
"version": "3.12.3"
}
},
"nbformat": 4,
Expand Down
2 changes: 1 addition & 1 deletion aviary/examples/level2_shooting_traj.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion aviary/examples/test/test_level2_shooting_traj.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
21 changes: 13 additions & 8 deletions aviary/interface/test/test_cmd_entry_points.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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)


Expand Down
9 changes: 5 additions & 4 deletions aviary/interface/test/test_download_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,25 @@ 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):
filename = 'engines'
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))


Expand Down
2 changes: 1 addition & 1 deletion aviary/interface/test/test_phase_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion aviary/interface/test/test_reserve_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,4 +225,4 @@ INGASP.WLPCT,0.9423
INGASP.WNAC,1240
INGASP.WPLX,0
INGASP.WPYLON,0
INGASP.XTORQ,8000
INGASP.XTORQ,8000
Loading
Loading