Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 9 additions & 1 deletion aviary/interface/methods_for_level2.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from datetime import datetime
from enum import Enum
from pathlib import Path
from itertools import count

import dymos as dm
import numpy as np
Expand Down Expand Up @@ -1366,7 +1367,14 @@ def run_off_design_mission(
)

if name is None:
name = name = self._name + '_off_design'
# increment the name if the output directory already exists
# to avoid overwriting previous off-design runs
base_name = self._name + '_off_design'
for design_number in count(0):
name = base_name if design_number == 0 else f'{base_name}_{design_number}'
output_path = Path(f'{name}_out')
if not output_path.is_dir():
break
off_design_prob = AviaryProblem(name=name)

# Set up problem for mission, such as equations of motion, configurators, etc.
Expand Down
19 changes: 19 additions & 0 deletions aviary/interface/test/test_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from aviary.subsystems.subsystem_builder import SubsystemBuilder
from aviary.utils.develop_metadata import add_meta_data
from aviary.variable_info.variable_meta_data import CoreMetaData
import aviary.api as av


@use_tempdirs
Expand Down Expand Up @@ -135,6 +136,24 @@ def build_pre_mission(self, aviary_inputs):
# no need to run this model, just generate the report.
prob.final_setup()

@set_env_vars(TESTFLO_RUNNING='0')
def test_multiple_off_design_report_directories(self):
prob = av.AviaryProblem(verbosity=0)
prob.load_inputs(
'models/aircraft/advanced_single_aisle/advanced_single_aisle_FLOPS.csv', phase_info
)
prob.check_and_preprocess_inputs()
prob.build_model()
prob.add_driver('SLSQP', max_iter=50)
prob.add_design_variables()
prob.add_objective()
prob.setup()
prob.run_aviary_problem()
prob.run_off_design_mission(problem_type='fallout', mission_gross_mass=115000)
prob.run_off_design_mission(problem_type='alternate', mission_range=1250)
assert Path('testflo_off_design_1_out').is_dir()
assert Path('testflo_off_design_out').is_dir()


if __name__ == '__main__':
unittest.main()
Loading