diff --git a/aviary/interface/test/sizing_results_for_test.json b/aviary/interface/test/sizing_results_for_test.json index bf5a70ee63..56e84419a1 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, 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 d0b35e6a90..e2ff689f39 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/subsystems/geometry/flops_based/fuselage.py b/aviary/subsystems/geometry/flops_based/fuselage.py index e9847870a6..d260cf1117 100644 --- a/aviary/subsystems/geometry/flops_based/fuselage.py +++ b/aviary/subsystems/geometry/flops_based/fuselage.py @@ -176,9 +176,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.Engine.NUM_ENGINES) add_aviary_option(self, Settings.VERBOSITY) @@ -187,6 +184,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') @@ -211,52 +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 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY =' - f'{num_seat_abreast_economy}' - ) - 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}' - ) - 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}' - ) - - 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}' - ) - 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}' - ) - 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}' - ) - # 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 @@ -266,13 +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 - if verbosity > Verbosity.BRIEF: - print( - 'Set Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY = ' - f'{num_seat_abreast_economy}' - ) aisle_width_economy_class = 15.0 if num_seat_abreast_economy > 6: @@ -290,21 +237,9 @@ 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] - 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] - 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] - 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') + seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] + seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] + seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] # 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 @@ -401,8 +336,11 @@ def compute(self, inputs, outputs): # Calculate the passenger compartment length - num_engines = self.options[Aircraft.Engine.NUM_ENGINES][0] - 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( + 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 = ( num_business_class_pax * seat_pitch_business / num_seat_abreast_business @@ -420,6 +358,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 @@ -629,9 +568,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) add_aviary_option(self, Aircraft.Fuselage.CABIN_SIDEWALL_LENGTH_MIN) @@ -639,6 +575,12 @@ def initialize(self): def setup(self): add_aviary_input(self, Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, units='deg') add_aviary_input(self, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, units='unitless') + 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_input(self, Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_CENTERLINE) add_aviary_input(self, Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_ROOT) @@ -671,32 +613,24 @@ 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 num_seat_abreast_business = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ] - if num_seat_abreast_business <= 0: - num_seat_abreast_business = 5 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_economy = self.options[ Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_ECONOMY ] - if num_seat_abreast_economy <= 0: - num_seat_abreast_economy = 6 - - seat_pitch_business = self.options[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] - if seat_pitch_first <= 0: - seat_pitch_first = 61.0 # inch - seat_pitch_economy = self.options[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] - if seat_pitch_economy <= 0: - seat_pitch_economy = 32.0 # inch + + seat_pitch_business = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_BUSINESS][0] + seat_pitch_first = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_FIRST][0] + seat_pitch_economy = inputs[Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY][0] # Determine unit seat areas for each type of passenger area_seat_business = bay_width_nom * seat_pitch_business / 12.0 / num_seat_abreast_business @@ -705,9 +639,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) diff --git a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py index 9fecbe1136..76c52db830 100644 --- a/aviary/subsystems/geometry/flops_based/test/test_fuselage.py +++ b/aviary/subsystems/geometry/flops_based/test/test_fuselage.py @@ -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') 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() @@ -177,9 +177,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( @@ -187,6 +184,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(Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_CENTERLINE, val=0.7, units='unitless') @@ -223,12 +223,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.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.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( @@ -236,6 +233,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(Aircraft.Fuselage.MAX_WIDTH, val=50.0, units='ft') @@ -274,12 +274,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.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.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') @@ -288,6 +286,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..9b385a1b2e 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,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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 +149,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 +158,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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 +291,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 +300,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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 +430,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 +439,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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 +573,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 +582,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 26c27a2627..79cab8498d 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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -179,6 +178,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -618,7 +622,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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -649,6 +652,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -977,7 +985,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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -1008,6 +1015,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -1344,7 +1356,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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -1376,6 +1387,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -1707,7 +1723,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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -1738,6 +1753,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -2070,7 +2090,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') options.set_val(Aircraft.Engine.NUM_ENGINES, [2], units='unitless') @@ -2100,6 +2119,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -2457,7 +2481,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.Engine.NUM_ENGINES, [2], units='unitless') @@ -2485,6 +2508,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -2838,7 +2866,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') @@ -2867,6 +2894,11 @@ def setUp(self): promotes=['*'], ) + 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( + 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( @@ -3238,8 +3270,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') @@ -3277,6 +3307,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 ef2be906a5..9d86203a11 100644 --- a/aviary/utils/preprocessors.py +++ b/aviary/utils/preprocessors.py @@ -101,9 +101,52 @@ 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, 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, 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) + + # 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') @@ -120,14 +163,45 @@ def preprocess_options( if simple_layout == False: # Check seat widths are set if mass_method == LegacyCode.FLOPS: + # 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: - 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 +209,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 +223,174 @@ def preprocess_options( 'Aircraft.Fuselage.SEAT_WIDTH_FIRST not set, ' 'assuming default 25.0 inches.' ) + + # 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 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' + ) + 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 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_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_BUSINESS, + num_seat_abreast_business, + ) + if verbosity >= Verbosity.BRIEF: + warnings.warn( + 'Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS ' + 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 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: + if num_business_class_pax > 0: + 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: if Aircraft.Fuselage.SEAT_WIDTH_ECONOMY not in aviary_options: @@ -166,29 +415,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 +427,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/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 3d4a5bbc6b..d9dcad79b7 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 @@ -61,12 +61,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 diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 608ba500d1..76f32adfbe 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -1150,7 +1150,6 @@ historical_name={'GASP': None, 'FLOPS': 'FUSEIN.BPITCH'}, units='inch', desc='pitch of the business class seats.', - option=True, default_value=39.0, ) @@ -1160,7 +1159,6 @@ historical_name={'GASP': 'INGASP.PS', 'FLOPS': 'FUSEIN.TPITCH'}, units='inch', desc='pitch of the economy class seats.', - option=True, default_value=32.0, ) @@ -1170,7 +1168,6 @@ historical_name={'GASP': None, 'FLOPS': 'FUSEIN.FPITCH'}, units='inch', desc='pitch of the first class seats.', - option=True, default_value=61.0, ) @@ -3163,8 +3160,7 @@ meta_data=_MetaData, historical_name={'GASP': 'INGASP.WAS', 'FLOPS': None}, units='inch', - desc='Width of the aisles in the passenger cabin. In FLOPS, aisle width is hardcoded per ' - 'passenger class.', + desc='width of the aisles in the passenger cabin', default_value=24, )