Skip to content
Open
Show file tree
Hide file tree
Changes from 92 commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
35c7ef3
work in progress
xjjiang Sep 23, 2025
860fe7e
rename aircraft:wing:chord_per_semispan to aircraft:wing:chord_per_se…
xjjiang Sep 26, 2025
ad476b5
stecify design_type in if-else blocks
xjjiang Sep 26, 2025
f7cf14e
work in progress: BWB FLOPS based mass and detailed wing work
xjjiang Sep 27, 2025
20fe46c
Merge branch 'main' into BWB_FLOPS_mass
xjjiang Sep 27, 2025
de7602f
Merge branch 'OpenMDAO:main' into BWB_FLOPS_mass
xjjiang Sep 29, 2025
5162ab0
worked on BWB detailed wing unit tests
xjjiang Sep 29, 2025
18ef9e4
Merge branch 'BWB_FLOPS_mass' of github.com:xjjiang/om-Aviary into BW…
xjjiang Sep 29, 2025
0f0bb3a
fix a small typo
xjjiang Sep 29, 2025
4468168
add Aircraft.Wing.BWB_AFTBODY_MASS to BWBAftBodyMass
xjjiang Oct 4, 2025
fc49809
add BWBWingMiscMass class and exclude BWB case in WingMiscMass class
xjjiang Oct 4, 2025
f5e104a
update BWBDetailedWingBendingFact class with a new output variable 'c…
xjjiang Oct 4, 2025
d689c60
add BWBWingMiscMass class and exclude BWB case in WingMiscMass class
xjjiang Oct 4, 2025
b370154
add a note that WEC in FLOPS in not exactly the same as total_control…
xjjiang Oct 4, 2025
716954a
add BWBTransportAvionicsMassTest
xjjiang Oct 4, 2025
1da61be
add BWBCargoMassTest
xjjiang Oct 4, 2025
4ba89a9
minor update
xjjiang Oct 4, 2025
9225759
add BWBWingMiscMassTest, BWBShearControlMassTest, and BWBShearControl…
xjjiang Oct 4, 2025
35b001c
minor update
xjjiang Oct 4, 2025
57c0f91
add BWBSurfaceCtrlMassTest
xjjiang Oct 4, 2025
464f15a
add Aircraft.Wing.BWB_AFTBODY_MASS to BWBAftBodyMass
xjjiang Oct 4, 2025
f0a7804
add BWBTransportEngineCtrlsTest
xjjiang Oct 4, 2025
d24be85
add BWBCargoContainersMassTest
xjjiang Oct 4, 2025
4a80991
remove BWBFuelCapacityGroupTest
xjjiang Oct 5, 2025
f0640a8
Merge branch 'OpenMDAO:main' into BWB_FLOPS_mass
xjjiang Oct 6, 2025
97d2270
set 'WTIN.NPF' for FLOPS for Aircraft.CrewPayload.Design.NUM_FIRST_CL…
xjjiang Oct 7, 2025
b6720f0
add BWB1aFLOPS to FLOPS_Test_Data.py
xjjiang Oct 7, 2025
4bbdd0f
work in progress: adding BWBPropulsionPreMissionTest
xjjiang Oct 7, 2025
a59c7c6
add use_tempdirs
xjjiang Oct 7, 2025
f2daa12
add BWBTransportAirCondMassTest
xjjiang Oct 7, 2025
2874474
don't run BWB test yet.
xjjiang Oct 7, 2025
ca3bf5b
Merge branch 'OpenMDAO:main' into BWB_FLOPS_mass
xjjiang Oct 7, 2025
32ccf61
Merge branch 'OpenMDAO:main' into BWB_FLOPS_mass
xjjiang Oct 7, 2025
f94cad1
adding bwb_1a_FLOPS_data.py
xjjiang Oct 8, 2025
06af0a2
add BWBTransportAirCondMassTest
xjjiang Oct 8, 2025
bbdfd1a
minor update
xjjiang Oct 8, 2025
47f2904
copy Ken's fix
xjjiang Oct 8, 2025
492ebcd
update engine file
xjjiang Oct 8, 2025
beba8b6
work in progress
xjjiang Oct 9, 2025
ba87052
minor update
xjjiang Oct 9, 2025
5f2d80a
add BWBEngineMassTest
xjjiang Oct 9, 2025
ce89c17
add new test: test_wing_group.py
xjjiang Oct 9, 2025
e091bba
add engine file for FLOPS based BWB
xjjiang Oct 9, 2025
b644ebe
minor update to bwb_1a_FLOPS_data.py
xjjiang Oct 9, 2025
98efcaf
omit 'BWB1aFLOPS'
xjjiang Oct 9, 2025
395a319
work in progress on engine_pod
xjjiang Oct 9, 2025
8a42160
omit BWB1aFLOPS in unit tests
xjjiang Oct 9, 2025
5bf6216
minor update
xjjiang Oct 9, 2025
da4f63d
minor update
xjjiang Oct 9, 2025
170e79d
BWBTransportFuelSystemTest is not ready yet
xjjiang Oct 9, 2025
28201c8
Merge branch 'main' into BWB_FLOPS_mass
xjjiang Nov 3, 2025
02957e4
Merge branch 'OpenMDAO:main' into BWB_FLOPS_mass
xjjiang Nov 4, 2025
495a314
Update bwb_1a_FLOPS_data.py
xjjiang Nov 5, 2025
1ba33b3
Add Engine scaled thrust to anti-icing test
xjjiang Nov 5, 2025
78610fd
add a note
xjjiang Nov 5, 2025
4057fcc
remove aircraft:engine:starter_mass
xjjiang Nov 13, 2025
2858f10
remove aircraft:engine:starter_mass
xjjiang Nov 13, 2025
4164ed4
enable value checking for BWB since we have BWB data now.
xjjiang Nov 13, 2025
602ab4b
update FLOPS based BWB data.
xjjiang Nov 13, 2025
a907880
update wing area for BWB to match with FLOPS run
xjjiang Nov 13, 2025
28d2085
update start mass by adding scale avg_diam by thrust ratio
xjjiang Nov 13, 2025
a9d8cc4
deal with the case that vertical tail area is zero
xjjiang Nov 13, 2025
8d6531d
add/update FLOPS based mass unit tests for BWB.
xjjiang Nov 13, 2025
adfc649
update FLOPS based mass TotalSummationTest
xjjiang Nov 13, 2025
2ff6007
update bwb_1a_FLOPS_data.py
xjjiang Nov 13, 2025
6f908f6
add unit tests for detailed layout and detailed wing data set of BWB.
xjjiang Nov 18, 2025
303cbdd
add unit tests for detailed layout and detailed wing data set of BWB.
xjjiang Nov 18, 2025
c64ae19
rename bwb_1a_FLOPS_data.py bwb_simple_FLOPS_data.py
xjjiang Nov 18, 2025
8681b8b
remove LANDG.THROF because it does not exist.
xjjiang Nov 18, 2025
e0684f0
add BWB detailed layout and detailed wing data set for unit testing
xjjiang Nov 18, 2025
61a9de3
add BWBdetailedFLOPS to FLOPS_Test_Data
xjjiang Nov 18, 2025
b30be93
add BWB test case
xjjiang Nov 18, 2025
c4c1c2b
remove an unnecessary input
xjjiang Nov 18, 2025
ff9f071
minor update
xjjiang Nov 18, 2025
35e5dd0
remove unimported variables
xjjiang Nov 18, 2025
84ab7ce
renamed a couple of test classes
xjjiang Nov 18, 2025
5b5d708
minor updates
xjjiang Nov 18, 2025
7656a87
add use_tempdirs wherever needed
xjjiang Nov 18, 2025
c954476
minor updates
xjjiang Nov 18, 2025
75ec810
minor updates
xjjiang Nov 18, 2025
71f9933
minor updates
xjjiang Nov 18, 2025
f58c80d
add unit test in test_propulsion_premission.py
xjjiang Nov 19, 2025
44262b5
update TOTAL_SCALED_SLS_THRUST in BWBPropulsionPreMissionTest
xjjiang Nov 19, 2025
01f99c0
update validataion data
xjjiang Nov 19, 2025
a36c485
update wing aspect ratio to 7.557 from 3.4488821
xjjiang Nov 19, 2025
b0ff436
add Aircraft.Wing.NUM_INPUT_STATION_DIST
xjjiang Nov 20, 2025
b54affa
convert NETAW to Aircraft.Wing.NUM_INTEGRATION_STATIONS. Not needed i…
xjjiang Nov 20, 2025
9064f56
minor update
xjjiang Nov 20, 2025
9556f27
set Aircraft.Engine.NUM_ENGINES to np.array([3]) instead of 3
xjjiang Nov 21, 2025
8f6baad
remove newly added variable Aircraft.Wing.NUM_INPUT_STATION_DIST. Als…
xjjiang Nov 21, 2025
7a1ef2f
one more file to update
xjjiang Nov 21, 2025
4f52781
Merge branch 'main' into BWB_FLOPS_mass
jkirk5 Nov 24, 2025
076ce3e
Update aviary/models/engines/PAX300_baseline_ENGDEK.csv
jkirk5 Nov 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion aviary/docs/examples/modified_aircraft.csv
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ aircraft:wing:airfoil_technology,1.92669766647637,unitless
aircraft:wing:area,1370.0,ft**2
aircraft:wing:aspect_ratio,11.02091,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless
aircraft:wing:chord_per_semispan_dist,0.31,0.23,0.084,unitless
aircraft:wing:composite_fraction,0.2,unitless
aircraft:wing:control_surface_area,137,ft**2
aircraft:wing:control_surface_area_ratio,0.1,unitless
Expand Down
2 changes: 1 addition & 1 deletion aviary/interface/test/sizing_problem_for_test.json
Original file line number Diff line number Diff line change
Expand Up @@ -1050,7 +1050,7 @@
"<class 'int'>"
],
[
"aircraft:wing:chord_per_semispan",
"aircraft:wing:chord_per_semispan_dist",
[
0.31,
0.23,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ aircraft:wing:aspect_ratio,11.5587605382765,unitless
aircraft:wing:aspect_ratio_reference,11.5587605382765,unitless
aircraft:wing:bending_material_mass_scaler,1,unitless
aircraft:wing:bwb_aft_body_mass_scaler,1,unitless
aircraft:wing:chord_per_semispan,0.273522534166506,0.204274849507037,0.0888152947868224,0.0725353313595661,unitless
aircraft:wing:chord_per_semispan_dist,0.273522534166506,0.204274849507037,0.0888152947868224,0.0725353313595661,unitless
aircraft:wing:composite_fraction,0.33333,unitless
aircraft:wing:control_surface_area_ratio,0.333,unitless
aircraft:wing:dihedral,6,deg
Expand Down
575 changes: 575 additions & 0 deletions aviary/models/aircraft/blended_wing_body/bwb_detailed_FLOPS_data.py

Large diffs are not rendered by default.

521 changes: 521 additions & 0 deletions aviary/models/aircraft/blended_wing_body/bwb_simple_FLOPS_data.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ aircraft:wing:airfoil_technology,1.92669766647637,unitless
aircraft:wing:area,1370.0,ft**2
aircraft:wing:aspect_ratio,11.22091,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless
aircraft:wing:chord_per_semispan_dist,0.31,0.23,0.084,unitless
aircraft:wing:composite_fraction,0.2,unitless
aircraft:wing:control_surface_area,137,ft**2
aircraft:wing:control_surface_area_ratio,0.1,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ aircraft:wing:airfoil_technology,1.92669766647637,unitless
aircraft:wing:area,1370.0,ft**2
aircraft:wing:aspect_ratio,11.22091,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless
aircraft:wing:chord_per_semispan_dist,0.31,0.23,0.084,unitless
aircraft:wing:composite_fraction,0.2,unitless
aircraft:wing:control_surface_area,137,ft**2
aircraft:wing:control_surface_area_ratio,0.1,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ aircraft:vertical_tail:num_tails,1,unitless
aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless
aircraft:wing:airfoil_technology,1.92669766647637,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless
aircraft:wing:chord_per_semispan_dist,0.31,0.23,0.084,unitless
aircraft:wing:composite_fraction,0.2,unitless
aircraft:wing:control_surface_area,137,ft**2
aircraft:wing:control_surface_area_ratio,0.1,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ aircraft:wing:airfoil_technology,1.92669766647637,unitless
aircraft:wing:area,1370.0,ft**2
aircraft:wing:aspect_ratio,11.22091,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless
aircraft:wing:chord_per_semispan_dist,0.31,0.23,0.084,unitless
aircraft:wing:composite_fraction,0.2,unitless
aircraft:wing:control_surface_area,137,ft**2
aircraft:wing:control_surface_area_ratio,0.1,unitless
Expand Down
654 changes: 654 additions & 0 deletions aviary/models/engines/PAX300_baseline_ENGDEK.csv

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ aircraft:wing:airfoil_technology,1.01,unitless #check
aircraft:wing:area,1480,ft**2
aircraft:wing:aspect_ratio_reference,0.01,unitless #check
aircraft:wing:bending_material_mass_scaler,1.01,unitless #check
aircraft:wing:chord_per_semispan,0.13,0.115,0.06,unitless
aircraft:wing:chord_per_semispan_dist,0.13,0.115,0.06,unitless
aircraft:wing:composite_fraction,0.01,unitless #check
aircraft:wing:dihedral,-1.0,deg
aircraft:wing:control_surface_area_ratio,0.2234,unitless
Expand Down
10 changes: 5 additions & 5 deletions aviary/subsystems/aerodynamics/gasp_based/gaspaero.py
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ def compute(self, inputs, outputs):
ufac = (1 + lift_ratio) ** 2 / (
sigstr * (lift_ratio / bbar) ** 2 + 2 * sigma * lift_ratio / bbar + 1
)
else:
elif design_type is AircraftTypes.BLENDED_WING_BODY:
# Modify for tailless "BWB"
if bbar < 0.01 * wingspan:
bbar = 1.0
Expand Down Expand Up @@ -2515,7 +2515,7 @@ def setup(self):
),
promotes=['*'],
)
else:
elif design_type is AircraftTypes.TRANSPORT:
self.add_subsystem(
'aero_setup',
AeroSetup(
Expand All @@ -2538,7 +2538,7 @@ def setup(self):
BWBLiftCoeffClean(output_alpha=self.options['output_alpha'], num_nodes=nn),
promotes=['*'],
)
else:
elif design_type is AircraftTypes.TRANSPORT:
self.add_subsystem(
'lift_coef',
LiftCoeffClean(output_alpha=self.options['output_alpha'], num_nodes=nn),
Expand Down Expand Up @@ -2594,7 +2594,7 @@ def setup(self):
),
promotes=['*'],
)
else:
elif design_type is AircraftTypes.TRANSPORT:
self.add_subsystem(
'aero_setup',
AeroSetup(
Expand Down Expand Up @@ -2661,7 +2661,7 @@ def setup(self):
promotes_inputs=['*'],
promotes_outputs=['*'],
)
else:
elif design_type is AircraftTypes.TRANSPORT:
self.add_subsystem(
'lift_coef',
LiftCoeff(num_nodes=nn),
Expand Down
97 changes: 46 additions & 51 deletions aviary/subsystems/geometry/flops_based/bwb_wing_detailed.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ def initialize(self):
add_aviary_option(self, Settings.VERBOSITY)

def setup(self):
num_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DIST])
num_inp_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DIST])
add_aviary_input(
self, Aircraft.Wing.CHORD_PER_SEMISPAN_DIST, shape=num_inp_stations, units='unitless'
)
add_aviary_input(
self, Aircraft.Wing.CHORD_PER_SEMISPAN_DIST, shape=num_stations, units='unitless'
self, Aircraft.Wing.THICKNESS_TO_CHORD_DIST, shape=num_inp_stations, units='unitless'
)
add_aviary_input(
self, Aircraft.Wing.THICKNESS_TO_CHORD_DIST, shape=num_stations, units='unitless'
self, Aircraft.Wing.LOAD_PATH_SWEEP_DIST, shape=num_inp_stations, units='deg'
)
add_aviary_input(self, Aircraft.Wing.LOAD_PATH_SWEEP_DIST, shape=num_stations, units='deg')
add_aviary_input(self, Aircraft.Fuselage.LENGTH, units='ft')
add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft')
add_aviary_input(self, Aircraft.Wing.SPAN, units='ft')
Expand All @@ -38,14 +40,11 @@ def setup(self):
desc='RSPSOB: Rear spar percent chord for BWB at side of body',
)

self.add_output('BWB_INPUT_STATION_DIST', shape=num_stations, units='unitless')
self.add_output('BWB_CHORD_PER_SEMISPAN_DIST', shape=num_stations, units='unitless')
self.add_output('BWB_THICKNESS_TO_CHORD_DIST', shape=num_stations, units='unitless')
self.add_output('BWB_LOAD_PATH_SWEEP_DIST', shape=num_stations, units='deg')
self.add_output('BWB_CHORD_PER_SEMISPAN_DIST', shape=num_inp_stations, units='unitless')
self.add_output('BWB_THICKNESS_TO_CHORD_DIST', shape=num_inp_stations, units='unitless')
self.add_output('BWB_LOAD_PATH_SWEEP_DIST', shape=num_inp_stations, units='deg')

def setup_partials(self):
self.declare_partials('BWB_INPUT_STATION_DIST', '*', method='fd', form='forward')

self.declare_partials('BWB_CHORD_PER_SEMISPAN_DIST', '*', method='fd', form='forward')

self.declare_partials(
Expand Down Expand Up @@ -76,18 +75,6 @@ def compute(self, inputs, outputs):
print('Rear_spar_percent_chord must be positive.')
xl_out = root_chord / rear_spar_percent_chord

bwb_input_station_dist = np.array(
self.options[Aircraft.Wing.INPUT_STATION_DIST], dtype=float
)
bwb_input_station_dist = np.where(
bwb_input_station_dist <= 1.0,
bwb_input_station_dist * rate_span + width / wingspan, # if x <= 1.0
bwb_input_station_dist + width / 2.0, # else
)
bwb_input_station_dist[0] = 0.0
bwb_input_station_dist[1] = width / 2.0
outputs['BWB_INPUT_STATION_DIST'] = bwb_input_station_dist

outputs['BWB_CHORD_PER_SEMISPAN_DIST'] = inputs[Aircraft.Wing.CHORD_PER_SEMISPAN_DIST]
idx = np.where(inputs[Aircraft.Wing.CHORD_PER_SEMISPAN_DIST] < 5.0)
outputs['BWB_CHORD_PER_SEMISPAN_DIST'][idx] *= rate_span
Expand Down Expand Up @@ -149,18 +136,11 @@ def setup(self):
desc='RSPSOB: Rear spar percent chord for BWB at side of body',
)

self.add_output('BWB_INPUT_STATION_DIST', shape=3, units='unitless')
self.add_output('BWB_CHORD_PER_SEMISPAN_DIST', shape=3, units='unitless')
self.add_output('BWB_THICKNESS_TO_CHORD_DIST', shape=3, units='unitless')
self.add_output('BWB_LOAD_PATH_SWEEP_DIST', shape=3, units='deg')

def setup_partials(self):
self.declare_partials(
'BWB_INPUT_STATION_DIST',
[
Aircraft.Fuselage.MAX_WIDTH,
],
)
self.declare_partials(
'BWB_CHORD_PER_SEMISPAN_DIST',
[
Expand All @@ -184,6 +164,12 @@ def setup_partials(self):

def compute(self, inputs, outputs):
verbosity = self.options[Settings.VERBOSITY]

num_inp_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DIST])
if num_inp_stations != 3:
if verbosity > Verbosity.BRIEF:
print('Aircraft.Wing.INPUT_STATION_DIST must be 3.')

width = inputs[Aircraft.Fuselage.MAX_WIDTH][0]
wingspan = inputs[Aircraft.Wing.SPAN][0]
length = inputs[Aircraft.Fuselage.LENGTH][0]
Expand All @@ -202,10 +188,6 @@ def compute(self, inputs, outputs):
angle = np.tan(sweep / 57.2958) - 2.0 * (1 - tr_out) / (1 + tr_out) / ar_out
swp_ld_path = 57.2958 * np.arctan(angle)

outputs['BWB_INPUT_STATION_DIST'][0] = 0.0
outputs['BWB_INPUT_STATION_DIST'][1] = width / 2.0
outputs['BWB_INPUT_STATION_DIST'][2] = 1.0

outputs['BWB_CHORD_PER_SEMISPAN_DIST'][0] = length
outputs['BWB_CHORD_PER_SEMISPAN_DIST'][1] = xl_out
outputs['BWB_CHORD_PER_SEMISPAN_DIST'][2] = wing_tip_chord
Expand All @@ -221,19 +203,14 @@ def compute(self, inputs, outputs):
def compute_partials(self, inputs, J):
width = inputs[Aircraft.Fuselage.MAX_WIDTH][0]
wingspan = inputs[Aircraft.Wing.SPAN][0]
length = inputs[Aircraft.Fuselage.LENGTH][0]
root_chord = inputs[Aircraft.Wing.ROOT_CHORD][0]
rear_spar_percent_chord = inputs['Rear_spar_percent_chord'][0]
xl_out = root_chord / rear_spar_percent_chord
wing_tip_chord = 0.06 * wingspan
tc = inputs[Aircraft.Wing.THICKNESS_TO_CHORD][0]
sweep = inputs[Aircraft.Wing.SWEEP][0]
tr_out = wing_tip_chord / xl_out
ar_out = 2.0 * (wingspan - width) / (wing_tip_chord + xl_out)
angle = np.tan(sweep / 57.2958) - 2.0 * (1 - tr_out) / (1 + tr_out) / ar_out
swp_ld_path = 57.2958 * np.arctan(angle)

J['BWB_INPUT_STATION_DIST', Aircraft.Fuselage.MAX_WIDTH] = [0.0, 0.5, 0.0]

J['BWB_CHORD_PER_SEMISPAN_DIST', Aircraft.Fuselage.LENGTH] = [1.0, 0.0, 0.0]
J['BWB_CHORD_PER_SEMISPAN_DIST', Aircraft.Wing.ROOT_CHORD] = [
Expand Down Expand Up @@ -338,16 +315,16 @@ class BWBWingPrelim(om.ExplicitComponent):
"""preliminary calculations of wing aspect ratio for BWB using detailed wing information"""

def initialize(self):
add_aviary_option(self, Aircraft.Wing.NUM_INTEGRATION_STATIONS)
add_aviary_option(self, Aircraft.Wing.INPUT_STATION_DIST)
add_aviary_option(self, Settings.VERBOSITY)

def setup(self):
num_stations = self.options[Aircraft.Wing.NUM_INTEGRATION_STATIONS]
num_inp_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DIST])

add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft')
add_aviary_input(self, Aircraft.Wing.GLOVE_AND_BAT, units='ft**2')
add_aviary_input(self, Aircraft.Wing.SPAN, units='ft')
self.add_input('BWB_INPUT_STATION_DIST', shape=num_stations, units='unitless')
self.add_input('BWB_CHORD_PER_SEMISPAN_DIST', shape=num_stations, units='unitless')
self.add_input('BWB_CHORD_PER_SEMISPAN_DIST', shape=num_inp_stations, units='unitless')

add_aviary_output(self, Aircraft.Wing.AREA, units='ft**2')
add_aviary_output(self, Aircraft.Wing.ASPECT_RATIO, units='unitless')
Expand All @@ -356,8 +333,26 @@ def setup(self):
self.declare_partials('*', '*', method='fd', form='forward')

def compute(self, inputs, outputs):
input_station_dist = inputs['BWB_INPUT_STATION_DIST']
num_stations = len(inputs['BWB_INPUT_STATION_DIST'])
verbosity = self.options[Settings.VERBOSITY]
width = inputs[Aircraft.Fuselage.MAX_WIDTH][0]
wingspan = inputs[Aircraft.Wing.SPAN][0]
if wingspan <= 0.0:
if verbosity > Verbosity.BRIEF:
print('Aircraft.Wing.SPAN must be positive.')
rate_span = (wingspan - width) / wingspan

# This part is repeated in _BWBWing()
num_inp_stations = len(self.options[Aircraft.Wing.INPUT_STATION_DIST])
bwb_input_station_dist = np.array(
self.options[Aircraft.Wing.INPUT_STATION_DIST], dtype=float
)
bwb_input_station_dist = np.where(
bwb_input_station_dist <= 1.0,
bwb_input_station_dist * rate_span + width / wingspan, # if x <= 1.0
bwb_input_station_dist + width / 2.0, # else
)
bwb_input_station_dist[0] = 0.0
bwb_input_station_dist[1] = width / 2.0

glove_and_bat = inputs[Aircraft.Wing.GLOVE_AND_BAT]
width = inputs[Aircraft.Fuselage.MAX_WIDTH]
Expand All @@ -371,19 +366,19 @@ def compute(self, inputs, outputs):
C1 = bwb_chord_per_semispan_dist[0] * span / 2.0
else:
C1 = bwb_chord_per_semispan_dist[0]
if input_station_dist[0] <= 1.1:
Y1 = input_station_dist[0] * span / 2.0
if bwb_input_station_dist[0] <= 1.1:
Y1 = bwb_input_station_dist[0] * span / 2.0
else:
Y1 = input_station_dist[0]
for n in range(1, num_stations):
Y1 = bwb_input_station_dist[0]
for n in range(1, num_inp_stations):
if bwb_chord_per_semispan_dist[n] <= 5.0:
C2 = bwb_chord_per_semispan_dist[n] * span / 2.0
else:
C2 = bwb_chord_per_semispan_dist[n]
if input_station_dist[n] <= 1.1:
Y2 = input_station_dist[n] * span / 2.0
if bwb_input_station_dist[n] <= 1.1:
Y2 = bwb_input_station_dist[n] * span / 2.0
else:
Y2 = input_station_dist[n]
Y2 = bwb_input_station_dist[n]
axp = (Y2 - Y1) * (C1 + C2)
C1 = C2
Y1 = Y2
Expand Down
Loading
Loading