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
2 changes: 1 addition & 1 deletion aviary/core/aviary_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ def load_inputs(

if phase_info is None:
phase_info = self.configurator.get_default_phase_info(self)
if verbosity is not None and verbosity >= Verbosity.BRIEF:
if verbosity > Verbosity.BRIEF: # VERBOSE, DEBUG
print(
f'Loaded default phase_info for {self.mission_method.value.lower()} equations '
'of motion.'
Expand Down
24 changes: 20 additions & 4 deletions aviary/docs/source_docs/phase_info_detailed.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,11 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"metadata": {
"tags": [
"remove-input"
]
},
Comment thread
jkirk5 marked this conversation as resolved.
"outputs": [],
"source": [
"om.show_options_table(\n",
Expand All @@ -115,7 +119,11 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [],
"source": [
"om.show_options_table('aviary.mission.two_dof.phases.flight_phase.FlightPhaseOptions')"
Expand All @@ -133,7 +141,11 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [],
"source": [
"om.show_options_table('aviary.mission.two_dof.phases.simple_cruise_phase.SimpleCruisePhaseOptions')"
Expand All @@ -151,7 +163,11 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [],
"source": [
"om.show_options_table('aviary.mission.two_dof.phases.takeoff_phase.TakeoffPhaseOptions')"
Expand Down
14 changes: 5 additions & 9 deletions aviary/docs/theory_guide/gasp_based_bwb.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,12 @@
" BWBACMass,\n",
" BWBFurnishingMass,\n",
" EquipAndUsefulLoadMassGroup,\n",
" UsefulLoadMass,\n",
" UsefulLoadMassGroup,\n",
")\n",
"from aviary.utils.doctape import get_variable_name, glue_variable\n",
"\n",
"glue_variable(get_variable_name(EquipAndUsefulLoadMassGroup), md_code=True)\n",
"glue_variable(get_variable_name(UsefulLoadMass), md_code=True)\n",
"glue_variable(get_variable_name(UsefulLoadMassGroup), md_code=True)\n",
"glue_variable(get_variable_name(BWBACMass), md_code=True)\n",
"glue_variable(get_variable_name(BWBFurnishingMass), md_code=True)\n",
"\n",
Expand All @@ -152,7 +152,7 @@
"source": [
"### Equip And Useful Load\n",
"\n",
" - {glue:md}`EquipAndUsefulLoadMassGroup` includes the computations of 19 items. Ideally, each of them should be done in its own component and one group has them all. This is a long time goal. For now, it is separated to two components `EquipMass` and {glue:md}`UsefulLoadMass`. The air conditioning and furnishing masses are already singled out because they need to be modified for BWB.\n",
" - {glue:md}`EquipAndUsefulLoadMassGroup` includes the computations of 19 items. Ideally, each of them should be done in its own component and one group has them all. This is a long time goal. For now, it is separated to two components `EquipMass` and {glue:md}`UsefulLoadMassGroup`. The air conditioning and furnishing masses are already singled out because they need to be modified for BWB.\n",
" - A new variable {glue:md}`Aircraft.Electrical.SYSTEM_MASS_PER_PASSENGER` is added which corresponds to `CW(15)` in GASP. Its value is different for conventional aircraft and BWB.\n",
" - Two new components {glue:md}`BWBACMass` and {glue:md}`BWBFurnishingMass` are added to `equipment_and_useful_load.py`.\n",
" - **Note:** GASP Fortran code has new updates that are not included in Aviary. We've updated Aviary for furnishing mass but other masses need to be checked.\n",
Expand Down Expand Up @@ -239,17 +239,13 @@
"from aviary.subsystems.mass.gasp_based.fuel import (\n",
" BodyTankCalculations,\n",
" BWBFuselageMass,\n",
" FuelMassGroup,\n",
" FuselageMass,\n",
" StructMass,\n",
")\n",
"from aviary.utils.doctape import get_variable_name, glue_variable\n",
"\n",
"glue_variable(get_variable_name(BWBFuselageMass), md_code=True)\n",
"glue_variable(get_variable_name(FuselageMass), md_code=True)\n",
"glue_variable(get_variable_name(StructMass), md_code=True)\n",
"glue_variable(get_variable_name(BodyTankCalculations), md_code=True)\n",
"glue_variable(get_variable_name(FuelMassGroup), md_code=True)\n",
"\n",
"glue_variable(get_variable_name(Mission.TOTAL_FUEL), md_code=True)\n",
"\n",
Expand All @@ -269,9 +265,9 @@
"source": [
"### Fuel Model\n",
"\n",
" - {glue:md}`FuelMassGroup` groups all fuel related components. In case of BWB, {glue:md}`BWBFuselageMass` is in place of {glue:md}`FuselageMass`. This group has a nonlinear solver. In order for it to converge, one must provide good initial guesses for the inputs. Otherwise, it may claim that convergence is reached but gives rise to a strange solution.\n",
" - `FuelMassGroup` groups all fuel related components. In case of BWB, {glue:md}`BWBFuselageMass` is in place of {glue:md}`FuselageMass`. This group has a nonlinear solver. In order for it to converge, one must provide good initial guesses for the inputs. Otherwise, it may claim that convergence is reached but gives rise to a strange solution.\n",
" - The computation in {glue:md}`BodyTankCalculations` component can not be matched in GASP Fortran code exactly. It is possible that `extra_fuel_volume` becomes negative. We added code to make sure that it is always positive.\n",
" - For fuselage mass of BWB aircraft, the empirical weight equation is quite different from conventional aircraft. It was computed in `FuselageAndStructMass` component. This component had two parts: fuselage mass and structural mass. In order to reuse the code for structural mass, this component is split into two components: {glue:md}`FuselageMass` and {glue:md}`StructMass`. For BWB, {glue:md}`FuselageMass` is replaced by {glue:md}`BWBFuselageMass`.\n",
" - For fuselage mass of BWB aircraft, the empirical weight equation is quite different from conventional aircraft. It was computed in `FuselageAndStructMass` component. This component had two parts: fuselage mass and structural mass. In order to reuse the code for structural mass, this component is split into two components: `FuselageMass` and `StructMass`. For BWB, `FuselageMass` is replaced by {glue:md}`BWBFuselageMass`.\n",
" - **Note:** The historic name of `FUEL_MASS_REQUIRED` is `INGASP.WFAREQ`, but `WFAREQ` includes fuel margin in GASP while `FUEL_MASS_REQUIRED` doesn't. The historic name of `TOTAL_FUEL_MASS` is `INGASP.WFA`, but does not include fuel margin in GASP.\n",
" - **Note:** GASP Fortran code has features that are not implemented in Aviary (e.g. tail boom support, tip tank weight, fuselage acoustic treatment, pylon, acoustic treatment).\n",
"\n",
Expand Down
19 changes: 8 additions & 11 deletions aviary/docs/user_guide_unreviewed/subsystems/mass.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@
"from aviary.subsystems.mass.gasp_based.equipment_and_useful_load import EquipAndUsefulLoadMassGroup\n",
"from aviary.subsystems.mass.gasp_based.fixed import FixedMassGroup\n",
"from aviary.subsystems.mass.gasp_based.wing import WingMassGroup\n",
"from aviary.subsystems.mass.gasp_based.fuel import FuelMassGroup\n",
"from aviary.subsystems.mass.gasp_based.wing import WingMassGroup\n",
"from aviary.utils.doctape import get_variable_name, glue_variable\n",
"\n",
"\n",
Expand Down Expand Up @@ -81,10 +79,7 @@
"glue_variable(get_variable_name(EquipAndUsefulLoadMassGroup), md_code=False)\n",
"st = split_by_capitals_and_underscores(get_variable_name(WingMassGroup))\n",
"glue_variable(st, md_code=False)\n",
"glue_variable(get_variable_name(WingMassGroup), md_code=False)\n",
"st = split_by_capitals_and_underscores(get_variable_name(FuelMassGroup))\n",
"glue_variable(st, md_code=False)\n",
"glue_variable(get_variable_name(FuelMassGroup), md_code=False)"
"glue_variable(get_variable_name(WingMassGroup), md_code=False)"
]
},
{
Expand All @@ -110,12 +105,12 @@
"### Empty Mass\n",
"- **Structure Mass**\n",
" - Wing\n",
" - **Empennage**\n",
" - Empennage\n",
" - Vertical Tail\n",
" - Horizontal Tail\n",
" - Fins\n",
" - Fuselage\n",
" - **Landing Gear**\n",
" - Landing Gear\n",
" - Main Gear\n",
" - Nose Gear\n",
" - Nacelles\n",
Expand All @@ -131,7 +126,10 @@
" - Hydraulics\n",
" - Electrical\n",
" - Avionics\n",
" - Furnishings\n",
" - Furnishings and Equipment\n",
" - Furnishings\n",
" - Passenger Service\n",
" - Oxygen System\n",
" - Air Conditioning\n",
" - Anti-Icing\n",
"- External Subsystems\n",
Expand All @@ -141,10 +139,9 @@
"- **Useful Load**\n",
" - Flight Crew\n",
" - Cabin Crew\n",
" - Passenger Service\n",
" - Cargo Containers\n",
" - Unusable Fuel\n",
" - Engine Oil\n",
" - Cargo Containers\n",
"\n",
"### Zero-Fuel Mass\n",
"Operating Mass, plus:\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ aircraft:hydraulics:gear_mass_coefficient,0.135,unitless
aircraft:instruments:mass_coefficient,0.116,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:main_gear_mass_fraction,0.85,unitless
aircraft:landing_gear:mass_coefficient,0.052,unitless
aircraft:landing_gear:tail_hook_mass_scaler,1,unitless
aircraft:landing_gear:total_mass_scaler,1,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
V3_bug_fixed_options.set_val(Aircraft.Controls.CONTROL_MASS_INCREMENT, val=0, units='lbm')
V3_bug_fixed_options.set_val(Aircraft.LandingGear.MASS_COEFFICIENT, val=0.04, units='unitless')
V3_bug_fixed_options.set_val(
Aircraft.LandingGear.MAIN_GEAR_MASS_COEFFICIENT, val=0.85, units='unitless'
Aircraft.LandingGear.MAIN_GEAR_MASS_FRACTION, val=0.85, units='unitless'
)
V3_bug_fixed_options.set_val(Aircraft.Nacelle.CLEARANCE_RATIO, val=0.2, units='unitless')
V3_bug_fixed_options.set_val(Aircraft.Engine.MASS_SPECIFIC, val=0.21366, units='lbm/lbf')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ 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:main_gear_mass_fraction,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ aircraft:horizontal_tail:volume_coefficient, 0.8614, unitless
# Landing Gear
aircraft:landing_gear:fixed_gear, False, unitless
aircraft:landing_gear:main_gear_location, 0, unitless
aircraft:landing_gear:main_gear_mass_coefficient, 0.916, unitless
aircraft:landing_gear:main_gear_mass_fraction, 0.916, unitless
aircraft:landing_gear:mass_coefficient, 0.0337, unitless
aircraft:landing_gear:tail_hook_mass_scaler, 1, unitless
aircraft:landing_gear:total_mass_scaler, 1, unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ 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:main_gear_mass_fraction,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ aircraft:horizontal_tail:vertical_tail_mount_location,0.0,unitless
aircraft:horizontal_tail:volume_coefficient,1.189,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:main_gear_mass_fraction,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ 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:main_gear_mass_fraction,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ 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:main_gear_mass_fraction,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ 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:main_gear_mass_fraction,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
Expand Down
12 changes: 6 additions & 6 deletions aviary/subsystems/mass/flops_based/fuel_capacity.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import openmdao.api as om
from openmdao.utils.units import convert_units

from aviary.constants import GRAV_ENGLISH_LBM
from aviary.variable_info.functions import add_aviary_input, add_aviary_output
from aviary.variable_info.variables import Aircraft
from openmdao.utils.units import convert_units


class FuelCapacityGroup(om.Group):
Expand Down Expand Up @@ -117,7 +118,7 @@ class WingFuelCapacity(om.ExplicitComponent):
"""Compute the maximum fuel that can be carried in the wing's enclosed space."""

def setup(self):
add_aviary_input(self, Aircraft.Fuel.DENSITY, units='lbm/galUS')
add_aviary_input(self, Aircraft.Fuel.DENSITY, units='lbm/ft**3')
add_aviary_input(self, Aircraft.Fuel.WING_REF_CAPACITY, units='lbm')
add_aviary_input(self, Aircraft.Fuel.WING_REF_CAPACITY_AREA, units='unitless')
add_aviary_input(self, Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, units='unitless')
Expand Down Expand Up @@ -149,7 +150,7 @@ def compute(self, inputs, outputs):
)

else:
fuel_density = convert_units(inputs[Aircraft.Fuel.DENSITY], 'lbm/galUS', 'lbm/ft**3')
fuel_density = inputs[Aircraft.Fuel.DENSITY] * GRAV_ENGLISH_LBM
volume_fraction = inputs[Aircraft.Fuel.WING_FUEL_FRACTION]
span = inputs[Aircraft.Wing.SPAN]
taper_ratio = inputs[Aircraft.Wing.TAPER_RATIO]
Expand Down Expand Up @@ -193,7 +194,7 @@ def compute_partials(self, inputs, partials):
)

else:
fuel_density = convert_units(inputs[Aircraft.Fuel.DENSITY], 'lbm/galUS', 'lbm/ft**3')
fuel_density = inputs[Aircraft.Fuel.DENSITY] * GRAV_ENGLISH_LBM
volume_fraction = inputs[Aircraft.Fuel.WING_FUEL_FRACTION]
span = inputs[Aircraft.Wing.SPAN]
taper_ratio = inputs[Aircraft.Wing.TAPER_RATIO]
Expand All @@ -203,10 +204,9 @@ def compute_partials(self, inputs, partials):
tr_fact = 1.0 - taper_ratio / den**2
dfact = -1.0 / den**2 + 2.0 * taper_ratio / den**3

conversion_factor = convert_units(1.0, 'lbm/galUS', 'lbm/ft**3')
partials[Aircraft.Fuel.WING_FUEL_CAPACITY, Aircraft.Fuel.DENSITY] = (
volume_fraction * (2 / 3) * wing_area**2 * thickness_to_chord * tr_fact / span
) * conversion_factor
)

partials[Aircraft.Fuel.WING_FUEL_CAPACITY, Aircraft.Fuel.WING_FUEL_FRACTION] = (
fuel_density * (2 / 3) * wing_area**2 * thickness_to_chord * tr_fact / span
Expand Down
2 changes: 2 additions & 0 deletions aviary/subsystems/mass/flops_based/mass_premission.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,3 +325,5 @@ def setup(self):
self.add_subsystem(
'mass_summation', MassSummation(), promotes_inputs=['*'], promotes_outputs=['*']
)

self.set_input_defaults(Aircraft.Fuel.DENSITY, val=6.7, units='lbm/galUS')
Comment thread
jkirk5 marked this conversation as resolved.
Comment thread
jkirk5 marked this conversation as resolved.
1 change: 1 addition & 0 deletions aviary/subsystems/mass/flops_based/mass_summation.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ def initialize(self):
def setup(self):
alt_mass = self.options[Aircraft.Design.USE_ALT_MASS]

# Empty mass margin is calculated here to avoid feedback loop
self.add_subsystem(
'empty_mass_margin', EmptyMassMargin(), promotes_inputs=['*'], promotes_outputs=['*']
)
Expand Down
8 changes: 2 additions & 6 deletions aviary/subsystems/mass/gasp_based/air_conditioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@


class ACMass(om.ExplicitComponent):
"""
Computation of air conditioning mass.
"""
"""Computation of air conditioning mass."""

def setup(self):
add_aviary_input(self, Aircraft.AirConditioning.MASS_COEFFICIENT, units='unitless')
Expand Down Expand Up @@ -97,9 +95,7 @@ def compute_partials(self, inputs, J):


class BWBACMass(om.ExplicitComponent):
"""
Computation of air conditioning mass for BWB
"""
"""Computation of air conditioning mass for BWB."""

def setup(self):
add_aviary_input(self, Aircraft.AirConditioning.MASS_COEFFICIENT, units='unitless')
Expand Down
1 change: 0 additions & 1 deletion aviary/subsystems/mass/gasp_based/anti_icing.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import openmdao.api as om

from aviary.constants import GRAV_ENGLISH_LBM

from aviary.variable_info.functions import add_aviary_input, add_aviary_option, add_aviary_output
from aviary.variable_info.variables import Aircraft

Expand Down
3 changes: 1 addition & 2 deletions aviary/subsystems/mass/gasp_based/apu.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import openmdao.api as om

from aviary.constants import GRAV_ENGLISH_LBM
from aviary.variable_info.functions import add_aviary_option, add_aviary_output
from aviary.variable_info.variables import Aircraft

from aviary.constants import GRAV_ENGLISH_LBM


class APUMass(om.ExplicitComponent):
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

import openmdao.api as om

from aviary.constants import GRAV_ENGLISH_LBM
from aviary.variable_info.functions import add_aviary_option, add_aviary_output
from aviary.variable_info.variables import Aircraft

from aviary.constants import GRAV_ENGLISH_LBM


class CargoMass(om.ExplicitComponent):
"""Calculate the mass of any passengers, their baggage, and other cargo."""
class CargoContainerMass(om.ExplicitComponent):
"""Calculate the mass of cargo containers."""

def initialize(self):
add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_PASSENGERS)
Expand Down
Loading
Loading