Skip to content

Commit

Permalink
added 'external' method to aero, geom, mass builders
Browse files Browse the repository at this point in the history
  • Loading branch information
jkirk5 committed Jan 22, 2025
1 parent 47afa8d commit 258b491
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 89 deletions.
159 changes: 89 additions & 70 deletions aviary/subsystems/aerodynamics/aerodynamics_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,20 @@ def __init__(self, name=None, meta_data=None, code_origin=None):

super().__init__(name=name, meta_data=meta_data)

def build_pre_mission(self, aviary_inputs):
def build_pre_mission(self, aviary_inputs, **kwargs):
code_origin = self.code_origin
try:
method = kwargs.pop('method')
except KeyError:
method = None
aero_group = None

if code_origin is GASP:
aero_group = PreMissionAero()
if method != 'external':
if code_origin is GASP:
aero_group = PreMissionAero()

elif code_origin is FLOPS:
aero_group = Design()
elif code_origin is FLOPS:
aero_group = Design()

return aero_group

Expand All @@ -116,76 +122,89 @@ def build_mission(self, num_nodes, aviary_inputs, **kwargs):
method = kwargs.pop('method')
except KeyError:
method = None
if self.code_origin is FLOPS:
if method is None:
aero_group = ComputedAeroGroup(num_nodes=num_nodes)

elif method == 'computed':
aero_group = ComputedAeroGroup(num_nodes=num_nodes,
**kwargs)

elif method == 'low_speed':
aero_group = TakeoffAeroGroup(num_nodes=num_nodes,
aviary_options=aviary_inputs,
**kwargs)

# TODO solved alpha belongs in the GASP side, rolled into tabular aero
# It is currently only here because it is not possible to define
# per-subsystem code origins in AviaryProblem yet
elif method == 'solved_alpha':
aero_group = SolvedAlphaGroup(num_nodes=num_nodes,
aero_data=kwargs.pop('aero_data'),
**kwargs)

elif method == 'tabular':
aero_group = TabularAeroGroup(num_nodes=num_nodes,
CD0_data=kwargs.pop('CD0_data'),
CDI_data=kwargs.pop('CDI_data'),
**kwargs)

elif method == 'external':
# Aero completely replaced by external group.
aero_group = None
aero_group = None

if method != 'external':
if self.code_origin is FLOPS:
if method is None:
aero_group = ComputedAeroGroup(num_nodes=num_nodes)

elif method == 'computed':
aero_group = ComputedAeroGroup(num_nodes=num_nodes, **kwargs)

elif method == 'low_speed':
aero_group = TakeoffAeroGroup(
num_nodes=num_nodes, aviary_options=aviary_inputs, **kwargs
)

# TODO solved alpha belongs in the GASP side, rolled into tabular aero
# It is currently only here because it is not possible to define
# per-subsystem code origins in AviaryProblem yet
elif method == 'solved_alpha':
aero_group = SolvedAlphaGroup(
num_nodes=num_nodes, aero_data=kwargs.pop('aero_data'), **kwargs
)

elif method == 'tabular':
aero_group = TabularAeroGroup(
num_nodes=num_nodes,
CD0_data=kwargs.pop('CD0_data'),
CDI_data=kwargs.pop('CDI_data'),
**kwargs
)

else:
raise ValueError('FLOPS-based aero method is not one of the following: '
'(computed, low_speed, solved_alpha, tabular)')

elif self.code_origin is GASP:
if method is None:
aero_group = CruiseAero(num_nodes=num_nodes,
aviary_options=aviary_inputs)

elif method == 'cruise':
if 'aero_data' in kwargs:
aero_group = TabularCruiseAero(num_nodes=num_nodes,
aviary_options=aviary_inputs,
aero_data=kwargs.pop('aero_data'),
**kwargs)
else:
aero_group = CruiseAero(num_nodes=num_nodes,
**kwargs)

elif method == 'low_speed':
if any(key in kwargs for key in ['free_aero_data',
'free_flaps_data',
'free_ground_data']) in kwargs:
aero_group = TabularLowSpeedAero(num_nodes=num_nodes,
free_aero_data=kwargs.pop(
'free_aero_data'),
free_flaps_data=kwargs.pop(
'free_flaps_data'),
free_ground_data=kwargs.pop(
'free_ground_data'),
**kwargs)
raise ValueError(
'FLOPS-based aero method is not one of the following: '
'(computed, low_speed, solved_alpha, tabular)'
)

elif self.code_origin is GASP:
if method is None:
aero_group = CruiseAero(
num_nodes=num_nodes, aviary_options=aviary_inputs
)

elif method == 'cruise':
if 'aero_data' in kwargs:
aero_group = TabularCruiseAero(
num_nodes=num_nodes,
aviary_options=aviary_inputs,
aero_data=kwargs.pop('aero_data'),
**kwargs
)
else:
aero_group = CruiseAero(num_nodes=num_nodes, **kwargs)

elif method == 'low_speed':
if (
any(
key in kwargs
for key in [
'free_aero_data',
'free_flaps_data',
'free_ground_data',
]
)
in kwargs
):
aero_group = TabularLowSpeedAero(
num_nodes=num_nodes,
free_aero_data=kwargs.pop('free_aero_data'),
free_flaps_data=kwargs.pop('free_flaps_data'),
free_ground_data=kwargs.pop('free_ground_data'),
**kwargs
)

else:
aero_group = LowSpeedAero(num_nodes=num_nodes, **kwargs)

else:
aero_group = LowSpeedAero(num_nodes=num_nodes,
**kwargs)

else:
raise ValueError('GASP-based aero method is not one of the following: '
'(cruise, low_speed)')
raise ValueError(
'GASP-based aero method is not one of the following: '
'(cruise, low_speed)'
)

return aero_group

Expand Down
39 changes: 27 additions & 12 deletions aviary/subsystems/geometry/geometry_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,30 +82,45 @@ def __init__(self, name=None, meta_data=None, code_origin=None,

super().__init__(name=name, meta_data=meta_data)

def build_pre_mission(self, aviary_inputs):
def build_pre_mission(self, aviary_inputs, **kwargs):
code_origin = self.code_origin
both_geom = self.use_both_geometries
code_origin_to_prioritize = self.code_origin_to_prioritize
try:
method = kwargs.pop('method')
except KeyError:
method = None

geom_group = None

if both_geom:
geom_group = CombinedGeometry(
code_origin_to_prioritize=code_origin_to_prioritize
)
if method != 'external':
if both_geom:
geom_group = CombinedGeometry(
code_origin_to_prioritize=code_origin_to_prioritize
)

elif code_origin is GASP:
geom_group = SizeGroup()
geom_group.manual_overrides = None
elif code_origin is GASP:
geom_group = SizeGroup()
geom_group.manual_overrides = None

elif code_origin is FLOPS:
geom_group = PrepGeom()
geom_group.manual_overrides = None
elif code_origin is FLOPS:
geom_group = PrepGeom()
geom_group.manual_overrides = None

return geom_group

def build_mission(self, num_nodes, aviary_inputs, **kwargs):
super().build_mission(num_nodes, aviary_inputs)
# by default there is no geom mission, but call super for safety/future-proofing
try:
method = kwargs.pop('method')
except KeyError:
method = None
geom_group = None

if method != 'external':
geom_group = super().build_mission(num_nodes, aviary_inputs)

geom_group

def get_parameters(self, aviary_inputs=None, phase_info=None):
num_engine_type = len(aviary_inputs.get_val(Aircraft.Engine.NUM_ENGINES))
Expand Down
30 changes: 23 additions & 7 deletions aviary/subsystems/mass/mass_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,35 @@ def __init__(self, name=None, meta_data=None, code_origin=None):

super().__init__(name=name, meta_data=meta_data)

def build_pre_mission(self, aviary_inputs):
def build_pre_mission(self, aviary_inputs, **kwargs):
code_origin = self.code_origin
try:
method = kwargs.pop('method')
except KeyError:
method = None
mass_group = None

if code_origin is GASP:
mass_premission = MassPremissionGASP()
if method != 'external':
if code_origin is GASP:
mass_group = MassPremissionGASP()

elif code_origin is FLOPS:
mass_premission = MassPremissionFLOPS()
elif code_origin is FLOPS:
mass_group = MassPremissionFLOPS()

return mass_premission
return mass_group

def build_mission(self, num_nodes, aviary_inputs, **kwargs):
super().build_mission(num_nodes, aviary_inputs)
# by default there is no mass mission, but call super for safety/future-proofing
try:
method = kwargs.pop('method')
except KeyError:
method = None
mass_group = None

if method != 'external':
mass_group = super().build_mission(num_nodes, aviary_inputs)

mass_group

def report(self, prob, reports_folder, **kwargs):
"""
Expand Down

0 comments on commit 258b491

Please sign in to comment.