Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
88d8f41
work in progress
xjjiang Feb 11, 2026
2a9fc31
add note: If 0, use default.
xjjiang Feb 11, 2026
fb7f941
Merge branch 'BWB_Horizontal_Tail' into BWB_FLOPS_300
xjjiang Feb 18, 2026
fd6ad5b
use max_width[0] when computing num_bays
xjjiang Feb 19, 2026
3162a4b
work in progress: trying to add a new test using bwb300_baseline model.
xjjiang Feb 19, 2026
bfdd736
Merge branch 'BWB_Horizontal_Tail' into BWB_FLOPS_300
xjjiang Feb 19, 2026
32f0965
work in progress: working on bwb300_baseline model
xjjiang Feb 19, 2026
3794b9f
make Aircraft.Fuselage.SIMPLE_LAYOUT a boolean
xjjiang Feb 19, 2026
9686a3b
Merge branch 'main' into BWB_FLOPS_300
xjjiang Feb 19, 2026
fb9cfaa
update fuselage layout code due to the model of bwb300_baseline
xjjiang Feb 20, 2026
43e5bca
adding test_case2 for bwb300_baseline
xjjiang Feb 20, 2026
e4b1f18
work in progress: adding bwb300_baseline
xjjiang Feb 20, 2026
e02998d
add unit test for bwb300_baseline
xjjiang Feb 21, 2026
fc4c372
fix an error
xjjiang Feb 21, 2026
67dee26
work in progress: testing premisison of bwb300 model
xjjiang Feb 21, 2026
2ca3bb1
Merge branch 'main' into BWB_FLOPS_300
xjjiang Feb 21, 2026
4a8ea46
minor update: remove commented out lines
xjjiang Feb 25, 2026
e0f5058
add a docstring for test_case2()
xjjiang Feb 25, 2026
46d0d9d
set AR_Ref to AR if AR_Ref is not provided. Similarly for TC_Ref
xjjiang Feb 25, 2026
8a3bedd
work in progress: add test_case2() for bwb300_baseline to investigate…
xjjiang Feb 25, 2026
1f76eda
work on bwb300_baseline model
xjjiang Feb 25, 2026
301db78
Merge branch 'main' into BWB_FLOPS_300
xjjiang Feb 25, 2026
b3f71d7
add note
xjjiang Feb 26, 2026
e7bf611
Merge branch 'BWB_FLOPS_mission' into BWB_FLOPS_300
xjjiang Feb 26, 2026
626f959
Merge branch 'BWB_FLOPS_mission' into BWB_FLOPS_300
xjjiang Mar 2, 2026
5108a21
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 2, 2026
19f9f34
Merge branch 'BWB_FLOPS_mission' into BWB_FLOPS_300
xjjiang Mar 3, 2026
278ce93
Merge branch 'BWB_FLOPS_mission' into BWB_FLOPS_300
xjjiang Mar 4, 2026
ded515a
add bwb300 baseline model
xjjiang Mar 4, 2026
54e9c3d
add bwb300 baseline bench test
xjjiang Mar 4, 2026
b9ab75a
add horizontal tail parameters and vertical tail parameters to aerobu…
xjjiang Mar 4, 2026
f590558
update outputs for bwb300 baseline model
xjjiang Mar 4, 2026
d397d27
update bwb300 baseline model by removing negative values
xjjiang Mar 4, 2026
a937e7e
get Aircraft.HorizontalTail.NUM_TAILS and Aircraft.VerticalTail.NUM_T…
xjjiang Mar 4, 2026
7ea1bb0
minor update
xjjiang Mar 5, 2026
aca92e0
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 5, 2026
fb91492
Refactor BWB thickness to chord distribution assignment
xjjiang Mar 6, 2026
2bd80a5
Fix formatting in wing_detailed_bwb.py
xjjiang Mar 6, 2026
72a16c3
Rename input station distribution variables
xjjiang Mar 6, 2026
80a6d07
Fix variable names for BWB distribution parameters
xjjiang Mar 6, 2026
8e8300f
Rename wing input parameters for clarity
xjjiang Mar 6, 2026
c831df3
Fix typos in wing parameter names in CSV
xjjiang Mar 6, 2026
9acffe2
Rename variables for wing distribution parameters
xjjiang Mar 6, 2026
e2b2912
Rename INPUT_STATION_DIST to INPUT_STATION_DISTRIBUTION
xjjiang Mar 6, 2026
b5ed6ca
Rename distribution parameters in test_wing_detailed.py
xjjiang Mar 6, 2026
c7951de
Merge branch 'OpenMDAO:main' into BWB_FLOPS_300
xjjiang Mar 6, 2026
4fb1d0d
minor fixes
xjjiang Mar 6, 2026
f3d686b
Merge branch 'BWB_FLOPS_mission' into BWB_FLOPS_300
xjjiang Mar 6, 2026
e5a9e69
Merge branch 'OpenMDAO:main' into BWB_FLOPS_300
xjjiang Mar 7, 2026
75d17a5
add horizontal tail and vertical tail parameters if they exist
xjjiang Mar 7, 2026
c08b8f8
deal with BWB only in aerodynamics_builder.py
xjjiang Mar 7, 2026
c7dad59
delete test_bwb300_FwFm.py
xjjiang Mar 9, 2026
69a7991
move bwb300 bench test to test_bwb_FwFm.py
xjjiang Mar 9, 2026
7beeba6
update aerodynamics builder in case there is no horizontal tail and/o…
xjjiang Mar 9, 2026
d54e0a6
update FLOPS based premission with aerodynamics subsystem for BWB
xjjiang Mar 12, 2026
7be1cc5
remove Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER because it is …
xjjiang Mar 13, 2026
4c90681
remove Aircraft.CrewPayload.BAGGAGE_MASS_PER_PASSENGER if it is negative
xjjiang Mar 13, 2026
d5b5211
remove num_flight_attendants from model and let preprocessor to take …
xjjiang Mar 16, 2026
b9556f3
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 20, 2026
a8028d9
changes based on Chris' comments: Adding warnings, setting default va…
xjjiang Mar 20, 2026
b0d2115
minor update
xjjiang Mar 20, 2026
9db8720
update test values due to the chnage of defaults of seat pitch
xjjiang Mar 20, 2026
77fa9df
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 20, 2026
c895016
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 20, 2026
6ae3a81
fix conflicts
xjjiang Mar 20, 2026
9509379
create a new variable Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD f…
xjjiang Mar 21, 2026
6c76abb
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 21, 2026
e0445ef
minor updates
xjjiang Mar 21, 2026
73cf332
try again
xjjiang Mar 21, 2026
75cbc37
Merge branch 'OpenMDAO:main' into BWB_FLOPS_300
xjjiang Mar 24, 2026
8a69571
Merge branch 'main' into BWB_FLOPS_300
xjjiang Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
662 changes: 662 additions & 0 deletions aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.csv

Large diffs are not rendered by default.

1,199 changes: 1,199 additions & 0 deletions aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS.inp

Large diffs are not rendered by default.

431 changes: 431 additions & 0 deletions aviary/models/aircraft/blended_wing_body/bwb300_baseline_FLOPS_data.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ aircraft:fuel:fuselage_fuel_capacity,0.0,lbm
aircraft:fuel:wing_fuel_fraction,0.68835495693,unitless
aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless
aircraft:furnishings:mass_scaler,1.0,unitless
aircraft:fuselage:height_to_width_ratio,0.11,unitless
aircraft:fuselage:sidebody_thickness_to_chord,0.11,unitless
aircraft:fuselage:mass_scaler,1.0,unitless
aircraft:fuselage:military_cargo_floor,False,unitless
aircraft:fuselage:num_fuselages,1,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,9 @@
# ---------------------------
inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 100) # NPB
inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 28) # NPF
# inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 468, units='unitless') # NPB+NPF+NPT
inputs.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 340) # NPT
inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 100) # NPB
inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 28) # NPF
# inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 468, units='unitless') # sum of three classes
inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 340) # NPT
inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 4) # NBABR
inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) # NFABR
Expand Down Expand Up @@ -106,7 +104,7 @@
inputs.set_val(Aircraft.Fuselage.MILITARY_CARGO_FLOOR, False) # CARGF
inputs.set_val(Aircraft.Fuselage.MASS_SCALER, 1.0) # FRFU
inputs.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 45.0, 'deg') # SWPLE
inputs.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, 0.11) # TCF
inputs.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.11) # TCSOB
# inputs.set_val(Aircraft.Fuselage.WETTED_AREA, 0.0, 'ft**2') # see BWBFuselage_SWet()
inputs.set_val(Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0) # SWETF

Expand All @@ -116,11 +114,9 @@
inputs.set_val(Aircraft.HorizontalTail.ASPECT_RATIO, 0.1) # ARHT
inputs.set_val(Aircraft.HorizontalTail.TAPER_RATIO, 0.0) # TRHT
inputs.set_val(Aircraft.HorizontalTail.THICKNESS_TO_CHORD, 0.11) # TCHT
# inputs.set_val(Aircraft.HorizontalTail.VERTICAL_TAIL_MOUNT_LOCATION, 0.0) # HHT
inputs.set_val(Aircraft.HorizontalTail.MASS_SCALER, 1.0) # FRHT
inputs.set_val(Aircraft.HorizontalTail.NUM_TAILS, 0)
inputs.set_val(Aircraft.HorizontalTail.WETTED_AREA_SCALER, 1.0) # SWETH
# inputs.set_val(Aircraft.HorizontalTail.SWEEP, 0.0) # SWPHT

# Hydraulics
# ---------------------------
Expand Down Expand Up @@ -159,7 +155,6 @@
inputs.set_val(Aircraft.Engine.REFERENCE_MASS, 22017, 'lbm') # WENG
inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, 70000.0, 'lbf') # THRUST
inputs.set_val(Aircraft.Engine.REFERENCE_SLS_THRUST, 86459.2, 'lbf') # THRSO
# inputs.set_val(Aircraft.Engine.NUM_ENGINES, np.array([3])) # NEW+NEF
inputs.set_val(Aircraft.Engine.NUM_FUSELAGE_ENGINES, 3) # NEF
inputs.set_val(Aircraft.Engine.NUM_WING_ENGINES, np.array([0])) # NEW
inputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS_SCALER, 0.0) # WTHR
Expand Down Expand Up @@ -241,7 +236,6 @@
inputs.set_val(Aircraft.Wing.MISC_MASS_SCALER, 1.0) # FRWI3
inputs.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 50) # NSTD
inputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS_SCALER, 1.0) # FRWI2
inputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA_RATIO, 0.333) # FLAPR
inputs.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 86.75, 'ft') # OSSPAN
inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_REDUCTION, False) # MIKE
inputs.set_val(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0) # FSTRT
Expand Down Expand Up @@ -286,11 +280,9 @@
inputs.set_val(Mission.Summary.FUEL_FLOW_SCALER, 1.0) # FACT
inputs.set_val(Mission.Design.RANGE, 7750.0, 'NM') # DESRNG
inputs.set_val(Mission.Constraints.MAX_MACH, 0.85) # VMMO
# inputs.set_val(Mission.Takeoff.FUEL_SIMPLE, 577, 'lbm') # FTKOFL

inputs.set_val(Mission.Landing.LIFT_COEFFICIENT_MAX, 3.0) # CLLDM
inputs.set_val(Mission.Takeoff.LIFT_COEFFICIENT_MAX, 2) # CLTOM
# inputs.set_val(Mission.Takeoff.LIFT_OVER_DRAG, 17.354)
inputs.set_val(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO, 0.8) # WRATIO
inputs.set_val(Mission.Landing.INITIAL_VELOCITY, 140.0, 'ft/s') # VAPPR
inputs.set_val(Mission.Takeoff.ROLLING_FRICTION_COEFFICIENT, 0.025) # ROLLMU
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ aircraft:fuel:fuselage_fuel_capacity,0.0,lbm
aircraft:fuel:wing_fuel_fraction,0.68835495693,unitless
aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless
aircraft:furnishings:mass_scaler,1.0,unitless
aircraft:fuselage:height_to_width_ratio,0.11,unitless
aircraft:fuselage:sidebody_thickness_to_chord,0.11,unitless
aircraft:fuselage:length,137.5,ft
aircraft:fuselage:mass_scaler,1.0,unitless
aircraft:fuselage:max_width,64.58,ft
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,9 @@
# ---------------------------
inputs.set_val(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS, 100) # NPB
inputs.set_val(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS, 28) # NPF
# inputs.set_val(Aircraft.CrewPayload.Design.NUM_PASSENGERS, 468, units='unitless') # NPB+NPF+NPT
inputs.set_val(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS, 340) # NPT
inputs.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 100) # NPB
inputs.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 28) # NPF
# inputs.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 468, units='unitless') # sum of three classes
inputs.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 340) # NPT
inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_BUSINESS, 4) # NBABR
inputs.set_val(Aircraft.CrewPayload.Design.NUM_SEATS_ABREAST_FIRST, 4) # NFABR
Expand Down Expand Up @@ -108,7 +106,7 @@
inputs.set_val(Aircraft.Fuselage.MASS_SCALER, 1.0) # FRFU
inputs.set_val(Aircraft.Fuselage.MAX_WIDTH, 64.58, 'ft') # WF
inputs.set_val(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, 45.0, 'deg') # SWPLE
inputs.set_val(Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, 0.11) # TCF
inputs.set_val(Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD, 0.11) # TCF
# inputs.set_val(Aircraft.Fuselage.WETTED_AREA, 0.0, 'ft**2') # see BWBFuselage_SWet()
inputs.set_val(Aircraft.Fuselage.WETTED_AREA_SCALER, 1.0) # SWETF

Expand All @@ -118,7 +116,6 @@
inputs.set_val(Aircraft.HorizontalTail.ASPECT_RATIO, 0.1) # ARHT
inputs.set_val(Aircraft.HorizontalTail.TAPER_RATIO, 0.0) # TRHT
inputs.set_val(Aircraft.HorizontalTail.THICKNESS_TO_CHORD, 0.11) # TCHT
# inputs.set_val(Aircraft.HorizontalTail.VERTICAL_TAIL_MOUNT_LOCATION, 0.0) # HHT
inputs.set_val(Aircraft.HorizontalTail.MASS_SCALER, 1.0) # FRHT
inputs.set_val(Aircraft.HorizontalTail.NUM_TAILS, 0)
inputs.set_val(Aircraft.HorizontalTail.WETTED_AREA_SCALER, 1.0) # SWETH
Expand Down Expand Up @@ -161,7 +158,6 @@
inputs.set_val(Aircraft.Engine.REFERENCE_MASS, 22017, 'lbm') # WENG
inputs.set_val(Aircraft.Engine.SCALED_SLS_THRUST, 70000.0, 'lbf') # THRUST
inputs.set_val(Aircraft.Engine.REFERENCE_SLS_THRUST, 86459.2, 'lbf') # THRSO
# inputs.set_val(Aircraft.Engine.NUM_ENGINES, np.array([3])) # NEW+NEF
inputs.set_val(Aircraft.Engine.NUM_FUSELAGE_ENGINES, 3) # NEF
inputs.set_val(Aircraft.Engine.NUM_WING_ENGINES, np.array([0])) # NEW
inputs.set_val(Aircraft.Engine.THRUST_REVERSERS_MASS_SCALER, 0.0) # WTHR
Expand Down Expand Up @@ -210,7 +206,6 @@
inputs.set_val(Aircraft.Wing.MISC_MASS_SCALER, 1.0) # FRWI3
inputs.set_val(Aircraft.Wing.NUM_INTEGRATION_STATIONS, 50) # NSTD
inputs.set_val(Aircraft.Wing.SHEAR_CONTROL_MASS_SCALER, 1.0) # FRWI2
inputs.set_val(Aircraft.Wing.CONTROL_SURFACE_AREA_RATIO, 0.333) # FLAPR
inputs.set_val(Aircraft.Wing.OUTBOARD_SEMISPAN, 86.75, 'ft') # OSSPAN
inputs.set_val(Aircraft.Wing.SPAN_EFFICIENCY_REDUCTION, False) # MIKE
inputs.set_val(Aircraft.Wing.STRUT_BRACING_FACTOR, 0.0) # FSTRT
Expand All @@ -233,7 +228,6 @@
inputs.set_val(Mission.Summary.FUEL_FLOW_SCALER, 1.0) # FACT
inputs.set_val(Mission.Design.RANGE, 7750.0, 'NM') # DESRNG
inputs.set_val(Mission.Constraints.MAX_MACH, 0.85) # VMMO
# inputs.set_val(Mission.Takeoff.FUEL_SIMPLE, 577, 'lbm') # FTKOFL

inputs.set_val(Mission.Landing.LIFT_COEFFICIENT_MAX, 3.0) # CLLDM
inputs.set_val(Mission.Takeoff.LIFT_COEFFICIENT_MAX, 2) # CLTOM
Expand Down
75 changes: 63 additions & 12 deletions aviary/subsystems/aerodynamics/aerodynamics_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -494,14 +494,49 @@ def get_parameters(self, aviary_inputs=None, **kwargs):
params[Aircraft.Design.LIFT_DEPENDENT_DRAG_POLAR] = opts

if method == 'computed':
try:
verbosity = aviary_inputs.get_val(Settings.VERBOSITY)
except KeyError:
verbosity = Verbosity.QUIET
try:
design_type = aviary_inputs.get_val(Aircraft.Design.TYPE)
except KeyError:
design_type = AircraftTypes.TRANSPORT
if verbosity >= Verbosity.BRIEF:
warnings.warn('Assume the aircraft is a transport.')

try:
num_horizontal_tails = aviary_inputs.get_val(Aircraft.HorizontalTail.NUM_TAILS)
except KeyError:
num_horizontal_tails = 1
if verbosity >= Verbosity.BRIEF:
warnings.warn('Assume there is a horizontal tail.')
try:
num_vertical_tails = aviary_inputs.get_val(Aircraft.VerticalTail.NUM_TAILS)
except KeyError:
num_vertical_tails = 1
if verbosity >= Verbosity.BRIEF:
warnings.warn('Assume there is a vertical tail.')

if design_type is AircraftTypes.BLENDED_WING_BODY:
core_inputs_computed = COMPUTED_CORE_INPUTS_BWB
if num_horizontal_tails == 0 and num_vertical_tails == 0:
core_inputs_computed = COMPUTED_CORE_INPUTS_BWB
elif num_horizontal_tails == 0:
core_inputs_computed = COMPUTED_CORE_INPUTS_BWB + VERTICAL_TAIL_INPUTS
else:
core_inputs_computed = (
COMPUTED_CORE_INPUTS_BWB + HORIZONTAL_TAIL_INPUTS + VERTICAL_TAIL_INPUTS
)
else:
core_inputs_computed = COMPUTED_CORE_INPUTS
if num_horizontal_tails == 0 and num_vertical_tails == 0:
core_inputs_computed = COMPUTED_CORE_INPUTS
elif num_horizontal_tails == 0:
core_inputs_computed = COMPUTED_CORE_INPUTS + VERTICAL_TAIL_INPUTS
else:
core_inputs_computed = (
COMPUTED_CORE_INPUTS + HORIZONTAL_TAIL_INPUTS + VERTICAL_TAIL_INPUTS
)

for var in core_inputs_computed:
meta = _MetaData[var]

Expand Down Expand Up @@ -713,16 +748,16 @@ def report(self, prob, reports_folder, **kwargs):
Aircraft.Fuselage.LAMINAR_FLOW_UPPER,
Aircraft.Fuselage.LENGTH_TO_DIAMETER,
Aircraft.Fuselage.WETTED_AREA,
Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH,
Aircraft.HorizontalTail.FINENESS,
Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER,
Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER,
Aircraft.HorizontalTail.WETTED_AREA,
Aircraft.VerticalTail.CHARACTERISTIC_LENGTH,
Aircraft.VerticalTail.FINENESS,
Aircraft.VerticalTail.LAMINAR_FLOW_LOWER,
Aircraft.VerticalTail.LAMINAR_FLOW_UPPER,
Aircraft.VerticalTail.WETTED_AREA,
# Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH,
# Aircraft.HorizontalTail.FINENESS,
# Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER,
# Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER,
# Aircraft.HorizontalTail.WETTED_AREA,
# Aircraft.VerticalTail.CHARACTERISTIC_LENGTH,
# Aircraft.VerticalTail.FINENESS,
# Aircraft.VerticalTail.LAMINAR_FLOW_LOWER,
# Aircraft.VerticalTail.LAMINAR_FLOW_UPPER,
# Aircraft.VerticalTail.WETTED_AREA,
Aircraft.Wing.AREA,
Aircraft.Wing.ASPECT_RATIO,
Aircraft.Wing.CHARACTERISTIC_LENGTH,
Expand Down Expand Up @@ -771,6 +806,22 @@ def report(self, prob, reports_folder, **kwargs):
Mission.Design.MACH,
]

HORIZONTAL_TAIL_INPUTS = [
Aircraft.HorizontalTail.CHARACTERISTIC_LENGTH,
Aircraft.HorizontalTail.FINENESS,
Aircraft.HorizontalTail.LAMINAR_FLOW_LOWER,
Aircraft.HorizontalTail.LAMINAR_FLOW_UPPER,
Aircraft.HorizontalTail.WETTED_AREA,
]

VERTICAL_TAIL_INPUTS = [
Aircraft.VerticalTail.CHARACTERISTIC_LENGTH,
Aircraft.VerticalTail.FINENESS,
Aircraft.VerticalTail.LAMINAR_FLOW_LOWER,
Aircraft.VerticalTail.LAMINAR_FLOW_UPPER,
Aircraft.VerticalTail.WETTED_AREA,
]

TABULAR_CORE_INPUTS = [
Aircraft.Wing.AREA,
Aircraft.Design.SUBSONIC_DRAG_COEFF_FACTOR,
Expand Down
42 changes: 22 additions & 20 deletions aviary/subsystems/geometry/flops_based/fuselage.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ def setup(self):
add_aviary_input(self, Aircraft.Fuselage.LENGTH, units='ft')
add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft')
add_aviary_input(self, Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, units='deg')
add_aviary_input(self, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, units='unitless')
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'
)
Expand Down Expand Up @@ -445,7 +445,7 @@ def setup_partials(self):
of=[Aircraft.Fuselage.MAX_HEIGHT],
wrt=[
Aircraft.Fuselage.LENGTH,
Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO,
Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD,
],
)

Expand All @@ -455,8 +455,8 @@ def compute(self, inputs, outputs):
length = inputs[Aircraft.Fuselage.LENGTH]
rear_spar_percent_chord = inputs['Rear_spar_percent_chord']
max_width = inputs[Aircraft.Fuselage.MAX_WIDTH][0]
height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO]
bay_width_max = 12.0 # ft
height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD]
bay_width_nom = 12.0 # ft

if length <= 0.0:
raise ValueError(
Expand All @@ -477,7 +477,7 @@ def compute(self, inputs, outputs):

# Enforce maximum number of bays
num_bays_max = self.options[Aircraft.BWB.MAX_NUM_BAYS]
num_bays = int(0.5 + max_width / bay_width_max)
num_bays = int(0.5 + max_width / bay_width_nom)
if num_bays.real > num_bays_max and num_bays_max > 0:
num_bays = num_bays_max
outputs[Aircraft.BWB.NUM_BAYS] = smooth_int_tanh(num_bays, mu=20.0)
Expand All @@ -494,7 +494,7 @@ def compute_partials(self, inputs, J):
sweep = inputs[Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP]
tan_sweep = np.tan(sweep / 57.296)
pax_compart_length = rear_spar_percent_chord * length
height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO]
height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD]

J[Aircraft.Fuselage.PASSENGER_COMPARTMENT_LENGTH, Aircraft.Fuselage.LENGTH] = (
rear_spar_percent_chord
Expand All @@ -520,7 +520,7 @@ def compute_partials(self, inputs, J):
)

J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.LENGTH] = height_to_width
J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO] = length
J[Aircraft.Fuselage.MAX_HEIGHT, Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD] = length


class BWBDetailedCabinLayout(om.ExplicitComponent):
Expand All @@ -541,7 +541,7 @@ def initialize(self):

def setup(self):
add_aviary_input(self, Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP, units='deg')
add_aviary_input(self, Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO, units='unitless')
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'
)
Expand All @@ -560,10 +560,12 @@ def setup_partials(self):
def compute(self, inputs, outputs):
rear_spar_percent_chord = inputs['Rear_spar_percent_chord']
sweep = inputs[Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP]
height_to_width = inputs[Aircraft.Fuselage.HEIGHT_TO_WIDTH_RATIO]
height_to_width = inputs[Aircraft.Fuselage.SIDEBODY_THICKNESS_TO_CHORD]
tan_sweep = np.tan(sweep / 57.296)

bay_width_max = 12.0 # ft
bay_width_nom = 12.0 # ft
# Do not set max bay width for now. Later can create an Aviary variable for BAYWMX
bay_width_max = 0.0
num_bays = 0
num_bays_loc = num_bays
num_bays_max = self.options[Aircraft.BWB.MAX_NUM_BAYS]
Expand Down Expand Up @@ -600,9 +602,9 @@ def compute(self, inputs, outputs):
seat_pitch_economy = 32.0 # inch

# Determine unit seat areas for each type of passenger
area_seat_business = bay_width_max * seat_pitch_business / 12.0 / num_seat_abreast_business
area_seat_first = bay_width_max * seat_pitch_first / 12.0 / num_seat_abreast_first
area_seat_economy = bay_width_max * seat_pitch_economy / 12.0 / num_seat_abreast_economy
area_seat_business = bay_width_nom * seat_pitch_business / 12.0 / num_seat_abreast_business
area_seat_first = bay_width_nom * seat_pitch_first / 12.0 / num_seat_abreast_first
area_seat_economy = bay_width_nom * seat_pitch_economy / 12.0 / num_seat_abreast_economy

# Find the number of lavatories, galleys and closets based on the
# number of passengers for each class and the area for each
Expand All @@ -617,9 +619,9 @@ def compute(self, inputs, outputs):
num_galleys = int(0.99 + 0.6 * num_lavas)
num_closets = int(0.99 + 0.4 * num_lavas)

area_lava = (bay_width_max / 2.0) * (width_lava / 12.0)
area_galley = (bay_width_max / 2.0) * (width_galley / 12.0)
area_closet = (bay_width_max / 2.0) * (width_closet / 12.0)
area_lava = (bay_width_nom / 2.0) * (width_lava / 12.0)
area_galley = (bay_width_nom / 2.0) * (width_galley / 12.0)
area_closet = (bay_width_nom / 2.0) * (width_closet / 12.0)

# Calculate area required for passengers and services
area_seats = (
Expand All @@ -637,11 +639,11 @@ def compute(self, inputs, outputs):
while num_bays_loc != num_bays:
num_bays_loc = num_bays
# Cabin area wasted due to slanted != side wall
area_waste = num_bays * tan_sweep * (bay_width_max / 2.0) ** 2
area_waste = num_bays * tan_sweep * (bay_width_nom / 2.0) ** 2

# Aisle area for horseshoe (5'), cross (2') and rear (3') aisles
# Aisles only go to center of outboard bays, hence num_bays-1
area_aisle = 10.0 * (num_bays - 1) * bay_width_max
area_aisle = 10.0 * (num_bays - 1) * bay_width_nom

# Total pressurized cabin area
area_cabin = area_seats + area_service + area_waste + area_aisle
Expand All @@ -654,15 +656,15 @@ def compute(self, inputs, outputs):
pax_compart_length = root_chord + tan_sweep * max_width / 2.0

# Enforce maximum number of bays
num_bays_tmp = 0.5 + max_width / bay_width_max
num_bays_tmp = 0.5 + max_width / bay_width_nom
if num_bays_tmp[0].real > num_bays_max and num_bays_max > 0:
num_bays = num_bays_max
else:
num_bays = int(num_bays_tmp[0].real)

# Enforce maximum bay width
bay_width = max_width / num_bays
if bay_width > bay_width_max:
if bay_width > bay_width_max and bay_width_max > 0.0:
bay_width = bay_width_max
num_bays_tmp = 0.999 + max_width / bay_width
if num_bays_tmp.real > num_bays_max and num_bays_max > 0:
Expand Down
Loading
Loading