Skip to content

BWB Updates - #1259

Merged
jkirk5 merged 40 commits into
OpenMDAO:mainfrom
Kenneth-T-Moore:bwb1
Aug 21, 2026
Merged

BWB Updates#1259
jkirk5 merged 40 commits into
OpenMDAO:mainfrom
Kenneth-T-Moore:bwb1

Conversation

@Kenneth-T-Moore

@Kenneth-T-Moore Kenneth-T-Moore commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

  1. Redefined Aircraft.Wing.ROOT_CHORD to go from leading edge to trailing edge instead of ending at the rear spar.
  2. Added hierarchy variables for Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_ROOT and Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_CENTERLINE.
  3. Cleaned up BWB detailed wing so that they don't require a placeholder value at the centerline.
  4. Added support for specifying detailed wings that start at the centerline. This was supported in FLOPS through the declaration of a higher index in "NESOB" that defines the root index of the wing. The NESOB namelist input is now implemented in Aviary as Aircraft.BWB.WING_ROOT_INDEX.
  5. Moved the CD and CL timeseries out of the phase builders and into the aero builder, since the components that compute them are added by the aero subsystem.
  6. Restored a couple of derivative checks that were commented out in the BWB components. These components mix complex step with some analytic sparse declarations.
  7. Fixed a small bug in the number of bays calculation that effectively rounded down instead of up.
  8. Fixed some of the centerline/root replacement values for the NESOB=0 case.

Related Issues

  • Resolves #

Backwards incompatibilities

None

AI Usage

Disclose any AI usage in this PR, including models used and files affected.

@jkirk5 jkirk5 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change diverges from FLOPS in a pretty significant way by redefining what wing_root refers to. It's not clear to me why this was necessary?

historical_name={
'GASP': 'INGASP.CROOTW',
'FLOPS': 'WTIN.XLW',
'FLOPS': 'WTIN.XLOUT',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XLOUT isn't a FLOPS input, but instead an intermediate calculated value (not part of WTIN namelist). Put "XLOUT" as a comment here for now


ref_diameter = 0.5 * (max_height + max_width)
planform_area = max_width * (length + root_chord / rear_spar_percent_chord) / 2.0
planform_area = max_width * (length + root_chord) / 2.0

@jkirk5 jkirk5 Aug 17, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change means that Aviary doesn't match the FLOPS equations directly anymore, and messes up converting FLOPS files. root_chord, previously XLW (and a FLOPS input) has been redefined to match XLOUT (an intermediate FLOPS calculation) which makes replicating a FLOPS case require hand-calculating this new value and adding it to the CSV. Why?

add_aviary_input(self, Aircraft.Fuselage.MAX_WIDTH, units='ft')
add_aviary_input(self, Aircraft.Fuselage.MAX_HEIGHT, units='ft')
add_aviary_input(self, Aircraft.Wing.ROOT_CHORD, units='ft')
self.add_input(

@jkirk5 jkirk5 Aug 17, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why add a variable for RSPSOB to the hierarchy if we are simplifying the equations to no longer use it?

@Kenneth-T-Moore

Copy link
Copy Markdown
Member Author

This change diverges from FLOPS in a pretty significant way by redefining what wing_root refers to. It's not clear to me why this was necessary?

This was motivated by a confusion about Aircraft.Wing.ROOT_CHORD as defined for the BWB, which was not the root chord because it stopped at the rear spar instead of the trailing edge, meaning it is not the chord at that location.

I just took another look at these variables in the Fortran code, and I think the correct way to address this is to add WTIN.XLW as a new separate variable in the hierarchy. This is defined in FLOPS as the "Side Wall Length". It is computed by both simple and detailed cabin design. I should restore the output there to XLW, and then compute root chord in a separate simple component (XLOUT, not a FLOPS input). This will restore the ability to specify XLW (which would become Aircraft.Fuselage.SIDEWALLLENGTH) in the csv file.

Comment on lines +3225 to +3235
add_meta_data(
Aircraft.Fuselage.CABIN_SIDEWALL_LENGTH,
meta_data=_MetaData,
historical_name={
'GASP': None,
'FLOPS': 'WTIN.XLW',
},
units='ft',
desc='Outboard wall of the passenger cabin in a BWB.',
default_value=0.0,
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't look like this variable gets used anywhere? Having a variable in the hierarchy that does nothing is worse than not having it at all in my opinion

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't look like this variable gets used anywhere? Having a variable in the hierarchy that does nothing is worse than not having it at all in my opinion

Done. I forgot to remove that when we decided to postpone supporting this way f specifying the model.

@jkirk5
jkirk5 added this pull request to the merge queue Aug 21, 2026
Merged via the queue into OpenMDAO:main with commit ff33ebd Aug 21, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants