From 6a43be5803eb9d7801563e85b031bc98210d9a6d Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 12:03:13 -0400 Subject: [PATCH 01/13] work in progress: change SEAT_PITCH from option to variable. Move some hard coded lines in layout to preprocessors --- .../geometry/flops_based/fuselage.py | 89 ++++----- .../flops_based/test/test_fuselage.py | 34 ++-- .../geometry/gasp_based/fuselage.py | 34 ++-- .../geometry/gasp_based/test/test_fuselage.py | 43 +++-- .../gasp_based/test/test_size_group.py | 24 ++- .../gasp_based/test/test_mass_premission.py | 40 +++- aviary/utils/preprocessors.py | 178 +++++++++++++++--- aviary/variable_info/variable_meta_data.py | 3 - 8 files changed, 298 insertions(+), 147 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 4c49ab40b6..82fc1def39 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -197,10 +197,7 @@ def initialize(self): add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY) - add_aviary_option(self, Aircraft.Engine.NUM_ENGINES) + add_aviary_option(self, Aircraft.Propulsion.TOTAL_NUM_ENGINES) add_aviary_option(self, Settings.VERBOSITY) def setup(self): @@ -208,6 +205,9 @@ def setup(self): add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_BUSINESS) add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_FIRST) add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_ECONOMY) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY) add_aviary_output(self, Aircraft.Fuselage.LENGTH, units='ft') add_aviary_output(self, Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, units='ft') @@ -236,47 +236,27 @@ def compute(self, inputs, outputs): if num_economy_class_pax > 200: if num_seat_abreast_economy <= 0: num_seat_abreast_economy = 8 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY =' - f'{num_seat_abreast_economy}' - ) + raise UserWarning( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' + ) if num_first_class_pax > 0 and num_seat_abreast_first <= 0: num_seat_abreast_first = num_seat_abreast_economy - 2 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST = ' - f'{num_seat_abreast_first}' - ) + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') if num_business_class_pax > 0 and num_seat_abreast_business <= 0: num_seat_abreast_business = num_seat_abreast_economy - 2 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS = ' - f'{num_seat_abreast_business}' - ) + raise UserWarning( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS is not set.' + ) if num_seat_abreast_first <= 0 and num_first_class_pax > 0: num_seat_abreast_first = 4 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST = ' - f'{num_seat_abreast_first}' - ) + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') if num_seat_abreast_economy <= 0 and num_economy_class_pax > 0: num_seat_abreast_economy = 6 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY = ' - f'{num_seat_abreast_economy}' - ) + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') if num_seat_abreast_business <= 0 and num_business_class_pax > 0: num_seat_abreast_business = 5 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS = ' - f'{num_seat_abreast_business}' - ) + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') # Though these are not user definable, the values here are typical for most transport aisle_width_first_class = 20.0 # inch @@ -289,11 +269,9 @@ def compute(self, inputs, outputs): if num_economy_class_pax < 60: if num_seat_abreast_economy <= 0: num_seat_abreast_economy = 5 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY = ' - f'{num_seat_abreast_economy}' - ) + raise UserWarning( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' + ) aisle_width_economy_class = 15.0 if num_seat_abreast_economy > 6: @@ -311,21 +289,18 @@ def compute(self, inputs, outputs): if num_seat_abreast_economy > 6: aisle_width_economy_class = 15.0 - seat_pitch_first = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] + seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] if seat_pitch_first <= 0 and num_first_class_pax > 0: seat_pitch_first = 38.0 # inch - if verbosity > Verbosity.BRIEF: - print('Set Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST = 38.0 inches') - seat_pitch_business = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') + seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] if seat_pitch_business <= 0 and num_business_class_pax > 0: seat_pitch_business = 36.0 # inch - if verbosity > Verbosity.BRIEF: - print('Set Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS = 36.0 inches') - seat_pitch_economy = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') + seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] if seat_pitch_economy <= 0 and num_economy_class_pax > 0: seat_pitch_economy = 34.0 # inch - if verbosity > Verbosity.BRIEF: - print('Set Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY = 34.0 inches') + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # set maximum number of galleys based on statistics (this block is not from FLOPS) num_pax = num_first_class_pax + num_business_class_pax + num_economy_class_pax @@ -422,7 +397,7 @@ def compute(self, inputs, outputs): # Calculate the passenger compartment length - num_engines = self.options[Aircraft.Engine.NUM_ENGINES][0] + num_engines = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] eng_flag = num_engines - 2 * int(num_engines / 2) # a center mounted engine if 1. first_class_len = num_first_class_pax * seat_pitch_first / num_seat_abreast_first business_class_len = ( @@ -620,9 +595,6 @@ def initialize(self): add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY) add_aviary_option(self, Aircraft.BWB.MAX_NUM_BAYS) add_aviary_option(self, Aircraft.BWB.MAX_BAY_WIDTH) @@ -632,6 +604,9 @@ def setup(self): self.add_input( 'Rear_spar_percent_chord', 0.7, units='unitless', desc='RSPCHD at fuselage centerline' ) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY) add_aviary_output(self, Aircraft.Fuselage.LENGTH, units='ft') add_aviary_output(self, Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, units='ft') @@ -646,6 +621,7 @@ def setup_partials(self): self.declare_partials('*', '*', method='cs') def compute(self, inputs, outputs): + verbosity = self.options[Settings.VERBOSITY] rear_spar_percent_chord = inputs['Rear_spar_percent_chord'] sweep = inputs[Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP] height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] @@ -677,15 +653,18 @@ def compute(self, inputs, outputs): if num_seat_abreast_economy <= 0: num_seat_abreast_economy = 6 - seat_pitch_business = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] + seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] if seat_pitch_business <= 0: seat_pitch_business = 39.0 # inch - seat_pitch_first = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') + seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] if seat_pitch_first <= 0: seat_pitch_first = 61.0 # inch - seat_pitch_economy = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') + seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] if seat_pitch_economy <= 0: seat_pitch_economy = 32.0 # inch + raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # Determine unit seat areas for each type of passenger area_seat_business = bay_width_nom * seat_pitch_business / 12.0 / num_seat_abreast_business diff --git a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py index f66be7c68d..9557d935b8 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py @@ -52,7 +52,7 @@ def test_case1(self): options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 158, units='unitless') - options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') + options.set_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES, 2, units='unitless') prob.model.add_subsystem( 'layout', DetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] @@ -86,19 +86,19 @@ def test_case2(self): options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 6) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 10) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 83, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 62, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') - options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') + options.set_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES, 2, units='unitless') prob.model.add_subsystem( 'layout', DetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] ) - prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 22, units='inch') - prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_BUSINESS, 21, units='inch') - prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 18, units='inch') setup_model_options(prob, options) prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 83, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 62, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') + prob.set_val(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 22, units='inch') + prob.set_val(Aircraft.Fuselage.SEAT_WIDTH_BUSINESS, 21, units='inch') + prob.set_val(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 18, units='inch') prob.set_val(Aircraft.Design.RANGE, val=7370.0, units='NM') prob.run_model() @@ -169,9 +169,6 @@ def test_case1(self): options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 4, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, units='inch') options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 0, units='unitless') prob.model.add_subsystem( @@ -179,6 +176,9 @@ def test_case1(self): ) setup_model_options(prob, options) prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, units='inch') prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=45.0, units='deg') prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') @@ -217,9 +217,6 @@ def test_case2(self): options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, units='inch') options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 0, units='unitless') prob.model.add_subsystem( @@ -227,6 +224,9 @@ def test_case2(self): ) setup_model_options(self.prob, options) prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, units='inch') prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=60.0, units='deg') prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') prob.set_val('Rear_spar_percent_chord', val=0.7, units='unitless') @@ -265,9 +265,6 @@ def test_case3(self): options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, units='inch') options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 4, units='unitless') options.set_val(Aircraft.BWB.MAX_BAY_WIDTH, 10.0, units='ft') @@ -276,6 +273,9 @@ def test_case3(self): ) setup_model_options(self.prob, options) prob.setup(check=False, force_alloc_complex=True) + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, units='inch') + prob.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, units='inch') prob.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, val=60.0, units='deg') prob.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, val=0.11, units='unitless') # prob.set_val(Aircraft.Fuselage.MAX_WIDTH, val=50.0, units='ft') diff --git a/aviary/subsystems/geometry/gasp_based/fuselage.py b/aviary/subsystems/geometry/gasp_based/fuselage.py index 667c704d4f..ebf74a7fed 100644 --- a/aviary/subsystems/geometry/gasp_based/fuselage.py +++ b/aviary/subsystems/geometry/gasp_based/fuselage.py @@ -14,13 +14,13 @@ def initialize(self): add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_PASSENGERS) add_aviary_option(self, Aircraft.Fuselage.NUM_AISLES) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, units='inch') add_aviary_option(self, Settings.VERBOSITY) def setup(self): add_aviary_input(self, Aircraft.Fuselage.DELTA_DIAMETER, units='ft') add_aviary_input(self, Aircraft.Fuselage.AISLE_WIDTH, units='inch') add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, units='inch') + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, units='inch') add_aviary_output(self, Aircraft.Fuselage.AVG_DIAMETER, units='inch') self.add_output('cabin_height', val=0, units='ft', desc='HC: height of cabin') @@ -52,6 +52,12 @@ def setup_partials(self): Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, ], ) + self.declare_partials( + 'cabin_len', + [ + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, + ], + ) def compute(self, inputs, outputs): options = self.options @@ -61,7 +67,7 @@ def compute(self, inputs, outputs): num_aisle = options[Aircraft.Fuselage.NUM_AISLES] aisle_width = inputs[Aircraft.Fuselage.AISLE_WIDTH] PAX = options[Aircraft.CrewPayload.Design.NUM_PASSENGERS] - seat_pitch, _ = options[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY] + seat_pitch = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY] delta_diameter = inputs[Aircraft.Fuselage.DELTA_DIAMETER] @@ -96,6 +102,7 @@ def compute_partials(self, inputs, J): options = self.options seats_abreast = options[Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY] num_aisle = options[Aircraft.Fuselage.NUM_AISLES] + PAX = options[Aircraft.CrewPayload.Design.NUM_PASSENGERS] sig1 = sigmoidX(seats_abreast, 1.5, -0.01) sig2 = sigmoidX(seats_abreast, 1.5, 0.01) @@ -118,6 +125,10 @@ def compute_partials(self, inputs, J): seats_abreast / 12 * sig1 + seats_abreast / 12 * sig2 ) + J['cabin_len', Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY] = ( + PAX / 12 * sig1 + (PAX - 1) / (seats_abreast * 12) * sig2 + ) + class FuselageSize(om.ExplicitComponent): """ @@ -449,13 +460,6 @@ class BWBCabinLayout(om.ExplicitComponent): def initialize(self): add_aviary_option(self, Aircraft.Fuselage.NUM_AISLES, units='unitless', desc='INGASP.AS') - add_aviary_option( - self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, units='inch', desc='PS_FC' - ) - add_aviary_option(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, units='inch') - add_aviary_option( - self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, units='inch', desc='INGASP.PS' - ) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_PASSENGERS, desc='INGASP.PAX') add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, desc='INGASP.PCT_FC') add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS) @@ -472,6 +476,12 @@ def setup(self): add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_BUSINESS, units='inch') add_aviary_input(self, Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, units='inch') + add_aviary_input( + self, Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, units='inch', desc='PS_FC' + ) + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, units='inch') + add_aviary_input(self, Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, units='inch') + self.add_output( 'fuselage_station_aft', units='ft', @@ -490,10 +500,10 @@ def compute(self, inputs, outputs): FC_num_aisles = 2 # AS_FC: num of aisles in first class FC_aisle_width = 24.0 # WAS_FC: First class aisle width, inch FC_seat_width = inputs[Aircraft.Fuselage.SEAT_WIDTH_FIRST][0] - FC_seat_pitch, _ = options[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST] + FC_seat_pitch = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] BC_lav_galley_length = 8.0 - BC_seat_pitch, _ = options[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS] + BC_seat_pitch = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] BC_seat_width = inputs[Aircraft.Fuselage.SEAT_WIDTH_BUSINESS][0] TC_num_pax_per_lav = 78 # NLAVTC: economy class passengers per lavatory @@ -501,7 +511,7 @@ def compute(self, inputs, outputs): TC_galley_area_per_pax = 0.15 # AGAL_TC: economy class galley area per passenger, ft**2 # If there is no first class cabin, please set NUM_FIRST_CLASS = 0. - TC_seat_pitch, _ = options[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY] + TC_seat_pitch = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] TC_seat_width = inputs[Aircraft.Fuselage.SEAT_WIDTH_ECONOMY][0] if TC_seat_width <= 0.0: raise ValueError(f'fuselage seat width must be positive, but it is {TC_seat_width}.') diff --git a/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py b/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py index 9c5cdf9ee0..cec54526c1 100644 --- a/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/gasp_based/test/test_fuselage.py @@ -29,11 +29,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('parameters', FuselageParameters(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -62,11 +64,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=30, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('parameters', FuselageParameters(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -166,11 +170,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('group', FuselageGroup(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -207,11 +213,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('group', FuselageGroup(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -245,12 +253,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=30, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) # not actual GASP value options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') - options.set_val(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('group', FuselageGroup(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -284,12 +293,13 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=30, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) # not actual GASP value options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') - options.set_val(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob = self.prob = om.Problem() prob.model.add_subsystem('group', FuselageGroup(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.DELTA_DIAMETER, 4.5, units='ft') @@ -323,7 +333,6 @@ def setUp(self): aviary_options = AviaryValues() aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 18) aviary_options.set_val(Aircraft.Fuselage.NUM_AISLES, 3) - aviary_options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 150) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 18) aviary_options.set_val(Settings.VERBOSITY, 1, units='unitless') @@ -371,14 +380,18 @@ def setUp(self): aviary_options = self.aviary_options = AviaryValues() aviary_options.set_val(Aircraft.Fuselage.NUM_AISLES, 3) - aviary_options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') - aviary_options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch') aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 150) aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11) aviary_options.set_val(Settings.VERBOSITY, 1, units='unitless') prob.model.add_subsystem('bwb_cabin_layout', BWBCabinLayout(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch' + ) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 28.0, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 21.0, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 22, units='inch') @@ -532,8 +545,6 @@ def setUp(self): options = get_option_defaults() options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 18) options.set_val(Aircraft.Fuselage.NUM_AISLES, 3) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch') options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 150) options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11) @@ -542,6 +553,12 @@ def setUp(self): prob = self.prob = om.Problem() prob.model.add_subsystem('group', BWBFuselageGroup(), promotes=['*']) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch' + ) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 28, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 21, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 22, units='inch') diff --git a/aviary/subsystems/geometry/gasp_based/test/test_size_group.py b/aviary/subsystems/geometry/gasp_based/test/test_size_group.py index 7927d02d81..938c6aec3b 100644 --- a/aviary/subsystems/geometry/gasp_based/test/test_size_group.py +++ b/aviary/subsystems/geometry/gasp_based/test/test_size_group.py @@ -20,7 +20,6 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.INLET_AREA_COEFFICIENT, val=0.0003097, units='unitless') self.prob = om.Problem() @@ -30,6 +29,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -145,7 +147,6 @@ def setUp(self): options.set_val(Aircraft.Strut.DIMENSIONAL_LOCATION_SPECIFIED, val=True, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.INLET_AREA_COEFFICIENT, val=0.00030975, units='unitless') self.prob = om.Problem() @@ -155,6 +156,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -283,7 +287,6 @@ def setUp(self): ) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=True, units='unitless') self.prob = om.Problem() @@ -293,6 +296,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -418,7 +424,6 @@ def setUp(self): options.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, val=180, units='unitless') options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.INLET_AREA_COEFFICIENT, val=0.00030975, units='unitless') self.prob = om.Problem() @@ -428,6 +433,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -557,8 +565,6 @@ def setUp(self): options.set_val(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 28, units='inch') options.set_val(Aircraft.Fuselage.NUM_AISLES, 3) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 18) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11) self.prob = om.Problem() @@ -568,6 +574,12 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch' + ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 22, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 21, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 22, units='inch') 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 4869944db2..4990685f58 100644 --- a/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py +++ b/aviary/subsystems/mass/gasp_based/test/test_mass_premission.py @@ -147,7 +147,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.14, units='unitless') self.prob = om.Problem() @@ -165,6 +164,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -502,7 +504,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.14, units='unitless') self.prob = om.Problem() @@ -520,6 +521,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -848,7 +852,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.14, units='unitless') self.prob = om.Problem() @@ -866,6 +869,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -1202,7 +1208,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.14, units='unitless') self.prob = om.Problem() @@ -1220,6 +1225,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -1551,7 +1559,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.14, units='unitless') self.prob = om.Problem() @@ -1569,6 +1576,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -1901,7 +1911,6 @@ def setUp(self): options.set_val(Aircraft.LandingGear.FIXED_GEAR, val=False, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.165, units='unitless') self.prob = om.Problem() @@ -1919,6 +1928,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 29, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -2276,7 +2288,6 @@ def setUp(self): options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, val=True, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 44.2, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.163, units='unitless') self.prob = om.Problem() @@ -2294,6 +2305,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 44.2, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -2647,7 +2661,6 @@ def setUp(self): options.set_val(Aircraft.Design.SMOOTH_MASS_DISCONTINUITIES, val=True, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) options.set_val(Aircraft.Fuselage.NUM_AISLES, 1) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 44.2, units='inch') options.set_val(Aircraft.Engine.ADDITIONAL_MASS_FRACTION, 0.163, units='unitless') options.set_val(Aircraft.Electrical.HAS_HYBRID_SYSTEM, val=True, units='unitless') @@ -2666,6 +2679,9 @@ def setUp(self): promotes=['*'], ) + self.prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 44.2, units='inch' + ) self.prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.2, units='inch') self.prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 24, units='inch') self.prob.model.set_input_defaults( @@ -3037,8 +3053,6 @@ def setUp(self): options.set_val(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 28, units='inch') options.set_val(Aircraft.Fuselage.NUM_AISLES, 3) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 18) - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch') - options.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch') options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11) # options from MassPremission options.set_val(Aircraft.Design.CRUISE_ALTITUDE, val=41000, units='ft') @@ -3064,6 +3078,12 @@ def setUp(self): promotes=['*'], ) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 36, units='inch' + ) + prob.model.set_input_defaults( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32, units='inch' + ) prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 22, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 21, units='inch') prob.model.set_input_defaults(Aircraft.Fuselage.AISLE_WIDTH, 22, units='inch') diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 1faaeb59fd..ad81aff0ed 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -101,9 +101,42 @@ def preprocess_options( design_type = aviary_options.get_val(Aircraft.Design.TYPE) else: design_type = AircraftTypes.TRANSPORT + aviary_options.set_val(Aircraft.Design.TYPE, design_type, 'unitless') if verbosity > Verbosity.BRIEF: warnings.warn('Setting Aircraft.Design.TYPE = AircraftTypes.TRANSPORT.') + preprocess_fuselage_layout(aviary_options, meta_data, verbosity) + + # preprocess atmosphere / GRAV?? + # Set the gravity model based on the atmosphere model to enable calculation of weight from mass + from aviary.subsystems.atmosphere.utils.get_atmosphere_data import get_atmosphere_data + + if Settings.ATMOSPHERE_MODEL not in aviary_options: + aviary_options.set_val( + Settings.ATMOSPHERE_MODEL, meta_data[Settings.ATMOSPHERE_MODEL]['default_value'] + ) + _, _, _, planet_gravity, sea_level_density = get_atmosphere_data( + aviary_options.get_val(Settings.ATMOSPHERE_MODEL) + ) + + if Mission.GRAVITY not in aviary_options: # Check to see if the user has set a gravity profile. + # No gravity profile is set, set it now. + aviary_options.set_val( + Mission.GRAVITY, val=planet_gravity[0], units=planet_gravity[1] + ) # contains both value and units as a tuple. + + if Mission.SEA_LEVEL_DENSITY not in aviary_options: + aviary_options.set_val( + Mission.SEA_LEVEL_DENSITY, val=sea_level_density[0], units=sea_level_density[1] + ) + + +def preprocess_fuselage_layout( + aviary_options: AviaryValues, meta_data=CoreMetaData, verbosity=None +): + mass_method = aviary_options.get_val(Settings.MASS_METHOD) + design_type = aviary_options.get_val(Aircraft.Design.TYPE) + if Aircraft.Fuselage.SIMPLE_LAYOUT not in aviary_options: if mass_method == LegacyCode.FLOPS: aviary_options.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, True, 'unitless') @@ -121,13 +154,7 @@ def preprocess_options( # Check seat widths are set if mass_method == LegacyCode.FLOPS: if design_type == AircraftTypes.TRANSPORT: - if Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not in aviary_options: - aviary_options.set_val(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.0, 'inch') - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not set, ' - 'assuming default 20.0 inches.' - ) + # initialize seat width if Aircraft.Fuselage.SEAT_WIDTH_BUSINESS not in aviary_options: aviary_options.set_val(Aircraft.Fuselage.SEAT_WIDTH_BUSINESS, 22.0, 'inch') if verbosity >= Verbosity.BRIEF: @@ -135,6 +162,13 @@ def preprocess_options( 'Aircraft.Fuselage.SEAT_WIDTH_BUSINESS not set, ' 'assuming default 22.0 inches.' ) + if Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not in aviary_options: + aviary_options.set_val(Aircraft.Fuselage.SEAT_WIDTH_ECONOMY, 20.0, 'inch') + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not set, ' + 'assuming default 20.0 inches.' + ) if Aircraft.Fuselage.SEAT_WIDTH_FIRST not in aviary_options: aviary_options.set_val(Aircraft.Fuselage.SEAT_WIDTH_FIRST, 25.0, 'inch') if verbosity >= Verbosity.BRIEF: @@ -142,6 +176,111 @@ def preprocess_options( 'Aircraft.Fuselage.SEAT_WIDTH_FIRST not set, ' 'assuming default 25.0 inches.' ) + + # initialize number of pax + if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options: + num_business_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 'unitless' + ) + else: + num_business_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) + if Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS in aviary_options: + num_economy_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 'unitless' + ) + else: + num_economy_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 0) + if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options: + num_first_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 'unitless' + ) + else: + num_first_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 0) + + # initialize number of seat abreast + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS in aviary_options: + num_seat_abreast_business = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS, 'unitless' + ) + else: + num_seat_abreast_business = 0 + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0 + ) + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY in aviary_options: + num_seat_abreast_economy = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 'unitless' + ) + else: + num_seat_abreast_economy = 0 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST in aviary_options: + num_seat_abreast_first = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 'unitless' + ) + else: + num_seat_abreast_first = 0 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) + + # set number of seat abreast + if num_economy_class_pax > 200: + if num_seat_abreast_economy == 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 8, 'unitless' + ) + if num_seat_abreast_first == 0: + num_seat_abreast_economy = aviary_options.get_val( + Aircraft.Fuselage.NUM_SEATS_ABREAST_ECONOMY, 'unitless' + ) + num_seat_abreast_first = num_seat_abreast_economy - 2 + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, + num_seat_abreast_first, + ) + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS not in aviary_options: + num_seat_abreast_economy = aviary_options.get_val( + Aircraft.Fuselage.NUM_SEATS_ABREAST_ECONOMY, 'unitless' + ) + num_seat_abreast_business = num_seat_abreast_economy - 2 + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS, + num_seat_abreast_business, + ) + if num_seat_abreast_business <= 0 and num_business_class_pax > 0: + num_seat_abreast_business = 5 + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5 + ) + if num_seat_abreast_economy <= 0 and num_economy_class_pax < 60: + num_seat_abreast_economy = 5 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 5) + elif num_seat_abreast_economy <= 0 and num_economy_class_pax > 0: + num_seat_abreast_economy = 6 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) + if num_seat_abreast_first <= 0 and num_first_class_pax > 0: + num_seat_abreast_first = 4 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) + + # set seat pitch + if Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS not in aviary_options: + if num_business_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 36.0, 'inch' + ) + if Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY not in aviary_options: + if num_economy_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 34.0, 'inch' + ) + if Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST not in aviary_options: + if num_first_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 38.0, 'inch' + ) + elif mass_method == LegacyCode.GASP: if design_type == AircraftTypes.BLENDED_WING_BODY: if Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not in aviary_options: @@ -166,29 +305,6 @@ def preprocess_options( 'assuming default 28.0 inches.' ) - # preprocess atmosphere / GRAV?? - # Set the gravity model based on the atmosphere model to enable calculation of weight from mass - from aviary.subsystems.atmosphere.utils.get_atmosphere_data import get_atmosphere_data - - if Settings.ATMOSPHERE_MODEL not in aviary_options: - aviary_options.set_val( - Settings.ATMOSPHERE_MODEL, meta_data[Settings.ATMOSPHERE_MODEL]['default_value'] - ) - _, _, _, planet_gravity, sea_level_density = get_atmosphere_data( - aviary_options.get_val(Settings.ATMOSPHERE_MODEL) - ) - - if Mission.GRAVITY not in aviary_options: # Check to see if the user has set a gravity profile. - # No gravity profile is set, set it now. - aviary_options.set_val( - Mission.GRAVITY, val=planet_gravity[0], units=planet_gravity[1] - ) # contains both value and units as a tuple. - - if Mission.SEA_LEVEL_DENSITY not in aviary_options: - aviary_options.set_val( - Mission.SEA_LEVEL_DENSITY, val=sea_level_density[0], units=sea_level_density[1] - ) - def preprocess_crewpayload(aviary_options: AviaryValues, meta_data=CoreMetaData, verbosity=None): """ @@ -201,7 +317,7 @@ def preprocess_crewpayload(aviary_options: AviaryValues, meta_data=CoreMetaData, aviary_options : AviaryValues Options to be updated - meta_data : dict + f : dict Variable metadata being used with this set of aviary_options Verbosity, optional diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index b46ba30380..17f55df1e6 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -1119,7 +1119,6 @@ historical_name={'GASP': None, 'FLOPS': 'FUSEIN.BPITCH'}, units='inch', desc='pitch of the business class seats.', - option=True, default_value=39.0, ) @@ -1129,7 +1128,6 @@ historical_name={'GASP': 'INGASP.PS', 'FLOPS': 'FUSEIN.TPITCH'}, units='inch', desc='pitch of the economy class seats.', - option=True, default_value=32.0, ) @@ -1139,7 +1137,6 @@ historical_name={'GASP': None, 'FLOPS': 'FUSEIN.FPITCH'}, units='inch', desc='pitch of the first class seats.', - option=True, default_value=61.0, ) From ef0928add0bcf52d5ab36f60cb42f78cc30d0671 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 13:54:16 -0400 Subject: [PATCH 02/13] work in progress: minor updates --- .../geometry/flops_based/fuselage.py | 3 + .../flops_based/test/test_fuselage.py | 13 +- aviary/utils/preprocessors.py | 154 +++++++++++++++++- 3 files changed, 159 insertions(+), 11 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 82fc1def39..c9a4a8e218 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -644,14 +644,17 @@ def compute(self, inputs, outputs): ] if num_seat_abreast_business <= 0: num_seat_abreast_business = 5 + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') num_seat_abreast_first = self.options[Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST] if num_seat_abreast_first <= 0: num_seat_abreast_first = 4 + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') num_seat_abreast_economy = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ] if num_seat_abreast_economy <= 0: num_seat_abreast_economy = 6 + raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] if seat_pitch_business <= 0: diff --git a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py index 9557d935b8..5549cd5136 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py @@ -214,9 +214,9 @@ def test_case2(self): options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 76, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 24, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 200, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6, units='unitless') options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 0, units='unitless') prob.model.add_subsystem( @@ -262,9 +262,10 @@ def test_case3(self): options.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 76, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 24, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 200, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0, units='unitless') - options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4, units='unitless') + options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6, units='unitless') + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS options.set_val(Aircraft.BWB.MAX_NUM_BAYS, 4, units='unitless') options.set_val(Aircraft.BWB.MAX_BAY_WIDTH, 10.0, units='ft') diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index ad81aff0ed..8f29cb27e1 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -105,7 +105,7 @@ def preprocess_options( if verbosity > Verbosity.BRIEF: warnings.warn('Setting Aircraft.Design.TYPE = AircraftTypes.TRANSPORT.') - preprocess_fuselage_layout(aviary_options, meta_data, verbosity) + preprocess_fuselage_layout(aviary_options, verbosity) # preprocess atmosphere / GRAV?? # Set the gravity model based on the atmosphere model to enable calculation of weight from mass @@ -131,22 +131,25 @@ def preprocess_options( ) -def preprocess_fuselage_layout( - aviary_options: AviaryValues, meta_data=CoreMetaData, verbosity=None -): +def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): mass_method = aviary_options.get_val(Settings.MASS_METHOD) design_type = aviary_options.get_val(Aircraft.Design.TYPE) + # check aircraft type if Aircraft.Fuselage.SIMPLE_LAYOUT not in aviary_options: if mass_method == LegacyCode.FLOPS: aviary_options.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, True, 'unitless') simple_layout = True + if verbosity >= Verbosity.BRIEF: + warnings.warn('Aircraft.Fuselage.SIMPLE_LAYOUT is not set. Assuming True.') elif mass_method == LegacyCode.GASP: if design_type == AircraftTypes.BLENDED_WING_BODY: simple_layout = False else: simple_layout = True aviary_options.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, simple_layout, 'unitless') + if verbosity >= Verbosity.BRIEF: + warnings.warn(f'Aircraft.Fuselage.SIMPLE_LAYOUT is not set. Assuming {simple_layout}.') else: simple_layout = aviary_options.get_val(Aircraft.Fuselage.SIMPLE_LAYOUT) @@ -185,6 +188,11 @@ def preprocess_fuselage_layout( else: num_business_class_pax = 0 aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not set, ' + 'assuming default 0.' + ) if Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS in aviary_options: num_economy_class_pax = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 'unitless' @@ -192,6 +200,11 @@ def preprocess_fuselage_layout( else: num_economy_class_pax = 0 aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS not set, ' + 'assuming default 0.' + ) if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options: num_first_class_pax = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 'unitless' @@ -199,6 +212,11 @@ def preprocess_fuselage_layout( else: num_first_class_pax = 0 aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not set, ' + 'assuming default 0.' + ) # initialize number of seat abreast if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS in aviary_options: @@ -210,6 +228,11 @@ def preprocess_fuselage_layout( aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0 ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS not ' + 'set, assuming default 0.' + ) if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY in aviary_options: num_seat_abreast_economy = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 'unitless' @@ -217,6 +240,11 @@ def preprocess_fuselage_layout( else: num_seat_abreast_economy = 0 aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY not ' + 'set, assuming default 0.' + ) if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST in aviary_options: num_seat_abreast_first = aviary_options.get_val( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 'unitless' @@ -224,6 +252,11 @@ def preprocess_fuselage_layout( else: num_seat_abreast_first = 0 aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' + 'not set, assuming default 0.' + ) # set number of seat abreast if num_economy_class_pax > 200: @@ -231,6 +264,11 @@ def preprocess_fuselage_layout( aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 8, 'unitless' ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ' + 'not set, assuming default 8.' + ) if num_seat_abreast_first == 0: num_seat_abreast_economy = aviary_options.get_val( Aircraft.Fuselage.NUM_SEATS_ABREAST_ECONOMY, 'unitless' @@ -240,6 +278,11 @@ def preprocess_fuselage_layout( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, num_seat_abreast_first, ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' + f'not set, assuming {num_seat_abreast_first}.' + ) if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS not in aviary_options: num_seat_abreast_economy = aviary_options.get_val( Aircraft.Fuselage.NUM_SEATS_ABREAST_ECONOMY, 'unitless' @@ -249,20 +292,46 @@ def preprocess_fuselage_layout( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS, num_seat_abreast_business, ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS ' + f'not set, assuming {num_seat_abreast_business}.' + ) + if num_seat_abreast_business <= 0 and num_business_class_pax > 0: num_seat_abreast_business = 5 aviary_options.set_val( Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5 ) - if num_seat_abreast_economy <= 0 and num_economy_class_pax < 60: + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ' + f'not set, assuming 5.' + ) + if num_seat_abreast_economy <= 0 and 0 < num_economy_class_pax < 60: num_seat_abreast_economy = 5 aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 5) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ' + f'not set, assuming 5.' + ) elif num_seat_abreast_economy <= 0 and num_economy_class_pax > 0: num_seat_abreast_economy = 6 aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ' + f'not set, assuming 6.' + ) if num_seat_abreast_first <= 0 and num_first_class_pax > 0: num_seat_abreast_first = 4 aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' + f'not set, assuming 4.' + ) # set seat pitch if Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS not in aviary_options: @@ -270,16 +339,91 @@ def preprocess_fuselage_layout( aviary_options.set_val( Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 36.0, 'inch' ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS ' + f'not set, assuming 36 inches.' + ) if Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY not in aviary_options: if num_economy_class_pax > 0: aviary_options.set_val( Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 34.0, 'inch' ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY ' + f'not set, assuming 34 inches.' + ) if Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST not in aviary_options: if num_first_class_pax > 0: aviary_options.set_val( Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 38.0, 'inch' ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST ' + f'not set, assuming 38 inches.' + ) + elif design_type == AircraftTypes.BLENDED_WING_BODY: + # set number of seat abreast + if num_seat_abreast_business <= 0: + num_seat_abreast_business = 5 + aviary_options.set_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5 + ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ' + f'not set, assuming 5.' + ) + if num_seat_abreast_economy <= 0: + num_seat_abreast_economy = 6 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ' + f'not set, assuming 6.' + ) + if num_seat_abreast_first <= 0: + num_seat_abreast_first = 4 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' + f'not set, assuming 4.' + ) + + # set seat pitch + if Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS not in aviary_options: + if num_business_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, 'inch' + ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS ' + f'not set, assuming 39 inches.' + ) + if Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY not in aviary_options: + if num_economy_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, 'inch' + ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY ' + f'not set, assuming 32 inches.' + ) + if Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST not in aviary_options: + if num_first_class_pax > 0: + aviary_options.set_val( + Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, 'inch' + ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST ' + f'not set, assuming 61 inches.' + ) elif mass_method == LegacyCode.GASP: if design_type == AircraftTypes.BLENDED_WING_BODY: From c2fc23fc4b648673b153c52b0d7a3ca29dc0e9c4 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 15:59:57 -0400 Subject: [PATCH 03/13] bug fix --- aviary/utils/preprocessors.py | 157 ++++++++++++++++------------------ 1 file changed, 76 insertions(+), 81 deletions(-) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 8f29cb27e1..09d48d4053 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -156,6 +156,79 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): if simple_layout == False: # Check seat widths are set if mass_method == LegacyCode.FLOPS: + # initialize number of pax + if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options: + num_business_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 'unitless' + ) + else: + num_business_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not set, ' + 'assuming default 0.' + ) + if Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS in aviary_options: + num_economy_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 'unitless' + ) + else: + num_economy_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS not set, assuming default 0.' + ) + if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options: + num_first_class_pax = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 'unitless' + ) + else: + num_first_class_pax = 0 + aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not set, assuming default 0.' + ) + + # initialize number of seat abreast + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS in aviary_options: + num_seat_abreast_business = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 'unitless' + ) + else: + num_seat_abreast_business = 0 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS not ' + 'set, assuming default 0.' + ) + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY in aviary_options: + num_seat_abreast_economy = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 'unitless' + ) + else: + num_seat_abreast_economy = 0 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY not ' + 'set, assuming default 0.' + ) + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST in aviary_options: + num_seat_abreast_first = aviary_options.get_val( + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 'unitless' + ) + else: + num_seat_abreast_first = 0 + aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' + 'not set, assuming default 0.' + ) if design_type == AircraftTypes.TRANSPORT: # initialize seat width if Aircraft.Fuselage.SEAT_WIDTH_BUSINESS not in aviary_options: @@ -180,84 +253,6 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): 'assuming default 25.0 inches.' ) - # initialize number of pax - if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options: - num_business_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 'unitless' - ) - else: - num_business_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not set, ' - 'assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS in aviary_options: - num_economy_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 'unitless' - ) - else: - num_economy_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS not set, ' - 'assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options: - num_first_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 'unitless' - ) - else: - num_first_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not set, ' - 'assuming default 0.' - ) - - # initialize number of seat abreast - if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS in aviary_options: - num_seat_abreast_business = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS, 'unitless' - ) - else: - num_seat_abreast_business = 0 - aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0 - ) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS not ' - 'set, assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY in aviary_options: - num_seat_abreast_economy = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 'unitless' - ) - else: - num_seat_abreast_economy = 0 - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY not ' - 'set, assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST in aviary_options: - num_seat_abreast_first = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 'unitless' - ) - else: - num_seat_abreast_first = 0 - aviary_options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' - 'not set, assuming default 0.' - ) - # set number of seat abreast if num_economy_class_pax > 200: if num_seat_abreast_economy == 0: @@ -283,18 +278,18 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST ' f'not set, assuming {num_seat_abreast_first}.' ) - if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS not in aviary_options: + if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS not in aviary_options: num_seat_abreast_economy = aviary_options.get_val( Aircraft.Fuselage.NUM_SEATS_ABREAST_ECONOMY, 'unitless' ) num_seat_abreast_business = num_seat_abreast_economy - 2 aviary_options.set_val( - Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS, + Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, num_seat_abreast_business, ) if verbosity >= Verbosity.BRIEF: warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS ' + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ' f'not set, assuming {num_seat_abreast_business}.' ) From 2140b6621989daaf2fe4af73c315e63cd23327ed Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 16:36:27 -0400 Subject: [PATCH 04/13] work in progress: set SEAT_PITCH in model --- .../blended_wing_body/bwb300_baseline_FLOPS.csv | 12 ++++++------ .../test_data/bwb300_baseline_FLOPS_data.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) 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..2906e5dafd 100644 --- a/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv +++ b/aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv @@ -22,12 +22,12 @@ aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless aircraft:crew_and_payload:design:num_business_class,76,unitless aircraft:crew_and_payload:design:num_economy_class,200,unitless aircraft:crew_and_payload:design:num_first_class,24,unitless -aircraft:crew_and_payload:design:num_seats_abreast_business,0,unitless -aircraft:crew_and_payload:design:num_seats_abreast_economy,0,unitless -aircraft:crew_and_payload:design:num_seats_abreast_first,0,unitless -aircraft:crew_and_payload:design:seat_pitch_business,0,inch -aircraft:crew_and_payload:design:seat_pitch_economy,0,inch -aircraft:crew_and_payload:design:seat_pitch_first,0,inch +aircraft:crew_and_payload:design:num_seats_abreast_business,5,unitless +aircraft:crew_and_payload:design:num_seats_abreast_economy,6,unitless +aircraft:crew_and_payload:design:num_seats_abreast_first,4,unitless +aircraft:crew_and_payload:design:seat_pitch_business,39.0,inch +aircraft:crew_and_payload:design:seat_pitch_economy,32.0,inch +aircraft:crew_and_payload:design:seat_pitch_first,61.0,inch aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless aircraft:crew_and_payload:mass_per_passenger,165.0,lbm aircraft:crew_and_payload:misc_cargo,0.0,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 38392abdfe..cc912644a2 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 @@ -60,12 +60,12 @@ inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 76) # NPB inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 24) # NPF inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 200) # NPT -inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 0) # NBABR -inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 0) # NFABR -inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 0) # NTABR -inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 0.0, 'inch') # BPITCH -inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 0.0, 'inch') # FPITCH -inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 0.0, 'inch') # TPITCH +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 5) # NBABR +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) # NFABR +inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 6) # NTABR +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS, 39.0, 'inch') # BPITCH +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST, 61.0, 'inch') # FPITCH +inputs.set_val(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY, 32.0, 'inch') # TPITCH inputs.set_val(Aircraft.CrewPayload.CARGO_CONTAINER_MASS_SCALER, 1.0) # WCON inputs.set_val(Aircraft.CrewPayload.NUM_FLIGHT_CREW, 2) # NFLCR From 0bef6cc01b2d28a83cb3f4585ea13fc5e1ad4b7e Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 16:38:14 -0400 Subject: [PATCH 05/13] move number of seats earlier for later reference --- aviary/subsystems/geometry/flops_based/fuselage.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index c9a4a8e218..0650659669 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -636,6 +636,10 @@ def compute(self, inputs, outputs): width_galley = 36.0 # inch width_closet = 12.0 # inch + num_business_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS] + num_first_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_FIRST_CLASS] + num_economy_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS] + # Establish defaults for Number of Passengers Abreast # and Seat Pitch for First, Business and Economy classes @@ -657,15 +661,15 @@ def compute(self, inputs, outputs): raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] - if seat_pitch_business <= 0: + if seat_pitch_business <= 0 and num_business_class_pax > 0: seat_pitch_business = 39.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] - if seat_pitch_first <= 0: + if seat_pitch_first <= 0 and num_first_class_pax > 0: seat_pitch_first = 61.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] - if seat_pitch_economy <= 0: + if seat_pitch_economy <= 0 and num_economy_class_pax > 0: seat_pitch_economy = 32.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') @@ -676,9 +680,6 @@ def compute(self, inputs, outputs): # Find the number of lavatories, galleys and closets based on the # number of passengers for each class and the area for each - num_business_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS] - num_first_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_FIRST_CLASS] - num_economy_class_pax = self.options[Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS] num_lavas = ( int(0.99 + num_first_class_pax / 16.0) + int(0.99 + num_business_class_pax / 24.0) From b790c965fb929252f37595897243b1f4a3b0d1e0 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 17:01:08 -0400 Subject: [PATCH 06/13] minor update --- aviary/utils/preprocessors.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 09d48d4053..32dd9633b4 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -148,8 +148,6 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): else: simple_layout = True aviary_options.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, simple_layout, 'unitless') - if verbosity >= Verbosity.BRIEF: - warnings.warn(f'Aircraft.Fuselage.SIMPLE_LAYOUT is not set. Assuming {simple_layout}.') else: simple_layout = aviary_options.get_val(Aircraft.Fuselage.SIMPLE_LAYOUT) From b7b0d27883fa6fd0bb0a82188905369ee016e26b Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 17:02:18 -0400 Subject: [PATCH 07/13] added Aircraft.Design.TYPE to test_save_results --- aviary/interface/test/sizing_results_for_test.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aviary/interface/test/sizing_results_for_test.json b/aviary/interface/test/sizing_results_for_test.json index d40e73de17..c94d829ae9 100644 --- a/aviary/interface/test/sizing_results_for_test.json +++ b/aviary/interface/test/sizing_results_for_test.json @@ -1124,6 +1124,12 @@ "unitless", "" ], + [ + "aircraft:design:type", + "TRANSPORT", + "unitless", + "" + ], [ "aircraft:fuselage:simple_layout", true, From 6a483a0fd4124b82e6b7b85eaa514b1e6d72d05c Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 17:22:20 -0400 Subject: [PATCH 08/13] work in progress --- .../geometry/flops_based/fuselage.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 0650659669..1d51d42f30 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -235,27 +235,27 @@ def compute(self, inputs, outputs): # The 200 was derived from B757 - the largest single aisle western desig. if num_economy_class_pax > 200: if num_seat_abreast_economy <= 0: - num_seat_abreast_economy = 8 + # num_seat_abreast_economy = 8 raise UserWarning( 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' ) if num_first_class_pax > 0 and num_seat_abreast_first <= 0: - num_seat_abreast_first = num_seat_abreast_economy - 2 + # num_seat_abreast_first = num_seat_abreast_economy - 2 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') if num_business_class_pax > 0 and num_seat_abreast_business <= 0: - num_seat_abreast_business = num_seat_abreast_economy - 2 + # num_seat_abreast_business = num_seat_abreast_economy - 2 raise UserWarning( 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS is not set.' ) if num_seat_abreast_first <= 0 and num_first_class_pax > 0: - num_seat_abreast_first = 4 + # num_seat_abreast_first = 4 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') if num_seat_abreast_economy <= 0 and num_economy_class_pax > 0: - num_seat_abreast_economy = 6 + # num_seat_abreast_economy = 6 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') if num_seat_abreast_business <= 0 and num_business_class_pax > 0: - num_seat_abreast_business = 5 + # num_seat_abreast_business = 5 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') # Though these are not user definable, the values here are typical for most transport @@ -268,7 +268,7 @@ def compute(self, inputs, outputs): # is too much for a typical short range transport. if num_economy_class_pax < 60: if num_seat_abreast_economy <= 0: - num_seat_abreast_economy = 5 + # num_seat_abreast_economy = 5 raise UserWarning( 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' ) @@ -291,15 +291,15 @@ def compute(self, inputs, outputs): seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] if seat_pitch_first <= 0 and num_first_class_pax > 0: - seat_pitch_first = 38.0 # inch + # seat_pitch_first = 38.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] if seat_pitch_business <= 0 and num_business_class_pax > 0: - seat_pitch_business = 36.0 # inch + # seat_pitch_business = 36.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] if seat_pitch_economy <= 0 and num_economy_class_pax > 0: - seat_pitch_economy = 34.0 # inch + # seat_pitch_economy = 34.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # set maximum number of galleys based on statistics (this block is not from FLOPS) @@ -647,30 +647,30 @@ def compute(self, inputs, outputs): Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ] if num_seat_abreast_business <= 0: - num_seat_abreast_business = 5 + # num_seat_abreast_business = 5 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') num_seat_abreast_first = self.options[Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST] if num_seat_abreast_first <= 0: - num_seat_abreast_first = 4 + # num_seat_abreast_first = 4 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') num_seat_abreast_economy = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ] if num_seat_abreast_economy <= 0: - num_seat_abreast_economy = 6 + # num_seat_abreast_economy = 6 raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] if seat_pitch_business <= 0 and num_business_class_pax > 0: - seat_pitch_business = 39.0 # inch + # seat_pitch_business = 39.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] if seat_pitch_first <= 0 and num_first_class_pax > 0: - seat_pitch_first = 61.0 # inch + # seat_pitch_first = 61.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] if seat_pitch_economy <= 0 and num_economy_class_pax > 0: - seat_pitch_economy = 32.0 # inch + # seat_pitch_economy = 32.0 # inch raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # Determine unit seat areas for each type of passenger From 51d935f9946c756665b2fd69e48fefd7a20237b7 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 18 Aug 2026 19:11:30 -0400 Subject: [PATCH 09/13] minor update --- aviary/utils/preprocessors.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 32dd9633b4..864b5fea1a 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -132,6 +132,17 @@ def preprocess_options( def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): + """ + Set option values that are needed for fuselage layout computationbut are not direct inputs. + + Parameters + ---------- + aviary_options : AviaryValues + Options to be updated + + Verbosity, optional + Sets level of printouts for this function. + """ mass_method = aviary_options.get_val(Settings.MASS_METHOD) design_type = aviary_options.get_val(Aircraft.Design.TYPE) From 6292d3c0e30e36bc10712b090a2360560583acb9 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 25 Aug 2026 16:38:10 -0400 Subject: [PATCH 10/13] work in progress: check whether there are central mounted engines --- aviary/subsystems/geometry/flops_based/fuselage.py | 10 +++++++--- .../geometry/flops_based/test/test_fuselage.py | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 9e3de75b79..06d6cd5c03 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -176,7 +176,7 @@ def initialize(self): add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST) add_aviary_option(self, Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY) - add_aviary_option(self, Aircraft.Propulsion.TOTAL_NUM_ENGINES) + add_aviary_option(self, Aircraft.Engine.NUM_ENGINES) add_aviary_option(self, Settings.VERBOSITY) def setup(self): @@ -376,8 +376,11 @@ def compute(self, inputs, outputs): # Calculate the passenger compartment length - num_engines = self.options[Aircraft.Propulsion.TOTAL_NUM_ENGINES] - eng_flag = num_engines - 2 * int(num_engines / 2) # a center mounted engine if 1. + num_engines = self.options[Aircraft.Engine.NUM_ENGINES] + # eng_flag = num_engines - 2 * int(num_engines / 2) # a center mounted engine if 1. + eng_flag = int( + np.any(num_engines % 2 != 0) + ) # there is at least one center mounted engine if 1. first_class_len = num_first_class_pax * seat_pitch_first / num_seat_abreast_first business_class_len = ( num_business_class_pax * seat_pitch_business / num_seat_abreast_business @@ -395,6 +398,7 @@ def compute(self, inputs, outputs): num_doors = 1 + int((pax_compart_length / 50.0) * num_seat_abreast_economy / 6.0) # Final passenger compartment length + # assume all central engines are aligned along the same line relative to the fuselage pax_compart_length = (pax_compart_length + num_doors * 2.96) * fuselage_multiplier fuselage_length = pax_compart_length + 25.0 * eng_flag + 40.0 outputs[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH] = pax_compart_length diff --git a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py index a3682d456e..76c52db830 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py @@ -52,7 +52,7 @@ def test_case1(self): options.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 11, units='unitless') options.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 158, units='unitless') - options.set_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES, 2, units='unitless') + options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') prob.model.add_subsystem( 'layout', DetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] @@ -86,7 +86,7 @@ def test_case2(self): options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 6) options.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY, 10) - options.set_val(Aircraft.Propulsion.TOTAL_NUM_ENGINES, 2, units='unitless') + options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') prob.model.add_subsystem( 'layout', DetailedCabinLayout(), promotes_outputs=['*'], promotes_inputs=['*'] From 730ce3402f3ce92941e4ff0e5598981f5823b4cf Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 25 Aug 2026 17:28:51 -0400 Subject: [PATCH 11/13] minor update --- aviary/subsystems/geometry/flops_based/fuselage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index 06d6cd5c03..d215c3268e 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -379,7 +379,7 @@ def compute(self, inputs, outputs): num_engines = self.options[Aircraft.Engine.NUM_ENGINES] # eng_flag = num_engines - 2 * int(num_engines / 2) # a center mounted engine if 1. eng_flag = int( - np.any(num_engines % 2 != 0) + any(x % 2 != 0 for x in num_engines) ) # there is at least one center mounted engine if 1. first_class_len = num_first_class_pax * seat_pitch_first / num_seat_abreast_first business_class_len = ( From c3159517294399f765a89fc17831ed6e4cf4f467 Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Tue, 25 Aug 2026 18:26:50 -0400 Subject: [PATCH 12/13] removed unnecessary warning messages --- .../geometry/flops_based/fuselage.py | 58 ------------------- 1 file changed, 58 deletions(-) diff --git a/aviary/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index d215c3268e..d260cf1117 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -211,32 +211,6 @@ def compute(self, inputs, outputs): Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ] - # The 200 was derived from B757 - the largest single aisle western desig. - if num_economy_class_pax > 200: - if num_seat_abreast_economy <= 0: - # num_seat_abreast_economy = 8 - raise UserWarning( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' - ) - if num_first_class_pax > 0 and num_seat_abreast_first <= 0: - # num_seat_abreast_first = num_seat_abreast_economy - 2 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') - if num_business_class_pax > 0 and num_seat_abreast_business <= 0: - # num_seat_abreast_business = num_seat_abreast_economy - 2 - raise UserWarning( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BASINESS is not set.' - ) - - if num_seat_abreast_first <= 0 and num_first_class_pax > 0: - # num_seat_abreast_first = 4 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') - if num_seat_abreast_economy <= 0 and num_economy_class_pax > 0: - # num_seat_abreast_economy = 6 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') - if num_seat_abreast_business <= 0 and num_business_class_pax > 0: - # num_seat_abreast_business = 5 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') - # Though these are not user definable, the values here are typical for most transport aisle_width_first_class = 20.0 # inch aisle_width_business_class = 19.0 # inch @@ -246,11 +220,6 @@ def compute(self, inputs, outputs): # Also, if the number of passengers abreast was not specified, then set it to 5 because 6 # is too much for a typical short range transport. if num_economy_class_pax < 60: - if num_seat_abreast_economy <= 0: - # num_seat_abreast_economy = 5 - raise UserWarning( - 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.' - ) aisle_width_economy_class = 15.0 if num_seat_abreast_economy > 6: @@ -269,17 +238,8 @@ def compute(self, inputs, outputs): aisle_width_economy_class = 15.0 seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] - if seat_pitch_first <= 0 and num_first_class_pax > 0: - # seat_pitch_first = 38.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] - if seat_pitch_business <= 0 and num_business_class_pax > 0: - # seat_pitch_business = 36.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] - if seat_pitch_economy <= 0 and num_economy_class_pax > 0: - # seat_pitch_economy = 34.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # set maximum number of galleys based on statistics (this block is not from FLOPS) num_pax = num_first_class_pax + num_business_class_pax + num_economy_class_pax @@ -663,32 +623,14 @@ def compute(self, inputs, outputs): num_seat_abreast_business = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ] - if num_seat_abreast_business <= 0: - # num_seat_abreast_business = 5 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS is not set') num_seat_abreast_first = self.options[Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST] - if num_seat_abreast_first <= 0: - # num_seat_abreast_first = 4 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST is not set.') num_seat_abreast_economy = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ] - if num_seat_abreast_economy <= 0: - # num_seat_abreast_economy = 6 - raise UserWarning('Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY is not set.') seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] - if seat_pitch_business <= 0 and num_business_class_pax > 0: - # seat_pitch_business = 39.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS is not set.') seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] - if seat_pitch_first <= 0 and num_first_class_pax > 0: - # seat_pitch_first = 61.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST is not set.') seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] - if seat_pitch_economy <= 0 and num_economy_class_pax > 0: - # seat_pitch_economy = 32.0 # inch - raise UserWarning('Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY is not set.') # Determine unit seat areas for each type of passenger area_seat_business = bay_width_nom * seat_pitch_business / 12.0 / num_seat_abreast_business From 5784b06b95de7db5de6a5edb6b18f64c47f8d8be Mon Sep 17 00:00:00 2001 From: Xun Jiang Date: Thu, 27 Aug 2026 12:45:51 -0400 Subject: [PATCH 13/13] removed unnecessary code per Jason's request --- aviary/utils/preprocessors.py | 38 ----------------------------------- 1 file changed, 38 deletions(-) diff --git a/aviary/utils/preprocessors.py b/aviary/utils/preprocessors.py index 6763bb737f..9d86203a11 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -151,8 +151,6 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): if mass_method == LegacyCode.FLOPS: aviary_options.set_val(Aircraft.Fuselage.SIMPLE_LAYOUT, True, 'unitless') simple_layout = True - if verbosity >= Verbosity.BRIEF: - warnings.warn('Aircraft.Fuselage.SIMPLE_LAYOUT is not set. Assuming True.') elif mass_method == LegacyCode.GASP: if design_type == AircraftTypes.BLENDED_WING_BODY: simple_layout = False @@ -165,42 +163,6 @@ def preprocess_fuselage_layout(aviary_options: AviaryValues, verbosity=None): if simple_layout == False: # Check seat widths are set if mass_method == LegacyCode.FLOPS: - # initialize number of pax - if Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS in aviary_options: - num_business_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 'unitless' - ) - else: - num_business_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS not set, ' - 'assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS in aviary_options: - num_economy_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 'unitless' - ) - else: - num_economy_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS not set, assuming default 0.' - ) - if Aircraft.CrewPayload.Design.NUM_FIRST_CLASS in aviary_options: - num_first_class_pax = aviary_options.get_val( - Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 'unitless' - ) - else: - num_first_class_pax = 0 - aviary_options.get_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 0) - if verbosity >= Verbosity.BRIEF: - warnings.warn( - 'Aircraft.CrewPayload.Design.NUM_FIRST_CLASS not set, assuming default 0.' - ) - # initialize number of seat abreast if Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS in aviary_options: num_seat_abreast_business = aviary_options.get_val(