diff --git a/aviary/core/aviary_group.py b/aviary/core/aviary_group.py index c157ccdab4..d089ba1736 100644 --- a/aviary/core/aviary_group.py +++ b/aviary/core/aviary_group.py @@ -1052,7 +1052,7 @@ def add_post_mission_systems(self, verbosity=None): 'excess_fuel_constraint', ecomp, promotes_inputs=[ - ('total_fuel_capacity', Aircraft.Fuel.TOTAL_CAPACITY), + ('total_fuel_capacity', Aircraft.Fuel.MAX_CAPACITY_MASS), ('unusable_fuel', Aircraft.Fuel.UNUSABLE_FUEL_MASS), ('overall_fuel', Mission.TOTAL_FUEL_MASS), ], diff --git a/aviary/core/aviary_problem.py b/aviary/core/aviary_problem.py index c03c32afdf..db0baf9df6 100644 --- a/aviary/core/aviary_problem.py +++ b/aviary/core/aviary_problem.py @@ -1789,7 +1789,7 @@ def run_payload_range(self, verbosity=None): # NOTE this operating mass is based on the previously run mission - assumed this is the # design mission!! Includes cargo containers needed for design (max payload) operating_mass = float(self.get_val(Mission.OPERATING_MASS)[0]) - fuel_capacity = float(self.get_val(Aircraft.Fuel.TOTAL_CAPACITY)[0]) + fuel_capacity = float(self.get_val(Aircraft.Fuel.MAX_CAPACITY_MASS)[0]) unusable_fuel = float(self.get_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS)[0]) max_payload = float(self.get_val(Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS)[0]) diff --git a/aviary/docs/examples_unreviewed/deconstructed_example.ipynb b/aviary/docs/examples_unreviewed/deconstructed_example.ipynb index 10df31ffcc..c2568a4a5a 100644 --- a/aviary/docs/examples_unreviewed/deconstructed_example.ipynb +++ b/aviary/docs/examples_unreviewed/deconstructed_example.ipynb @@ -649,7 +649,7 @@ " 'excess_fuel_constraint',\n", " ecomp,\n", " promotes_inputs=[\n", - " ('total_fuel_capacity', Aircraft.Fuel.TOTAL_CAPACITY),\n", + " ('total_fuel_capacity', Aircraft.Fuel.MAX_CAPACITY_MASS),\n", " ('unusable_fuel', Aircraft.Fuel.UNUSABLE_FUEL_MASS),\n", " ('overall_fuel', Mission.TOTAL_FUEL_MASS),\n", " ],\n", diff --git a/aviary/docs/examples_unreviewed/modified_aircraft.csv b/aviary/docs/examples_unreviewed/modified_aircraft.csv index 0c701879b8..6b01de0d7f 100644 --- a/aviary/docs/examples_unreviewed/modified_aircraft.csv +++ b/aviary/docs/examples_unreviewed/modified_aircraft.csv @@ -66,7 +66,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:length,128.0,ft diff --git a/aviary/docs/theory_guide/gasp_based_bwb.ipynb b/aviary/docs/theory_guide/gasp_based_bwb.ipynb index da6ecc80a9..d4f77adaa6 100644 --- a/aviary/docs/theory_guide/gasp_based_bwb.ipynb +++ b/aviary/docs/theory_guide/gasp_based_bwb.ipynb @@ -254,7 +254,7 @@ "glue_variable(get_variable_name(Aircraft.Fuel.FUEL_SYSTEM_MASS), md_code=True)\n", "glue_variable(get_variable_name(Aircraft.Design.STRUCTURE_MASS), md_code=True)\n", "glue_variable(get_variable_name(Aircraft.Propulsion.MASS), md_code=True)\n", - "glue_variable(get_variable_name(Aircraft.Fuel.TOTAL_CAPACITY), md_code=True)\n", + "glue_variable(get_variable_name(Aircraft.Fuel.MAX_CAPACITY_MASS), md_code=True)\n", "glue_variable(get_variable_name(Aircraft.Propulsion.TOTAL_ENGINE_POD_MASS), md_code=True)" ] }, @@ -281,7 +281,7 @@ "| {glue:md}`Aircraft.Design.STRUCTURE_MASS` | 44471 | WST | 45623 | the mass in GASP is computed after engine sizing. |\n", "| `FUEL_MASS` | 34188 | WFADES | 33268 | The mass in GASP is computed after engine sizing. |\n", "| {glue:md}`Aircraft.Propulsion.MASS` | 8628 | WP | 8592 | the mass in GASP is computed after engine sizing. |\n", - "| {glue:md}`Aircraft.Fuel.TOTAL_CAPACITY` | 38068 | WFAMAX | 33268 | The mass in GASP is computed after engine sizing. |\n", + "| {glue:md}`Aircraft.Fuel.MAX_CAPACITY_MASS` | 38068 | WFAMAX | 33268 | The mass in GASP is computed after engine sizing. |\n", "| {glue:md}`Aircraft.Propulsion.TOTAL_ENGINE_POD_MASS` | 1687 | WPES | the mass in GASP is computed after engine sizing. |\n", "| `FUEL_MASS_REQUIRED` | 34188 | WFAREQ | 36595 | Aviary does not include margin. |\n", "| | | | |\n", @@ -292,7 +292,7 @@ "\n", "![GASP based fuel mass computation](./images/gasp_bwb_fuel_mass.png)\n", "\n", - "A Newton solver is applied until `FUEL_MASS`, `wingfuel_mass_min` and {glue:md}`Aircraft.Fuel.TOTAL_CAPACITY` are converged.\n", + "A Newton solver is applied until `FUEL_MASS`, `wingfuel_mass_min` and {glue:md}`Aircraft.Fuel.MAX_CAPACITY_MASS` are converged.\n", "\n", "For conventional aircraft, {glue:md}`BWBFuselageMass` is replaced by {glue:md}`FuselageMass`." ] diff --git a/aviary/docs/theory_guide/mass.md b/aviary/docs/theory_guide/mass.md index f41952ced3..b869314288 100644 --- a/aviary/docs/theory_guide/mass.md +++ b/aviary/docs/theory_guide/mass.md @@ -17,17 +17,17 @@ The Fuel Capacity Group contains 4 subsystems: 1. Wing Fuel Capacity - There are 2 different relationships that can be used, and Aviary will switch between them based on the value of the Aircraft.Fuel.WING_REF_CAPACITY_TERM_A parameter. + There are 2 different relationships that can be used, and Aviary will switch between them based on the value of the Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL parameter. - If Aircraft.Fuel.WING_REF_CAPACITY_TERM_A > 0: + If Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL > 0: Aviary allows the user to specify their own relationship for fuel capacity as a polynomial function of the difference in wing area to some reference area. This is for compatability to legacy FLOPS, but in reality an aviary user will probably write their own OpenMDAO component for calculating wing fuel capacity rather than fitting their own coefficients to an equation of the form: Wing Fuel Capacity = Wing_Reference_Capacity * (coeff_a * Area Delta^1.5 + coeff_b * Area_Delta) - Where coeff_a and coeff_b are user specified (Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, Aircraft.Fuel.WING_REF_CAPACITY_TERM_B) + Where coeff_a and coeff_b are user specified (Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR) - Where Area_Delta = Aircraft.Wing.AREA - Aircraft.Fuel.WING_REF_CAPACITY_AREA (user specified) + Where Area_Delta = Aircraft.Wing.AREA - Aircraft.Fuel.WING_REFERENCE_AREA (user specified) Else (default): diff --git a/aviary/docs/user_guide_unreviewed/payload_range_functionality.ipynb b/aviary/docs/user_guide_unreviewed/payload_range_functionality.ipynb index 80350b3d21..d5a4d04ddd 100644 --- a/aviary/docs/user_guide_unreviewed/payload_range_functionality.ipynb +++ b/aviary/docs/user_guide_unreviewed/payload_range_functionality.ipynb @@ -29,7 +29,7 @@ "glue_variable('operating_mass', av.Mission.OPERATING_MASS, md_code=True)\n", "glue_variable('total_payload_mass', av.Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS, md_code=True)\n", "glue_variable('design_gross_mass', av.Aircraft.Design.GROSS_MASS, md_code=True)\n", - "glue_variable('total_fuel_capacity', av.Aircraft.Fuel.TOTAL_CAPACITY, md_code=True)\n", + "glue_variable('total_fuel_capacity', av.Aircraft.Fuel.MAX_CAPACITY_MASS, md_code=True)\n", "\n", "file_path3 = av.get_path('validation_cases/validation_data/test_models/aircraft_for_bench_FwFm.csv')\n", "\n", diff --git a/aviary/interface/reports.py b/aviary/interface/reports.py index 44f7bbaea1..4f5f02e05e 100644 --- a/aviary/interface/reports.py +++ b/aviary/interface/reports.py @@ -280,7 +280,7 @@ def _get_phase_diff(model, traj, phase, var_name, units, indices=[0, -1]): totals.set_val( 'Total Fuel Capacity', - prob.get_val(f'{var_name}aircraft:fuel:total_capacity', units='lbm')[0], + prob.get_val(f'{var_name}aircraft:fuel:max_capacity_mass', units='lbm')[0], units='lbm', ) totals.set_val( diff --git a/aviary/interface/test/sizing_results_for_test.json b/aviary/interface/test/sizing_results_for_test.json index 760aa600f8..5bb76c7a6a 100644 --- a/aviary/interface/test/sizing_results_for_test.json +++ b/aviary/interface/test/sizing_results_for_test.json @@ -502,7 +502,7 @@ "" ], [ - "aircraft:fuel:total_capacity", + "aircraft:fuel:max_capacity_mass", 45694.0, "lbm", "" diff --git a/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_FLOPS.csv b/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_FLOPS.csv index 63544bdfd8..4a1f70d0db 100644 --- a/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_FLOPS.csv +++ b/aviary/models/aircraft/advanced_single_aisle/advanced_single_aisle_FLOPS.csv @@ -69,7 +69,7 @@ aircraft:fuel:wing_fuel_fraction,0.7752,unitless aircraft:fuel:fuel_system_mass_scaler,0.93202,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,33136.4,lbm +aircraft:fuel:max_capacity_mass,33136.4,lbm aircraft:fuel:unusable_fuel_mass_scaler,1,unitless aircraft:fuel:wing_fuel_mass_capacity,33136.4,lbm aircraft:furnishings:mass_scaler,0.81859,unitless diff --git a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv index 46e3e33c4d..b1cf3fec01 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv +++ b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv @@ -84,9 +84,9 @@ aircraft:fuel:ignore_fuel_capacity_constraint,False,unitless aircraft:fuel:num_tanks,7,unitless aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:fuel:wing_fuel_fraction,0.6883549569366508,unitless -aircraft:fuel:wing_ref_capacity,0.0,lbm -aircraft:fuel:wing_ref_capacity_term_a,0.0,unitless -aircraft:fuel:wing_ref_capacity_term_b,0.0,unitless +aircraft:fuel:wing_reference_capacity,0.0,lbm +aircraft:fuel:wing_reference_capacity_term_a,0.0,unitless +aircraft:fuel:wing_reference_capacity_term_b,0.0,unitless aircraft:furnishings:mass_scaler,1.118,unitless aircraft:fuselage:sidebody_thickness_to_chord,0.1792,unitless aircraft:fuselage:laminar_flow_lower,0.0,unitless diff --git a/aviary/models/aircraft/large_single_aisle_1/large_single_aisle_1_FLOPS.csv b/aviary/models/aircraft/large_single_aisle_1/large_single_aisle_1_FLOPS.csv index 0940ea3d60..f20015090b 100644 --- a/aviary/models/aircraft/large_single_aisle_1/large_single_aisle_1_FLOPS.csv +++ b/aviary/models/aircraft/large_single_aisle_1/large_single_aisle_1_FLOPS.csv @@ -74,7 +74,7 @@ aircraft:fuel:density,6.7,lbm/galUS aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:length,128.0,ft diff --git a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_FLOPS.csv b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_FLOPS.csv index dc6e9a3c83..deb7e2509b 100644 --- a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_FLOPS.csv +++ b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_FLOPS.csv @@ -72,7 +72,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:density,6.7,lbm/galUS aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,46063.0,lbm +aircraft:fuel:max_capacity_mass,46063.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:fuel:wing_fuel_fraction,0.7752,unitless aircraft:furnishings:mass_scaler,1.0,unitless diff --git a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS.csv b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS.csv index 880b441273..cd3b6277fc 100644 --- a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS.csv +++ b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_altwt_FLOPS.csv @@ -71,7 +71,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:density,6.7,lbm/galUS aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,46063.0,lbm +aircraft:fuel:max_capacity_mass,46063.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:fuel:wing_fuel_fraction,0.7752,unitless aircraft:furnishings:mass_scaler,1.0,unitless diff --git a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS.csv b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS.csv index e2becf4639..9dd350909d 100644 --- a/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS.csv +++ b/aviary/models/aircraft/large_single_aisle_2/large_single_aisle_2_detailwing_FLOPS.csv @@ -70,7 +70,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:density,6.7,lbm/galUS aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,46063.0,lbm +aircraft:fuel:max_capacity_mass,46063.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.0,unitless aircraft:fuselage:length,124.75,ft diff --git a/aviary/subsystems/mass/flops_based/fuel_capacity.py b/aviary/subsystems/mass/flops_based/fuel_capacity.py index 97d7963502..94155a2966 100644 --- a/aviary/subsystems/mass/flops_based/fuel_capacity.py +++ b/aviary/subsystems/mass/flops_based/fuel_capacity.py @@ -43,13 +43,13 @@ class FuselageFuelCapacity(om.ExplicitComponent): """Compute the maximum fuel that can be carried in the fuselage.""" def setup(self): - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_input(self, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, units='lbm') add_aviary_output(self, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, units='lbm') def setup_partials(self): self.declare_partials( - Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, Aircraft.Fuel.TOTAL_CAPACITY, val=1.0 + Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, Aircraft.Fuel.MAX_CAPACITY_MASS, val=1.0 ) self.declare_partials( Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, @@ -59,7 +59,7 @@ def setup_partials(self): def compute(self, inputs, outputs): outputs[Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY] = ( - inputs[Aircraft.Fuel.TOTAL_CAPACITY] - inputs[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY] + inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] - inputs[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY] ) @@ -67,14 +67,14 @@ class AuxFuelCapacity(om.ExplicitComponent): """Compute the maximum fuel that can be carried in the auxiliary tanks.""" def setup(self): - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_input(self, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, units='lbm') add_aviary_input(self, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, units='lbm') add_aviary_output(self, Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, units='lbm') def setup_partials(self): self.declare_partials( - Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, Aircraft.Fuel.TOTAL_CAPACITY, val=1.0 + Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, Aircraft.Fuel.MAX_CAPACITY_MASS, val=1.0 ) self.declare_partials( Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, @@ -89,7 +89,7 @@ def setup_partials(self): def compute(self, inputs, outputs): outputs[Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY] = ( - inputs[Aircraft.Fuel.TOTAL_CAPACITY] + inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] - inputs[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY] - inputs[Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY] ) @@ -102,21 +102,21 @@ def setup(self): add_aviary_input(self, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, units='lbm') add_aviary_input(self, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, units='lbm') add_aviary_input(self, Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, units='lbm') - add_aviary_output(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_output(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') def setup_partials(self): self.declare_partials( - Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, val=1.0 + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, val=1.0 ) self.declare_partials( - Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, val=1.0 + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, val=1.0 ) self.declare_partials( - Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, val=1.0 + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, val=1.0 ) def compute(self, inputs, outputs): - outputs[Aircraft.Fuel.TOTAL_CAPACITY] = ( + outputs[Aircraft.Fuel.MAX_CAPACITY_MASS] = ( inputs[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY] + inputs[Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY] + inputs[Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY] @@ -128,10 +128,10 @@ class WingFuelCapacity(om.ExplicitComponent): def setup(self): 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') - add_aviary_input(self, Aircraft.Fuel.WING_REF_CAPACITY_TERM_B, units='unitless') + add_aviary_input(self, Aircraft.Fuel.WING_REFERENCE_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.WING_REFERENCE_AREA, units='ft**2') + add_aviary_input(self, Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, units='unitless') + add_aviary_input(self, Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR, units='unitless') add_aviary_input(self, Aircraft.Fuel.WING_FUEL_FRACTION, units='unitless') add_aviary_input(self, Aircraft.Wing.AREA, units='ft**2') add_aviary_input(self, Aircraft.Wing.SPAN, units='ft') @@ -144,18 +144,18 @@ def setup_partials(self): self.declare_partials('*', '*') def compute(self, inputs, outputs): - wing_ref_cap_terma = inputs[Aircraft.Fuel.WING_REF_CAPACITY_TERM_A] + wing_cap_terma = inputs[Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL] wing_area = inputs[Aircraft.Wing.AREA] - if wing_ref_cap_terma.real > 0.0: - wing_ref_cap = inputs[Aircraft.Fuel.WING_REF_CAPACITY] - wing_ref_cap_area = inputs[Aircraft.Fuel.WING_REF_CAPACITY_AREA] - wing_ref_cap_termb = inputs[Aircraft.Fuel.WING_REF_CAPACITY_TERM_B] + if wing_cap_terma.real > 0.0: + wing_ref_cap = inputs[Aircraft.Fuel.WING_REFERENCE_CAPACITY] + wing_ref_area = inputs[Aircraft.Fuel.WING_REFERENCE_AREA] + wing_cap_termb = inputs[Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR] fuel_cap_wing = ( wing_ref_cap - + wing_ref_cap_terma * (wing_area**1.5 - wing_ref_cap_area**1.5) - + wing_ref_cap_termb * (wing_area - wing_ref_cap_area) + + wing_cap_terma * (wing_area**1.5 - wing_ref_area**1.5) + + wing_cap_termb * (wing_area - wing_ref_area) ) else: @@ -177,30 +177,33 @@ def compute(self, inputs, outputs): outputs[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY] = fuel_cap_wing / GRAV_ENGLISH_LBM def compute_partials(self, inputs, partials): - wing_ref_cap_terma = inputs[Aircraft.Fuel.WING_REF_CAPACITY_TERM_A] + wing_cap_terma = inputs[Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL] wing_area = inputs[Aircraft.Wing.AREA] - if wing_ref_cap_terma.real > 0.0: - wing_ref_cap_area = inputs[Aircraft.Fuel.WING_REF_CAPACITY_AREA] - wing_ref_cap_termb = inputs[Aircraft.Fuel.WING_REF_CAPACITY_TERM_B] + if wing_cap_terma.real > 0.0: + wing_ref_area = inputs[Aircraft.Fuel.WING_REFERENCE_AREA] + wing_cap_termb = inputs[Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR] - partials[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REF_CAPACITY] = 1.0 + partials[ + Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REFERENCE_CAPACITY + ] = 1.0 partials[ - Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REF_CAPACITY_TERM_A - ] = wing_area**1.5 - wing_ref_cap_area**1.5 + Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, + ] = wing_area**1.5 - wing_ref_area**1.5 partials[ - Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REF_CAPACITY_TERM_B - ] = wing_area - wing_ref_cap_area + Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR + ] = wing_area - wing_ref_area partials[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Wing.AREA] = ( - 1.5 * wing_ref_cap_terma * wing_area**0.5 + wing_ref_cap_termb + 1.5 * wing_cap_terma * wing_area**0.5 + wing_cap_termb ) - partials[ - Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REF_CAPACITY_AREA - ] = -1.5 * wing_ref_cap_terma * wing_ref_cap_area**0.5 - wing_ref_cap_termb + partials[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.WING_REFERENCE_AREA] = ( + -1.5 * wing_cap_terma * wing_ref_area**0.5 - wing_cap_termb + ) else: fuel_density = inputs[Aircraft.Fuel.DENSITY] * GRAV_ENGLISH_LBM diff --git a/aviary/subsystems/mass/flops_based/fuel_system.py b/aviary/subsystems/mass/flops_based/fuel_system.py index 4230bf921d..5e37d5b559 100644 --- a/aviary/subsystems/mass/flops_based/fuel_system.py +++ b/aviary/subsystems/mass/flops_based/fuel_system.py @@ -19,7 +19,7 @@ def initialize(self): def setup(self): add_aviary_input(self, Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, units='unitless') - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_output(self, Aircraft.Fuel.FUEL_SYSTEM_MASS, units='lbm') @@ -28,7 +28,7 @@ def setup_partials(self): def compute(self, inputs, outputs): scaler = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] - capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] num_eng = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] num_eng_fact = distributed_engine_count_factor(num_eng) max_mach = self.options[Mission.Constraints.MAX_MACH] @@ -39,7 +39,7 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, J): scaler = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] - capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] num_eng = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] num_eng_fact = distributed_engine_count_factor(num_eng) max_mach = self.options[Mission.Constraints.MAX_MACH] @@ -48,7 +48,7 @@ def compute_partials(self, inputs, J): 1.07 * capacity**0.58 * num_eng_fact**0.43 * max_mach**0.34 / GRAV_ENGLISH_LBM ) - J[Aircraft.Fuel.FUEL_SYSTEM_MASS, Aircraft.Fuel.TOTAL_CAPACITY] = ( + J[Aircraft.Fuel.FUEL_SYSTEM_MASS, Aircraft.Fuel.MAX_CAPACITY_MASS] = ( 1.07 * 0.58 * capacity**-0.42 @@ -70,7 +70,7 @@ def initialize(self): add_aviary_option(self, Aircraft.Fuel.NUM_TANKS) def setup(self): - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_input(self, Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, units='unitless') add_aviary_output(self, Aircraft.Fuel.FUEL_SYSTEM_MASS, units='lbm') @@ -80,7 +80,7 @@ def setup_partials(self): def compute(self, inputs, outputs): number_of_fuel_tanks = self.options[Aircraft.Fuel.NUM_TANKS] - total_fuel_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_fuel_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] scaler = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] fuel_sys_weight = ( @@ -94,10 +94,10 @@ def compute(self, inputs, outputs): def compute_partials(self, inputs, J): number_of_fuel_tanks = self.options[Aircraft.Fuel.NUM_TANKS] - total_fuel_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_fuel_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] scaler = inputs[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER] - J[Aircraft.Fuel.FUEL_SYSTEM_MASS, Aircraft.Fuel.TOTAL_CAPACITY] = ( + J[Aircraft.Fuel.FUEL_SYSTEM_MASS, Aircraft.Fuel.MAX_CAPACITY_MASS] = ( ( 2283.4 * (2.0 / 3.0) diff --git a/aviary/subsystems/mass/flops_based/test/test_fuel_capacity.py b/aviary/subsystems/mass/flops_based/test/test_fuel_capacity.py index 3fe3eabd49..d5b4068954 100644 --- a/aviary/subsystems/mass/flops_based/test/test_fuel_capacity.py +++ b/aviary/subsystems/mass/flops_based/test/test_fuel_capacity.py @@ -72,7 +72,7 @@ def configure(self): Aircraft.Wing.TAPER_RATIO, Aircraft.Wing.THICKNESS_TO_CHORD, ], - output_keys=Aircraft.Fuel.TOTAL_CAPACITY, + output_keys=Aircraft.Fuel.MAX_CAPACITY_MASS, atol=1e-10, rtol=1e-10, ) @@ -82,29 +82,29 @@ def configure(self): wing_capacity_data['1'] = AviaryValues( { Aircraft.Fuel.DENSITY: (8.04, 'lbm/galUS'), - Aircraft.Fuel.WING_REF_CAPACITY: (30.0, 'lbm'), - Aircraft.Fuel.WING_REF_CAPACITY_AREA: (200.0, 'unitless'), - Aircraft.Fuel.WING_REF_CAPACITY_TERM_B: (1.3, 'unitless'), + Aircraft.Fuel.WING_REFERENCE_CAPACITY: (30.0, 'lbm'), + Aircraft.Fuel.WING_REFERENCE_AREA: (200.0, 'ft**2'), + Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR: (1.3, 'unitless'), Aircraft.Fuel.WING_FUEL_FRACTION: (0.7752, 'unitless'), Aircraft.Wing.AREA: (150.0, 'ft**2'), Aircraft.Wing.SPAN: (17.0, 'ft'), Aircraft.Wing.TAPER_RATIO: (1.5, 'unitless'), Aircraft.Wing.THICKNESS_TO_CHORD: (0.33, 'unitless'), - Aircraft.Fuel.WING_REF_CAPACITY_TERM_A: (-100.0, 'unitless'), + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL: (-100.0, 'unitless'), } ) wing_capacity_data['2'] = AviaryValues( { Aircraft.Fuel.DENSITY: (8.04, 'lbm/galUS'), - Aircraft.Fuel.WING_REF_CAPACITY: (30.0, 'lbm'), - Aircraft.Fuel.WING_REF_CAPACITY_AREA: (200.0, 'unitless'), - Aircraft.Fuel.WING_REF_CAPACITY_TERM_B: (1.3, 'unitless'), + Aircraft.Fuel.WING_REFERENCE_CAPACITY: (30.0, 'lbm'), + Aircraft.Fuel.WING_REFERENCE_AREA: (200.0, 'ft**2'), + Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR: (1.3, 'unitless'), Aircraft.Fuel.WING_FUEL_FRACTION: (0.7752, 'unitless'), Aircraft.Wing.AREA: (150.0, 'ft**2'), Aircraft.Wing.SPAN: (17.0, 'ft'), Aircraft.Wing.TAPER_RATIO: (1.5, 'unitless'), Aircraft.Wing.THICKNESS_TO_CHORD: (0.33, 'unitless'), - Aircraft.Fuel.WING_REF_CAPACITY_TERM_A: (1.2, 'unitless'), + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL: (1.2, 'unitless'), } ) @@ -128,15 +128,15 @@ def test_derivs(self, case_name): output_validation_data=validation_data, input_keys=[ Aircraft.Fuel.DENSITY, - Aircraft.Fuel.WING_REF_CAPACITY, - Aircraft.Fuel.WING_REF_CAPACITY_AREA, - Aircraft.Fuel.WING_REF_CAPACITY_TERM_B, + Aircraft.Fuel.WING_REFERENCE_CAPACITY, + Aircraft.Fuel.WING_REFERENCE_AREA, + Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR, Aircraft.Fuel.WING_FUEL_FRACTION, Aircraft.Wing.AREA, Aircraft.Wing.SPAN, Aircraft.Wing.TAPER_RATIO, Aircraft.Wing.THICKNESS_TO_CHORD, - Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, ], output_keys=Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, atol=1e-10, @@ -148,7 +148,7 @@ def test_derivs(self, case_name): fuse_capacity_data = {} fuse_capacity_data['1'] = AviaryValues( { - Aircraft.Fuel.TOTAL_CAPACITY: (100.0, 'lbm'), + Aircraft.Fuel.MAX_CAPACITY_MASS: (100.0, 'lbm'), Aircraft.Fuel.WING_FUEL_MASS_CAPACITY: (73.0, 'lbm'), Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY: (27.0, 'lbm'), } @@ -172,7 +172,7 @@ def test_basic(self, case_name): prob, input_validation_data=validation_data, output_validation_data=validation_data, - input_keys=[Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY], + input_keys=[Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY], output_keys=Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, tol=1.0e-10, atol=1e-10, @@ -182,7 +182,7 @@ def test_basic(self, case_name): aux_capacity_data = {} aux_capacity_data['1'] = AviaryValues( { - Aircraft.Fuel.TOTAL_CAPACITY: (100.0, 'lbm'), + Aircraft.Fuel.MAX_CAPACITY_MASS: (100.0, 'lbm'), Aircraft.Fuel.WING_FUEL_MASS_CAPACITY: (25.0, 'lbm'), Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY: (33.0, 'lbm'), Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY: (42.0, 'lbm'), @@ -212,7 +212,7 @@ def test_basic(self, case_name): input_validation_data=validation_data, output_validation_data=validation_data, input_keys=[ - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, ], @@ -231,7 +231,7 @@ def test_IO(self): Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY: (100.0, 'lbm'), Aircraft.Fuel.WING_FUEL_MASS_CAPACITY: (25.0, 'lbm'), Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY: (33.0, 'lbm'), - Aircraft.Fuel.TOTAL_CAPACITY: (158.0, 'lbm'), + Aircraft.Fuel.MAX_CAPACITY_MASS: (158.0, 'lbm'), } ) @@ -261,7 +261,7 @@ def test_basic(self, case_name): Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, ], - output_keys=Aircraft.Fuel.TOTAL_CAPACITY, + output_keys=Aircraft.Fuel.MAX_CAPACITY_MASS, tol=1.0e-10, atol=1e-10, ) diff --git a/aviary/subsystems/mass/flops_based/test/test_fuel_system.py b/aviary/subsystems/mass/flops_based/test/test_fuel_system.py index 4a74f2ece8..15cf34f1ad 100644 --- a/aviary/subsystems/mass/flops_based/test/test_fuel_system.py +++ b/aviary/subsystems/mass/flops_based/test/test_fuel_system.py @@ -48,7 +48,7 @@ def test_case(self, case_name): self, prob, case_name, - input_keys=[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, Aircraft.Fuel.TOTAL_CAPACITY], + input_keys=[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, Aircraft.Fuel.MAX_CAPACITY_MASS], output_keys=Aircraft.Fuel.FUEL_SYSTEM_MASS, version=Version.ALTERNATE, ) @@ -86,7 +86,7 @@ def test_case(self): promotes_inputs=['*'], ) prob.setup(check=False, force_alloc_complex=True) - prob.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 100.0, 'lbm') + prob.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 100.0, 'lbm') partial_data = prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -123,7 +123,7 @@ def test_case(self, case_name): self, prob, case_name, - input_keys=[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, Aircraft.Fuel.TOTAL_CAPACITY], + input_keys=[Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, Aircraft.Fuel.MAX_CAPACITY_MASS], output_keys=Aircraft.Fuel.FUEL_SYSTEM_MASS, version=Version.TRANSPORT_and_BWB, tol=8.0e-4, @@ -165,7 +165,7 @@ def test_case(self): promotes_inputs=['*'], ) prob.setup(check=False, force_alloc_complex=True) - prob.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 100.0, 'lbm') + prob.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 100.0, 'lbm') partial_data = prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) diff --git a/aviary/subsystems/mass/flops_based/test/test_unusable_fuel.py b/aviary/subsystems/mass/flops_based/test/test_unusable_fuel.py index c5e414ca7a..35d857205c 100644 --- a/aviary/subsystems/mass/flops_based/test/test_unusable_fuel.py +++ b/aviary/subsystems/mass/flops_based/test/test_unusable_fuel.py @@ -49,11 +49,11 @@ def test_case(self, case_name): input_keys=[ Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, Aircraft.Fuel.DENSITY, - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, Aircraft.Wing.AREA, ], - output_keys=[ # Aircraft.Fuel.TOTAL_VOLUME, + output_keys=[ # Aircraft.Fuel.MAX_CAPACITY_VOLUME, Aircraft.Fuel.UNUSABLE_FUEL_MASS ], version=Version.TRANSPORT_and_BWB, @@ -91,7 +91,7 @@ def test_case(self): prob.model_options['*'] = get_flops_options('AdvancedSingleAisle', preprocess=True) prob.setup(check=False, force_alloc_complex=True) - prob.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 30000.0, 'lbm') + prob.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 30000.0, 'lbm') prob.set_val(Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, 40000.0, 'lbf') prob.set_val(Aircraft.Wing.AREA, 1000.0, 'ft**2') @@ -120,8 +120,8 @@ def test_case(self, case_name): self, prob, case_name, - input_keys=[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, Aircraft.Fuel.TOTAL_CAPACITY], - output_keys=[ # Aircraft.Fuel.TOTAL_VOLUME, + input_keys=[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, Aircraft.Fuel.MAX_CAPACITY_MASS], + output_keys=[ # Aircraft.Fuel.MAX_CAPACITY_VOLUME, Aircraft.Fuel.UNUSABLE_FUEL_MASS ], version=Version.ALTERNATE, @@ -150,7 +150,7 @@ def test_case(self): 'unusable_fuel', AltUnusableFuelMass(), promotes_outputs=['*'], promotes_inputs=['*'] ) prob.setup(check=False, force_alloc_complex=True) - prob.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 30000.0, 'lbm') + prob.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 30000.0, 'lbm') partial_data = prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) diff --git a/aviary/subsystems/mass/flops_based/unusable_fuel.py b/aviary/subsystems/mass/flops_based/unusable_fuel.py index 29756329fc..48b37d3e11 100644 --- a/aviary/subsystems/mass/flops_based/unusable_fuel.py +++ b/aviary/subsystems/mass/flops_based/unusable_fuel.py @@ -28,16 +28,19 @@ def initialize(self): def setup(self): add_aviary_input(self, Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, units='unitless') add_aviary_input(self, Aircraft.Fuel.DENSITY, units='lbm/galUS') - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_input(self, Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, units='lbf') add_aviary_input(self, Aircraft.Wing.AREA, units='ft**2') - add_aviary_output(self, Aircraft.Fuel.TOTAL_VOLUME, units='galUS') # not computed nor used + add_aviary_output( + self, Aircraft.Fuel.MAX_CAPACITY_VOLUME, units='galUS' + ) # not computed nor used add_aviary_output(self, Aircraft.Fuel.UNUSABLE_FUEL_MASS, units='lbm') def setup_partials(self): self.declare_partials( - Aircraft.Fuel.TOTAL_VOLUME, [Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.DENSITY] + Aircraft.Fuel.MAX_CAPACITY_VOLUME, + [Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.DENSITY], ) self.declare_partials( @@ -46,7 +49,7 @@ def setup_partials(self): Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST, Aircraft.Wing.AREA, - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.DENSITY, ], ) @@ -56,7 +59,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): scaler = inputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] # Calculate fuel density ratio relative to Jet A: 6.7 lbm/galUS = 50.11948 lbm/ft**3 density_ratio = inputs[Aircraft.Fuel.DENSITY] / 6.7 - total_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] num_eng = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] num_eng_fact = distributed_engine_count_factor(num_eng) max_sls_thrust = inputs[Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST] @@ -64,7 +67,7 @@ def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): wing_area = inputs[Aircraft.Wing.AREA] # This is a volume: lbm / (lbm/galUS) - # outputs[Aircraft.Fuel.TOTAL_VOLUME] = total_capacity / density_ratio + # outputs[Aircraft.Fuel.MAX_CAPACITY_VOLUME] = total_capacity / density_ratio outputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS] = ( ( @@ -83,7 +86,7 @@ def compute_partials(self, inputs, J): tank_count = self.options[Aircraft.Fuel.NUM_TANKS] scaler = inputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] density_ratio = inputs[Aircraft.Fuel.DENSITY] / 6.7 - total_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] num_eng = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] num_eng_fact = distributed_engine_count_factor(num_eng) max_sls_thrust = inputs[Aircraft.Propulsion.TOTAL_SCALED_SLS_THRUST] @@ -93,10 +96,10 @@ def compute_partials(self, inputs, J): term1 = thrust_factor**0.2 term2 = total_capacity**0.28 - # J[Aircraft.Fuel.TOTAL_VOLUME, Aircraft.Fuel.TOTAL_CAPACITY] = ( + # J[Aircraft.Fuel.MAX_CAPACITY_VOLUME, Aircraft.Fuel.MAX_CAPACITY_MASS] = ( # 1.0 / density_ratio) - # J[Aircraft.Fuel.TOTAL_VOLUME, Aircraft.Fuel.DENSITY_RATIO] = ( + # J[Aircraft.Fuel.MAX_CAPACITY_VOLUME, Aircraft.Fuel.DENSITY_RATIO] = ( # -total_capacity / (density_ratio * density_ratio)) J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] = ( @@ -113,7 +116,7 @@ def compute_partials(self, inputs, J): 0.07 * density_ratio * scaler / GRAV_ENGLISH_LBM ) - J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.TOTAL_CAPACITY] = ( + J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.MAX_CAPACITY_MASS] = ( 0.448 * tank_count * total_capacity**-0.72 * density_ratio * scaler / GRAV_ENGLISH_LBM ) @@ -134,7 +137,7 @@ class AltUnusableFuelMass(om.ExplicitComponent): def setup(self): add_aviary_input(self, Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, units='unitless') - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_output(self, Aircraft.Fuel.UNUSABLE_FUEL_MASS, units='lbm') @@ -142,17 +145,17 @@ def setup_partials(self): self.declare_partials(of='*', wrt='*') def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): - total_fuel_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_fuel_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] scaler = inputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] outputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS] = 0.0084 * total_fuel_capacity * scaler def compute_partials(self, inputs, J): - total_fuel_capacity = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_fuel_capacity = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] scaler = inputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER] = ( 0.0084 * total_fuel_capacity ) - J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.TOTAL_CAPACITY] = 0.0084 * scaler + J[Aircraft.Fuel.UNUSABLE_FUEL_MASS, Aircraft.Fuel.MAX_CAPACITY_MASS] = 0.0084 * scaler diff --git a/aviary/subsystems/mass/gasp_based/fuel.py b/aviary/subsystems/mass/gasp_based/fuel.py index 83c2f09bb2..09a48ed3a4 100644 --- a/aviary/subsystems/mass/gasp_based/fuel.py +++ b/aviary/subsystems/mass/gasp_based/fuel.py @@ -58,7 +58,7 @@ def setup(self): desc='WFXTRAMX: mass of fuel that fits in extra_fuel_volume', ) # there is no WFXTRAMX in GASP self.add_output('wingfuel_mass_min', units='lbm', desc='WFWMIN: minimum wing fuel mass') - add_aviary_output(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm', desc='WFAMAX') + add_aviary_output(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm', desc='WFAMAX') def setup_partials(self): self.declare_partials( @@ -93,7 +93,7 @@ def setup_partials(self): ], ) self.declare_partials( - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, [ 'fuel_mass', 'fuel_mass_required', @@ -103,7 +103,7 @@ def setup_partials(self): ], ) self.declare_partials( - Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Fuel.UNUSABLE_FUEL_MASS, val=1.0 + Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Fuel.UNUSABLE_FUEL_MASS, val=1.0 ) def compute(self, inputs, outputs): @@ -192,7 +192,9 @@ def compute(self, inputs, outputs): # pass back to FuelSysAndFullFuselageMass outputs['wingfuel_mass_min'] = wingfuel_wt_min / GRAV_ENGLISH_LBM # pass back to FuelAndOEMOutputs - outputs[Aircraft.Fuel.TOTAL_CAPACITY] = (max_fuel_avail + unusable_fuel) / GRAV_ENGLISH_LBM + outputs[Aircraft.Fuel.MAX_CAPACITY_MASS] = ( + max_fuel_avail + unusable_fuel + ) / GRAV_ENGLISH_LBM def compute_partials(self, inputs, J): design_fuel_vol = inputs[Aircraft.Fuel.WING_VOLUME_DESIGN] @@ -322,7 +324,7 @@ def compute_partials(self, inputs, J): dwingfuel_wt_min_dgeom_fuel_vol = 0.0 dwingfuel_wt_min_drho_fuel = 0.0 - # partials of Aircraft.Fuel.TOTAL_CAPACITY + # partials of Aircraft.Fuel.MAX_CAPACITY_MASS max_fuel_avail_est = fuel_wt_des + extra_fuel_wt dmax_fuel_avail_est_dfuel_wt_des = 1 dmax_fuel_avail_est_dreq_fuel_wt = dextra_fuel_wt_dreq_fuel_wt @@ -468,13 +470,13 @@ def compute_partials(self, inputs, J): ) J['wingfuel_mass_min', Aircraft.Fuel.DENSITY] = dwingfuel_wt_min_drho_fuel - J[Aircraft.Fuel.TOTAL_CAPACITY, 'fuel_mass'] = dmax_fuel_avail_dfuel_wt_des - J[Aircraft.Fuel.TOTAL_CAPACITY, 'fuel_mass_required'] = dmax_fuel_avail_dreq_fuel_wt - J[Aircraft.Fuel.TOTAL_CAPACITY, 'max_wingfuel_mass'] = dmax_fuel_avail_dmax_wingfuel_wt - J[Aircraft.Fuel.TOTAL_CAPACITY, Aircraft.Design.GROSS_MASS] = ( + J[Aircraft.Fuel.MAX_CAPACITY_MASS, 'fuel_mass'] = dmax_fuel_avail_dfuel_wt_des + J[Aircraft.Fuel.MAX_CAPACITY_MASS, 'fuel_mass_required'] = dmax_fuel_avail_dreq_fuel_wt + J[Aircraft.Fuel.MAX_CAPACITY_MASS, 'max_wingfuel_mass'] = dmax_fuel_avail_dmax_wingfuel_wt + J[Aircraft.Fuel.MAX_CAPACITY_MASS, Aircraft.Design.GROSS_MASS] = ( dmax_fuel_avail_dgross_wt_initial ) - J[Aircraft.Fuel.TOTAL_CAPACITY, Mission.OPERATING_MASS] = dmax_fuel_avail_dOEW + J[Aircraft.Fuel.MAX_CAPACITY_MASS, Mission.OPERATING_MASS] = dmax_fuel_avail_dOEW class FuelComponents(om.ExplicitComponent): @@ -492,7 +494,7 @@ def setup(self): self.add_input('fuel_mass_required', units='lbm', desc='WFAREQ: no margin') add_aviary_input(self, Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX, units='ft**3') add_aviary_input(self, Aircraft.Fuel.VOLUME_MARGIN, units='unitless') - add_aviary_input(self, Aircraft.Fuel.TOTAL_CAPACITY, units='lbm') + add_aviary_input(self, Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm') add_aviary_input(self, Mission.OPERATING_MASS, units='lbm') # GASP total capacity didn't include the unusable mass, but Aviary total capacity does. @@ -548,7 +550,7 @@ def setup_partials(self): self.declare_partials( 'payload_mass_max_fuel', [ - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, Mission.OPERATING_MASS, ], val=-1.0, @@ -585,7 +587,7 @@ def compute(self, inputs, outputs): fuel_margin = inputs[Aircraft.Fuel.VOLUME_MARGIN] OEW = inputs[Mission.OPERATING_MASS] * GRAV_ENGLISH_LBM - total_fuel = inputs[Aircraft.Fuel.TOTAL_CAPACITY] + total_fuel = inputs[Aircraft.Fuel.MAX_CAPACITY_MASS] unusable_fuel = inputs[Aircraft.Fuel.UNUSABLE_FUEL_MASS] max_fuel_avail = (total_fuel - unusable_fuel) * GRAV_ENGLISH_LBM diff --git a/aviary/subsystems/mass/gasp_based/test/test_fuel.py b/aviary/subsystems/mass/gasp_based/test/test_fuel.py index 1e56e9f39f..9194350675 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_fuel.py +++ b/aviary/subsystems/mass/gasp_based/test/test_fuel.py @@ -60,7 +60,7 @@ def test_case1(self): self.prob['max_extra_fuel_mass'], 34.67277748, tol ) # note: not in version 3 output, calculated by hand assert_near_equal(self.prob['wingfuel_mass_min'], 32818.32722252, tol) - # note: Aircraft.Fuel.TOTAL_CAPACITY is calculated differently in V3, so it is not included here + # note: Aircraft.Fuel.MAX_CAPACITY_MASS is calculated differently in V3, so it is not included here partial_data = self.prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -100,7 +100,7 @@ def test_case1(self): assert_near_equal(self.prob['extra_fuel_volume'], 112.5, tol) assert_near_equal(self.prob['max_extra_fuel_mass'], 5628.9, tol) assert_near_equal(self.prob['wingfuel_mass_min'], 29313.9, tol) - assert_near_equal(self.prob[Aircraft.Fuel.TOTAL_CAPACITY], 46093.7, tol) + assert_near_equal(self.prob[Aircraft.Fuel.MAX_CAPACITY_MASS], 46093.7, tol) partial_data = self.prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -190,7 +190,7 @@ def test_case1(self): self.prob['max_extra_fuel_mass'], 34.67277748, tol ) # note: not in version 3 output, calculated by hand assert_near_equal(self.prob['wingfuel_mass_min'], 32818.32722252, tol) - # note: Aircraft.Fuel.TOTAL_CAPACITY is calculated differently in V3, so it is not included here + # note: Aircraft.Fuel.MAX_CAPACITY_MASS is calculated differently in V3, so it is not included here partial_data = self.prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -241,7 +241,7 @@ def test_case1(self): self.prob['max_extra_fuel_mass'], 0.0, tol ) # note: not in version 3 output, calulated by hand assert_near_equal(self.prob['wingfuel_mass_min'], 14115.342, tol) - # note: Aircraft.Fuel.TOTAL_CAPACITY is calculated differently in V3, so it is not included here + # note: Aircraft.Fuel.MAX_CAPACITY_MASS is calculated differently in V3, so it is not included here partial_data = self.prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -292,7 +292,7 @@ def test_case1(self): self.prob['max_extra_fuel_mass'], 34.672731, tol ) # note: not in version 3 output, calulated by hand assert_near_equal(self.prob['wingfuel_mass_min'], 14080.669, tol) - # note: Aircraft.Fuel.TOTAL_CAPACITY is calculated differently in V3, so it is not included here + # note: Aircraft.Fuel.MAX_CAPACITY_MASS is calculated differently in V3, so it is not included here partial_data = self.prob.check_partials(out_stream=None, method='cs') assert_check_partials(partial_data, atol=1e-12, rtol=1e-12) @@ -355,7 +355,9 @@ def setUp(self): Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX, 1114, units='ft**3' ) self.prob.model.set_input_defaults(Aircraft.Fuel.VOLUME_MARGIN, val=0, units='unitless') - self.prob.model.set_input_defaults(Aircraft.Fuel.TOTAL_CAPACITY, val=55725.1, units='lbm') + self.prob.model.set_input_defaults( + Aircraft.Fuel.MAX_CAPACITY_MASS, val=55725.1, units='lbm' + ) setup_model_options( self.prob, AviaryValues({Aircraft.Engine.NUM_ENGINES: ([2], 'unitless')}) @@ -402,7 +404,7 @@ def test_case1(self): prob.model.set_input_defaults('fuel_mass_required', val=42892.0, units='lbm') prob.model.set_input_defaults(Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX, 1114, units='ft**3') prob.model.set_input_defaults(Aircraft.Fuel.VOLUME_MARGIN, val=0, units='unitless') - prob.model.set_input_defaults(Aircraft.Fuel.TOTAL_CAPACITY, val=55725.1, units='lbm') + prob.model.set_input_defaults(Aircraft.Fuel.MAX_CAPACITY_MASS, val=55725.1, units='lbm') setup_model_options(prob, AviaryValues({Aircraft.Engine.NUM_ENGINES: ([2], 'unitless')})) @@ -799,7 +801,7 @@ def setUp(self): Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX, 605.90781747, units='ft**3' ) prob.model.set_input_defaults(Aircraft.Fuel.VOLUME_MARGIN, 10.0, units='unitless') - prob.model.set_input_defaults(Aircraft.Fuel.TOTAL_CAPACITY, 26652.3, units='lbm') + prob.model.set_input_defaults(Aircraft.Fuel.MAX_CAPACITY_MASS, 26652.3, units='lbm') setup_model_options(prob, AviaryValues({Aircraft.Engine.NUM_ENGINES: ([2], 'unitless')})) @@ -851,7 +853,7 @@ def test_case1(self): self.prob.run_model() tol = 1e-7 - assert_near_equal(self.prob[Aircraft.Fuel.TOTAL_CAPACITY], 24234.451, tol) + assert_near_equal(self.prob[Aircraft.Fuel.MAX_CAPACITY_MASS], 24234.451, tol) assert_near_equal(self.prob[Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY], 5.451, tol) assert_near_equal(self.prob['extra_fuel_volume'], 0.69314718, tol) assert_near_equal(self.prob['max_extra_fuel_mass'], 34.67277748, tol) diff --git a/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py b/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py index d13f6df46a..b60df51d87 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py +++ b/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py @@ -3296,7 +3296,7 @@ def test_case1(self): FUEL_MASS_REQUIRED -- WFAREQ = 36595.0 fuel_mass_min -- WFAMIN = 18268.2 fuel_mass.wingfuel_mass_min -- WFWMIN = 11982.2 - Aircraft.Fuel.TOTAL_CAPACITY -- WFAMAX = 33268.2. + Aircraft.Fuel.MAX_CAPACITY_MASS -- WFAMAX = 33268.2. """ prob = self.prob prob.run_model() @@ -3387,7 +3387,7 @@ def test_case1(self): # BodyTankCalculations assert_near_equal(prob[Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY], 4954.00837132, tol) - total_cap = prob[Aircraft.Fuel.TOTAL_CAPACITY] + total_cap = prob[Aircraft.Fuel.MAX_CAPACITY_MASS] unusable = prob[Aircraft.Fuel.UNUSABLE_FUEL_MASS] assert_near_equal(total_cap - unusable, 40216.88550633, tol) assert_near_equal(prob['extra_fuel_volume'], 169.53050054, tol) diff --git a/aviary/subsystems/test/test_flops_based_premission.py b/aviary/subsystems/test/test_flops_based_premission.py index 706a982d4f..78bee8c5db 100644 --- a/aviary/subsystems/test/test_flops_based_premission.py +++ b/aviary/subsystems/test/test_flops_based_premission.py @@ -237,8 +237,8 @@ def test_case_all_subsystems( flops_outputs.get_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES), ) flops_inputs.set_val( - Aircraft.Fuel.TOTAL_CAPACITY, - flops_outputs.get_val(Aircraft.Fuel.TOTAL_CAPACITY, units='lbm'), + Aircraft.Fuel.MAX_CAPACITY_MASS, + flops_outputs.get_val(Aircraft.Fuel.MAX_CAPACITY_MASS, units='lbm'), units='lbm', ) flops_inputs.set_val(Settings.VERBOSITY, 0) @@ -342,7 +342,7 @@ def test_case_all_subsystems( Aircraft.Avionics.MASS, # FuelCapacityGroup Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_MASS, # EngineMass Aircraft.Engine.MASS, Aircraft.Engine.ADDITIONAL_MASS, @@ -618,7 +618,7 @@ def test_case_geom_mass(self): assert_near_equal(prob[Aircraft.Avionics.MASS], 2896.223816950469, tol) # FuelCapacityGroup assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY], 2385712.4988316689, tol) - assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 2385712.4988316689, tol) + assert_near_equal(prob[Aircraft.Fuel.MAX_CAPACITY_MASS], 2385712.4988316689, tol) # EngineMass assert_near_equal(prob[Aircraft.Engine.MASS], 17825.63336233, tol) assert_near_equal(prob[Aircraft.Engine.ADDITIONAL_MASS], 0.0, tol) @@ -866,7 +866,7 @@ def test_case_geom_mass(self): assert_near_equal(prob[Aircraft.Avionics.MASS], 2778.5110590964073, tol) # FuelCapacityGroup assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY], 1197720.2419621395, tol) - assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 1197720.2419621395, tol) + assert_near_equal(prob[Aircraft.Fuel.MAX_CAPACITY_MASS], 1197720.2419621395, tol) # EngineMass assert_near_equal(prob[Aircraft.Engine.MASS], 17825.63336233, tol) assert_near_equal(prob[Aircraft.Engine.ADDITIONAL_MASS], 0.0, tol) @@ -1116,7 +1116,7 @@ def test_case_geom_mass(self): assert_near_equal(prob[Aircraft.Avionics.MASS], 2280.13561342, tol) # FuelCapacityGroup assert_near_equal(prob[Aircraft.Fuel.WING_FUEL_MASS_CAPACITY], 787493.65267018, tol) - assert_near_equal(prob[Aircraft.Fuel.TOTAL_CAPACITY], 787493.65267018, tol) + assert_near_equal(prob[Aircraft.Fuel.MAX_CAPACITY_MASS], 787493.65267018, tol) # EngineMass assert_near_equal(prob[Aircraft.Engine.MASS], 44541.857940875525 / 2, tol) assert_near_equal(prob[Aircraft.Engine.ADDITIONAL_MASS], 0.0, tol) diff --git a/aviary/subsystems/test/test_premission.py b/aviary/subsystems/test/test_premission.py index 32cf9bbf9f..2e692ce214 100644 --- a/aviary/subsystems/test/test_premission.py +++ b/aviary/subsystems/test/test_premission.py @@ -65,7 +65,7 @@ def setUp(self): input_options.delete(Aircraft.Nacelle.AVG_DIAMETER) input_options.delete(Aircraft.Fuselage.WETTED_AREA) input_options.delete(Aircraft.Wing.ULTIMATE_LOAD_FACTOR) - input_options.delete(Aircraft.Fuel.TOTAL_CAPACITY) + input_options.delete(Aircraft.Fuel.MAX_CAPACITY_MASS) input_options.delete(Aircraft.Nacelle.AVG_LENGTH) input_options.delete(Aircraft.HorizontalTail.AREA) input_options.delete(Aircraft.VerticalTail.AREA) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index cc4fefbe36..fd145ce06c 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -20,7 +20,7 @@ # TODO document what kwargs are used, and by which preprocessors in docstring? -# TODO preprocess needed for design range vs phase_info range in sizing missions? (should be the same) +# TODO preprocess needed to check design range equals phase_info range in sizing missions? def preprocess_options( aviary_options: AviaryValues, meta_data=CoreMetaData, verbosity=None, **kwargs ): @@ -567,7 +567,7 @@ def preprocess_fuel_capacities(aviary_options: AviaryValues, verbosity=None): if mass_method == LegacyCode.FLOPS: # find which fuel capacity variables the user has set: - if Aircraft.Fuel.TOTAL_CAPACITY not in aviary_options: + if Aircraft.Fuel.MAX_CAPACITY_MASS not in aviary_options: # Aviary will need to calculate the total capacity and can only do so if we assume any missing subsystem capacities are zero # TODO these are default values, double check they need to actually be set here if Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY not in aviary_options: @@ -576,7 +576,7 @@ def preprocess_fuel_capacities(aviary_options: AviaryValues, verbosity=None): if Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY not in aviary_options: aviary_options.set_val(Aircraft.Fuel.AUXILIARY_FUEL_MASS_CAPACITY, 0.0, 'lbm') else: - total_capacity = aviary_options.get_val(Aircraft.Fuel.TOTAL_CAPACITY, 'lbm') + total_capacity = aviary_options.get_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 'lbm') try: wing_capacity = aviary_options.get_val(Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, 'lbm') except KeyError: @@ -608,7 +608,7 @@ def preprocess_fuel_capacities(aviary_options: AviaryValues, verbosity=None): # check if the user inputs are self consistent (as far as possible at this stage!) Aviary can still calculate outputs at runtime. if capacity_count == 3 and capacity_check != total_capacity: raise UserWarning( - f'Aircraft.Fuel.TOTAL_CAPACITY ({total_capacity} lbm) is not equal to sum of ' + f'Aircraft.Fuel.MAX_CAPACITY_MASS ({total_capacity} lbm) is not equal to sum of ' f'Aircraft.Fuel.WING_FUEL_CAPACITY ({wing_capacity} lbm), ' f'+ Aircraft.Fuel.FUSELAGE_FUEL_CAPACITY ({fuselage_capacity} lbm), and' f'Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY ({auxiliary_capacity} lbm)' @@ -616,13 +616,26 @@ def preprocess_fuel_capacities(aviary_options: AviaryValues, verbosity=None): ) elif capacity_count < 3 and capacity_check > total_capacity: raise UserWarning( - f'Aircraft.Fuel.TOTAL_CAPACITY ({total_capacity}) is less than sum of ' + f'Aircraft.Fuel.MAX_CAPACITY_MASS ({total_capacity}) is less than sum of ' f'Aircraft.Fuel.WING_FUEL_CAPACITY ({wing_capacity} lbm), ' f'Aircraft.Fuel.FUSELAGE_FUEL_CAPACITY ({fuselage_capacity} lbm), and ' f'Aircraft.Fuel.AUXILIARY_FUEL_CAPACITY ({auxiliary_capacity} lbm) ' f'(total of {capacity_check} lbm)' ) + # Set wing reference area, if needed - only used in alternate equation triggered by use of + # exponential term + if ( + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL in aviary_options + and aviary_options.get_val(Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL) > 0.0 + ): + if ( + Aircraft.Fuel.WING_REFERENCE_AREA not in aviary_options + and Aircraft.Wing.AREA in aviary_options + ): + wing_area, units = aviary_options.get_item(Aircraft.Wing.AREA) + aviary_options.set_val(Aircraft.Fuel.WING_REFERENCE_AREA, wing_area, units) + return aviary_options diff --git a/aviary/utils/test/data/converter_test_advanced_single_aisle_FLOPS.csv b/aviary/utils/test/data/converter_test_advanced_single_aisle_FLOPS.csv index e7df6bc290..389d226ff2 100644 --- a/aviary/utils/test/data/converter_test_advanced_single_aisle_FLOPS.csv +++ b/aviary/utils/test/data/converter_test_advanced_single_aisle_FLOPS.csv @@ -64,7 +64,7 @@ aircraft:fuel:fuel_system_mass_scaler,0.93202,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:ignore_fuel_capacity_constraint,False,unitless aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,0.0,lbm +aircraft:fuel:max_capacity_mass,0.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:fuel:wing_fuel_fraction,0.7752373238926116,unitless aircraft:furnishings:mass_scaler,0.81859,unitless diff --git a/aviary/validation_cases/validation_data/test_data/advanced_single_aisle_data.py b/aviary/validation_cases/validation_data/test_data/advanced_single_aisle_data.py index 289ce52922..2c7f688332 100644 --- a/aviary/validation_cases/validation_data/test_data/advanced_single_aisle_data.py +++ b/aviary/validation_cases/validation_data/test_data/advanced_single_aisle_data.py @@ -361,7 +361,7 @@ outputs.set_val(Aircraft.Electrical.MASS, 2375.0, 'lbm') outputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS, 518.0, 'lbm') -outputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 33136.4, 'lbm') +outputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 33136.4, 'lbm') outputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS, 462.0, 'lbm') outputs.set_val(Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, 33136.4, 'lbm') diff --git a/aviary/validation_cases/validation_data/test_data/bwb300_baseline_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/bwb300_baseline_FLOPS_data.py index c0fa598860..f7e94ac36c 100644 --- a/aviary/validation_cases/validation_data/test_data/bwb300_baseline_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/bwb300_baseline_FLOPS_data.py @@ -97,9 +97,9 @@ inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # WUF inputs.set_val(Aircraft.Fuel.IGNORE_FUEL_CAPACITY_CONSTRAINT, False) # IFUFU inputs.set_val(Aircraft.Fuel.WING_FUEL_FRACTION, 0.6883549569366508, 'unitless') -inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY, 0.0, 'lbm') # FUELRF -inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, 0.0) # FUSCLA -inputs.set_val(Aircraft.Fuel.WING_REF_CAPACITY_TERM_B, 0.0) # FUSCLB +inputs.set_val(Aircraft.Fuel.WING_REFERENCE_CAPACITY, 0.0, 'lbm') # FUELRF +inputs.set_val(Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, 0.0) # FUSCLA +inputs.set_val(Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR, 0.0) # FUSCLB inputs.set_val(Aircraft.Fuel.DENSITY, 6.7, 'lbm/galUS') # Furnishings @@ -325,7 +325,7 @@ outputs.set_val(Aircraft.Electrical.MASS, 2646.5272348061812, 'lbm') # WELEC -outputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 787493.65267017565, 'lbm') # FMXTOT +outputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 787493.65267017565, 'lbm') # FMXTOT outputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS, 3656.7260445688612, 'lbm') # WFSYS outputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS, 1314.83910317, 'lbm') # WUF outputs.set_val(Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, 787493.65267018, 'lbm') # FULWMX diff --git a/aviary/validation_cases/validation_data/test_data/bwb_detailed_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/bwb_detailed_FLOPS_data.py index c6527e100c..8d2294ccbb 100644 --- a/aviary/validation_cases/validation_data/test_data/bwb_detailed_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/bwb_detailed_FLOPS_data.py @@ -327,7 +327,7 @@ outputs.set_val(Aircraft.Electrical.MASS, 4291.4778106479534, 'lbm') # WELEC -outputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 1197720.2419621395, 'lbm') # FMXTOT +outputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 1197720.2419621395, 'lbm') # FMXTOT outputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS, 5444.9572934402777, 'lbm') # WFSYS outputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS, 1732.78186198, 'lbm') # WUF outputs.set_val(Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, 1197720.2419621395, 'lbm') # FULWMX diff --git a/aviary/validation_cases/validation_data/test_data/bwb_simple_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/bwb_simple_FLOPS_data.py index 6ada5e041d..2f27d84943 100644 --- a/aviary/validation_cases/validation_data/test_data/bwb_simple_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/bwb_simple_FLOPS_data.py @@ -276,7 +276,7 @@ outputs.set_val(Aircraft.Electrical.MASS, 4514.28869169, 'lbm') # WELEC -outputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 2385712.4988316689, 'lbm') # FMXTOT +outputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 2385712.4988316689, 'lbm') # FMXTOT outputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS, 8120.2023807944415, 'lbm') # WFSYS outputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS, 2163.999415070652, 'lbm') # WUF outputs.set_val(Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, 2385712.4988316689, 'lbm') # FULWMX diff --git a/aviary/validation_cases/validation_data/test_data/large_single_aisle_1_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/large_single_aisle_1_FLOPS_data.py index ceb3093434..9b8de67707 100644 --- a/aviary/validation_cases/validation_data/test_data/large_single_aisle_1_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/large_single_aisle_1_FLOPS_data.py @@ -84,7 +84,7 @@ inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) inputs.set_val(Aircraft.Fuel.FUSELAGE_FUEL_MASS_CAPACITY, 0.0, 'lbm') inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) -inputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 45694.0, 'lbm') +inputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 45694.0, 'lbm') inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # Furnishings diff --git a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_FLOPS_data.py index 1eea324664..44ca8ce8c8 100644 --- a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_FLOPS_data.py @@ -89,7 +89,7 @@ inputs.set_val(Aircraft.Fuel.DENSITY, 6.7, 'lbm/galUS') inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) -inputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 46063.0, 'lbm') +inputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 46063.0, 'lbm') inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # Furnishings diff --git a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_altwt_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_altwt_FLOPS_data.py index 15a15d723b..22f39893fe 100644 --- a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_altwt_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_altwt_FLOPS_data.py @@ -88,7 +88,7 @@ inputs.set_val(Aircraft.Fuel.DENSITY, 6.7, 'lbm/galUS') inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) -inputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 46063.0, 'lbm') +inputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 46063.0, 'lbm') inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # Furnishings diff --git a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_detailwing_FLOPS_data.py b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_detailwing_FLOPS_data.py index ddc32cd634..7cb2f1f50c 100644 --- a/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_detailwing_FLOPS_data.py +++ b/aviary/validation_cases/validation_data/test_data/large_single_aisle_2_detailwing_FLOPS_data.py @@ -79,7 +79,7 @@ inputs.set_val(Aircraft.Fuel.DENSITY, 6.7, 'lbm/galUS') inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) -inputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 46063.0, 'lbm') +inputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 46063.0, 'lbm') inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # Furnishings diff --git a/aviary/validation_cases/validation_data/test_data/multi_engine_single_aisle_data.py b/aviary/validation_cases/validation_data/test_data/multi_engine_single_aisle_data.py index a198086527..2829336bf3 100644 --- a/aviary/validation_cases/validation_data/test_data/multi_engine_single_aisle_data.py +++ b/aviary/validation_cases/validation_data/test_data/multi_engine_single_aisle_data.py @@ -84,7 +84,7 @@ inputs.set_val(Aircraft.Fuel.DENSITY, 6.7, 'lbm/galUS') inputs.set_val(Aircraft.Fuel.FUEL_SYSTEM_MASS_SCALER, 1.0) inputs.set_val(Aircraft.Fuel.NUM_TANKS, 7) -inputs.set_val(Aircraft.Fuel.TOTAL_CAPACITY, 46063.0, 'lbm') +inputs.set_val(Aircraft.Fuel.MAX_CAPACITY_MASS, 46063.0, 'lbm') inputs.set_val(Aircraft.Fuel.UNUSABLE_FUEL_MASS_SCALER, 1.0) # Furnishings diff --git a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm.csv b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm.csv index 74e1d6d492..b482febfd9 100644 --- a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm.csv +++ b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm.csv @@ -66,7 +66,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:length,128.0,ft diff --git a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm_with_electric.csv b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm_with_electric.csv index 6393db5622..19a17a36d3 100644 --- a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm_with_electric.csv +++ b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwFm_with_electric.csv @@ -65,7 +65,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:length,128.0,ft diff --git a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwGm.csv b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwGm.csv index 8211a3eed2..8e5141436f 100644 --- a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwGm.csv +++ b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_FwGm.csv @@ -186,7 +186,7 @@ aircraft:fins:taper_ratio,10.0,unitless aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:mass_scaler,1.05,unitless diff --git a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_solved2dof.csv b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_solved2dof.csv index c9b2b139e7..926e303508 100644 --- a/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_solved2dof.csv +++ b/aviary/validation_cases/validation_data/test_models/aircraft_for_bench_solved2dof.csv @@ -65,7 +65,7 @@ aircraft:fuel:auxiliary_fuel_mass_capacity,0.0,lbm aircraft:fuel:fuel_system_mass_scaler,1.0,unitless aircraft:fuel:fuselage_fuel_mass_capacity,0.0,lbm aircraft:fuel:num_tanks,7,unitless -aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:max_capacity_mass,45694.0,lbm aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless aircraft:furnishings:mass_scaler,1.1,unitless aircraft:fuselage:length,128.0,ft diff --git a/aviary/variable_info/test/test_var_structure.py b/aviary/variable_info/test/test_variable_structure.py similarity index 100% rename from aviary/variable_info/test/test_var_structure.py rename to aviary/variable_info/test/test_variable_structure.py diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 7f6133e50d..eefcc416c4 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -2799,26 +2799,19 @@ 'FLOPS': 'WTIN.FULAUX', # ['&DEFINE.WTIN.FULAUX', 'FAWT.FULAUX'], }, units='lbm', - desc='fuel capacity of the auxiliary tank', + desc='Fuel capacity of the Jet-A auxiliary tank', default_value=0.0, ) -add_meta_data( - Aircraft.Fuel.BURN_PER_PASSENGER_MILE, - meta_data=_MetaData, - historical_name={'GASP': None, 'FLOPS': None}, - units='lbm/NM', - desc='average fuel burn per passenger per mile flown', -) - add_meta_data( Aircraft.Fuel.DENSITY, meta_data=_MetaData, historical_name={'GASP': 'INGASP.FUELD', 'FLOPS': 'WTIN.FULDEN'}, units='lbm/galUS', - desc='fuel density (jet fuel typical density of 6.7 lbm/galUS used in the calculation of wing_capacity' + desc='Fuel density (jet fuel typical density of 6.7 lbm/galUS used in the calculation of wing_capacity' '(if wing_capacity is not input) and in the calculation of fuel system weight.', default_value=6.7, + # multivalue=True, ) add_meta_data( @@ -2832,7 +2825,7 @@ 'FLOPS': None, }, units='lbm', - desc='Fuel system mass. Includes tanks (both protected and unprotected), plumbing, and ' + desc='Jet-A fuel system mass. Includes tanks (both protected and unprotected), plumbing, and ' 'similar masses.', default_value=0.0, ) @@ -2842,7 +2835,7 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.SKFS', 'FLOPS': None}, units='unitless', - desc='mass trend coefficient of fuel system', + desc='Mass trend coefficient of Jet-A fuel system', default_value=0.0, ) @@ -2855,7 +2848,7 @@ 'FLOPS': 'WTIN.WFSYS', }, units='unitless', - desc='scaler for fuel system mass', + desc='Scaler for Jet-A fuel system mass', default_value=1.0, ) @@ -2868,7 +2861,7 @@ 'FLOPS': 'WTIN.FULFMX', }, units='lbm', - desc='fuel capacity of the fuselage', + desc='Total mass capacity of Jet-A fuel stored in the fuselage', default_value=0.0, ) @@ -2878,50 +2871,53 @@ historical_name={'GASP': None, 'FLOPS': 'WTIN.IFUFU'}, units='unitless', desc='Flag to control enforcement of fuel_capacity constraint. ' - 'If False (default) Aviary will add the excess fuel constraint and only converge if there is enough fuel capacity to complete the mission.' - 'If set True Aviary will ignore this constraint, and allow mission fuel > total_fuel_capacity. Use carefully!', + 'If False (default) Aviary will add the excess fuel constraint and only converge if there is ' + 'enough fuel capacity to complete the mission. If set True Aviary will ignore this constraint, ' + 'and allow mission fuel > total_fuel_capacity. Use carefully!', default_value=False, types=bool, ) add_meta_data( - Aircraft.Fuel.NUM_TANKS, + Aircraft.Fuel.MAX_CAPACITY_MASS, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.NTANK', # ['&DEFINE.WTIN.NTANK', 'WTS.NTANK'], + 'FLOPS': 'WTIN.FMXTOT', # ['&DEFINE.WTIN.FMXTOT', 'PLRNG.FMXTOT'], }, - units='unitless', - desc='number of fuel tanks', - types=int, - option=True, - default_value=7, + units='lbm', + desc='Maximum fuel mass capacity of the aircraft including wing, fuselage and auxiliary tanks. ' + 'Used in generating payload-range diagram (Default = wing_capacity + fuselage_capacity + ' + 'aux_capacity)', + default_value=0.0, + # multivalue=True, ) add_meta_data( - Aircraft.Fuel.TOTAL_CAPACITY, + Aircraft.Fuel.MAX_CAPACITY_VOLUME, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.FMXTOT', # ['&DEFINE.WTIN.FMXTOT', 'PLRNG.FMXTOT'], + 'FLOPS': None, # '~WEIGHT.ZFEQ', }, - units='lbm', - desc='Total fuel capacity of the aircraft including wing, fuselage and ' - 'auxiliary tanks. Used in generating payload-range diagram (Default = ' - 'wing_capacity + fuselage_capacity + aux_capacity)', + units='galUS', # need to check this + desc='Maximum fuel volume capacity', default_value=0.0, + # multivalue=True, ) add_meta_data( - Aircraft.Fuel.TOTAL_VOLUME, + Aircraft.Fuel.NUM_TANKS, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': None, # '~WEIGHT.ZFEQ', + 'FLOPS': 'WTIN.NTANK', # ['&DEFINE.WTIN.NTANK', 'WTS.NTANK'], }, - units='galUS', # need to check this - desc='Total fuel volume', - default_value=0.0, + units='unitless', + desc='Number of Jet-A fuel tanks', + types=int, + option=True, + default_value=7, ) add_meta_data( @@ -2935,8 +2931,9 @@ 'FLOPS': None, }, units='lbm', - desc='unusable fuel mass', + desc='Unusable fuel mass', default_value=0.0, + # multivalue=True, ) add_meta_data( @@ -2945,7 +2942,7 @@ historical_name={'GASP': 'INGASP.CW(13)', 'FLOPS': None}, default_value=0.0, units='unitless', - desc='mass trend coefficient of trapped fuel factor', + desc='Mass trend coefficient of trapped Jet-A fuel factor', ) add_meta_data( @@ -2957,7 +2954,7 @@ 'FLOPS': 'WTIN.WUF', }, units='unitless', - desc='scaler for Unusable fuel mass', + desc='Scaler for unusable Jet-A fuel mass', default_value=1.0, ) @@ -2966,77 +2963,82 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.FVOL_MRG', 'FLOPS': None}, units='unitless', - desc='Extra volume required in the wing fuel tank as a percentage of design mission fuel mass.' - 'Only used in GASP wing tank mass and fuel system mass sizing calculations.', + desc='Extra volume required in the wing Jet-A fuel tank as a percentage of design mission fuel ' + 'mass. Only used in GASP wing tank mass and fuel system mass sizing calculations.', default_value=0.0, ) add_meta_data( - Aircraft.Fuel.WING_FUEL_FRACTION, + Aircraft.Fuel.WING_CAPACITY_TERM_EXPONENTIAL, meta_data=_MetaData, - historical_name={'GASP': 'INGASP.SKWF', 'FLOPS': None}, + historical_name={ + 'GASP': None, + 'FLOPS': 'WTIN.FUSCLA', # ['&DEFINE.WTIN.FUSCLA', 'WPAB.FUSCLA'], + }, units='unitless', - desc='fraction of total theoretical wing volume used for wing fuel', + desc='Exponential coefficient in alternate sizing equation for Jet-A fuel tanks in wing, based ' + 'on reference wing capacity. Only used when value is above 0.0', default_value=0.0, ) add_meta_data( - Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, + Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.FULWMX', # ['&DEFINE.WTIN.FULWMX', 'WTS.FULWMX'], + 'FLOPS': 'WTIN.FUSCLB', # ['&DEFINE.WTIN.FUSCLB', 'WPAB.FUSCLB'], }, - units='lbm', - desc='fuel capacity of the auxiliary tank', + units='unitless', + desc='Linear coefficient in alternate sizing equation for Jet-A fuel tanks in wing, based on' + 'reference wing capacity.. Only used when value of Aircraft.Fuel.WING_CAPACITY_TERM_LINEAR ' + 'above 0.0', default_value=0.0, ) add_meta_data( - Aircraft.Fuel.WING_REF_CAPACITY, + Aircraft.Fuel.WING_FUEL_FRACTION, meta_data=_MetaData, - historical_name={ - 'GASP': None, - 'FLOPS': 'WTIN.FUELRF', # ['&DEFINE.WTIN.FUELRF', 'WPAB.FUELRF'], - }, - units='lbm', # TODO FLOPS says lbm, sfwate.f line 827 - desc='reference fuel volume', + historical_name={'GASP': 'INGASP.SKWF', 'FLOPS': None}, + units='unitless', + desc='Fraction of total theoretical wing volume used for wing Jet-A fuel', default_value=0.0, ) add_meta_data( - Aircraft.Fuel.WING_REF_CAPACITY_AREA, + Aircraft.Fuel.WING_FUEL_MASS_CAPACITY, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.FSWREF', # ['&DEFINE.WTIN.FSWREF', 'WPAB.FSWREF'], + 'FLOPS': 'WTIN.FULWMX', # ['&DEFINE.WTIN.FULWMX', 'WTS.FULWMX'], }, - units='unitless', # TODO FLOPS says unitless, sfwate.f line 828 - desc='reference wing area for fuel capacity', + units='lbm', + desc='Total mass capacity of Jet-A fuel stored in the wings', default_value=0.0, ) +# TODO should this get removed and Aircraft.Wing.AREA directly used in its stead? And in +# fortran-to-aviary warn the user if they provide this and it differs from wing area (SW) add_meta_data( - Aircraft.Fuel.WING_REF_CAPACITY_TERM_A, + Aircraft.Fuel.WING_REFERENCE_AREA, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.FUSCLA', # ['&DEFINE.WTIN.FUSCLA', 'WPAB.FUSCLA'], + 'FLOPS': 'WTIN.FSWREF', # ['&DEFINE.WTIN.FSWREF', 'WPAB.FSWREF'], }, - units='unitless', - desc='scaling factor A', + units='ft**2', # NOTE FLOPS says ft**2 in manual (line 874) but unitless in sfwate.f line 828 + desc='Reference wing area for fuel Jet-A capacity', default_value=0.0, ) add_meta_data( - Aircraft.Fuel.WING_REF_CAPACITY_TERM_B, + Aircraft.Fuel.WING_REFERENCE_CAPACITY, meta_data=_MetaData, historical_name={ 'GASP': None, - 'FLOPS': 'WTIN.FUSCLB', # ['&DEFINE.WTIN.FUSCLB', 'WPAB.FUSCLB'], + 'FLOPS': 'WTIN.FUELRF', # ['&DEFINE.WTIN.FUELRF', 'WPAB.FUELRF'], }, - units='unitless', - desc='scaling factor B', + units='lbm', + desc='Reference Jet-A fuel mass capacity of wing tanks', default_value=0.0, ) @@ -3057,7 +3059,7 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.FVOLREQ', 'FLOPS': None}, units='ft**3', - desc='wing tank fuel volume when carrying design fuel plus fuel margin', + desc='Wing tank Jet-A fuel volume when carrying design fuel plus fuel margin', default_value=0.0, ) diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index 8ebb486e91..cf1629b615 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -264,27 +264,25 @@ class Fins: class Fuel: AUXILIARY_FUEL_MASS_CAPACITY = 'aircraft:fuel:auxiliary_fuel_mass_capacity' - BURN_PER_PASSENGER_MILE = 'aircraft:fuel:burn_per_passenger_mile' DENSITY = 'aircraft:fuel:density' FUEL_SYSTEM_MASS = 'aircraft:fuel:fuel_system_mass' FUEL_SYSTEM_MASS_COEFFICIENT = 'aircraft:fuel:fuel_system_mass_coefficient' FUEL_SYSTEM_MASS_SCALER = 'aircraft:fuel:fuel_system_mass_scaler' FUSELAGE_FUEL_MASS_CAPACITY = 'aircraft:fuel:fuselage_fuel_mass_capacity' IGNORE_FUEL_CAPACITY_CONSTRAINT = 'aircraft:fuel:ignore_fuel_capacity_constraint' + MAX_CAPACITY_MASS = 'aircraft:fuel:max_capacity_mass' + MAX_CAPACITY_VOLUME = 'aircraft:fuel:max_capacity_volume' NUM_TANKS = 'aircraft:fuel:num_tanks' - TOTAL_CAPACITY = 'aircraft:fuel:total_capacity' - TOTAL_VOLUME = 'aircraft:fuel:total_volume' UNUSABLE_FUEL_MASS = 'aircraft:fuel:unusable_fuel_mass' UNUSABLE_FUEL_MASS_COEFFICIENT = 'aircraft:fuel:unusable_fuel_mass_coefficient' UNUSABLE_FUEL_MASS_SCALER = 'aircraft:fuel:unusable_fuel_mass_scaler' VOLUME_MARGIN = 'aircraft:fuel:volume_margin' + WING_CAPACITY_TERM_EXPONENTIAL = 'aircraft:fuel:wing_capacity_term_exponential' + WING_CAPACITY_TERM_LINEAR = 'aircraft:fuel:wing_capacity_term_linear' WING_FUEL_FRACTION = 'aircraft:fuel:wing_fuel_fraction' WING_FUEL_MASS_CAPACITY = 'aircraft:fuel:wing_fuel_mass_capacity' - WING_REF_CAPACITY = 'aircraft:fuel:wing_ref_capacity' - WING_REF_CAPACITY_AREA = 'aircraft:fuel:wing_ref_capacity_area' - WING_REF_CAPACITY_TERM_A = 'aircraft:fuel:wing_ref_capacity_term_a' - WING_REF_CAPACITY_TERM_B = 'aircraft:fuel:wing_ref_capacity_term_b' - # WING_VOLUME = 'aircraft:fuel:wing_volume' + WING_REFERENCE_AREA = 'aircraft:fuel:wing_reference_area' + WING_REFERENCE_CAPACITY = 'aircraft:fuel:wing_reference_capacity' WING_VOLUME_DESIGN = 'aircraft:fuel:wing_volume_design' WING_VOLUME_GEOMETRIC_MAX = 'aircraft:fuel:wing_volume_geometric_max' WING_VOLUME_STRUCTURAL_MAX = 'aircraft:fuel:wing_volume_structural_max'