Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
85fd1a6
Refactor bwb detailed wing so that user doesn't have to prepend the t…
Kenneth-T-Moore Jun 5, 2026
c3d7f8e
Basics work
Kenneth-T-Moore Jun 5, 2026
df9cc47
tests pass
Kenneth-T-Moore Jun 5, 2026
9e55744
Merge branch 'main' of github.com:OpenMDAO/Aviary into bwb1
Kenneth-T-Moore Jun 11, 2026
6cf2b4a
Updated BWB root chord definition to go all the way to the trailing e…
Kenneth-T-Moore Jun 12, 2026
80535a8
Merge branch 'main' of github.com:OpenMDAO/Aviary into bwb1
Kenneth-T-Moore Jul 15, 2026
d6a93dd
Several BWB updates that come from running a BWB case in flops
Kenneth-T-Moore Jul 28, 2026
2873b0f
Some more fixes, but we need to add support for NESOB
Kenneth-T-Moore Aug 3, 2026
e78bbfc
NESOB implemented; getting both ways to work
Kenneth-T-Moore Aug 4, 2026
f284472
more updates
Kenneth-T-Moore Aug 4, 2026
5685ef8
debug
Kenneth-T-Moore Aug 4, 2026
cbe7966
debug
Kenneth-T-Moore Aug 4, 2026
e1972c1
getting close
Kenneth-T-Moore Aug 4, 2026
53e4e48
all but one pass
Kenneth-T-Moore Aug 4, 2026
379d91b
debugging
Kenneth-T-Moore Aug 4, 2026
09535f3
adjust for the extra bay
Kenneth-T-Moore Aug 4, 2026
2a8fc12
a couple more fixes
Kenneth-T-Moore Aug 5, 2026
d3143ac
Added file for test
Kenneth-T-Moore Aug 5, 2026
158074a
more tests
Kenneth-T-Moore Aug 6, 2026
be2a39a
Merge branch 'bwb1' of github.com:Kenneth-T-Moore/aviary into bwb1
Kenneth-T-Moore Aug 6, 2026
a1b48e4
Don't include cd and cl in the timeseries for external models, since …
Kenneth-T-Moore Aug 6, 2026
c80930d
Added test
Kenneth-T-Moore Aug 10, 2026
d57ca07
Replaced image
Kenneth-T-Moore Aug 11, 2026
645f484
docs and one more test
Kenneth-T-Moore Aug 11, 2026
57e4d34
Merge branch 'bwb1' of github.com:Kenneth-T-Moore/aviary into bwb1
Kenneth-T-Moore Aug 11, 2026
d29e0f4
Merge branch 'bwb1' of github.com:Kenneth-T-Moore/aviary into bwb1
Kenneth-T-Moore Aug 11, 2026
eb22ab9
Updated a var in the docs
Kenneth-T-Moore Aug 11, 2026
b146322
small doc fix
Kenneth-T-Moore Aug 11, 2026
75b9762
RUFF
Kenneth-T-Moore Aug 11, 2026
b986b23
RUFF
Kenneth-T-Moore Aug 11, 2026
d319b3b
Merge branch 'main' of github.com:OpenMDAO/Aviary into bwb1
Kenneth-T-Moore Aug 11, 2026
20ecec6
Merge branch 'main' into bwb1
Kenneth-T-Moore Aug 11, 2026
c36b5b7
Merge branch 'main' into bwb1
Kenneth-T-Moore Aug 12, 2026
a5a1c32
Merge branch 'main' of github.com:OpenMDAO/Aviary into bwb1
Kenneth-T-Moore Aug 18, 2026
e9f26a4
A little cleanup
Kenneth-T-Moore Aug 18, 2026
b8d6be2
Merge branch 'bwb1' of github.com:Kenneth-T-Moore/aviary into bwb1
Kenneth-T-Moore Aug 18, 2026
96d0f87
small fix
Kenneth-T-Moore Aug 19, 2026
33c8ea2
Conflict resolved
Kenneth-T-Moore Aug 20, 2026
b0e6348
Review:Jason
Kenneth-T-Moore Aug 20, 2026
64665db
One last fix.
Kenneth-T-Moore Aug 20, 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
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,8 @@
"\n",
"glue_variable(get_variable_name(Aircraft.BWB.NUM_BAYS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Fuselage.SIMPLE_LAYOUT), md_code=True)\n",
"\n",
"Rear_spar_percent_chord = get_all_non_aviary_names(BWBFuselagePrelim, include_in_out='in')[0]\n",
"glue_variable('Rear_spar_percent_chord', Rear_spar_percent_chord, md_code=True)"
"glue_variable(get_variable_name(Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_ROOT), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_CENTERLINE), md_code=True)"
]
},
{
Expand All @@ -165,7 +164,7 @@
"\n",
"![Fuselage size](./images/BWB_FLOPS_Fuselage_Simple_Geom.png)\n",
"\n",
"Variable {glue:md}`Rear_spar_percent_chord` serves as the ratio of fuselage length and compartment length. It says that the rear spar is mounted at the side of fuselage which is 70% (default) of fuselage length from the leading edge. {glue:md}`Rear_spar_percent_chord` is hard coded for now, but can be easily converted to an Aviary variable.\n",
"Variable {glue:md}`Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_ROOT` serves as the ratio of fuselage length and compartment length at the wing root, while variable {glue:md}`Aircraft.BWB.REAR_SPAR_PERCENT_CHORD_CENTERLINE` serves as the ratio of fuselage length and compartment length at the centeline. The default values for each of these is 0.7.\n",
"\n",
"The detailed layout involves more details like the number of passengers, seat pitch and seat abreast. Fuselage length and width are no longer inputs but outputs. If you have those data, it is a better choice.\n",
"\n",
Expand Down Expand Up @@ -395,7 +394,8 @@
"glue_variable(get_variable_name(Aircraft.Fuselage.CABIN_AREA), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Fuselage.MAX_WIDTH), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Fuselage.MAX_HEIGHT), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Wing.ROOT_CHORD), md_code=True)"
"glue_variable(get_variable_name(Aircraft.Wing.ROOT_CHORD), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.BWB.WING_ROOT_INDEX), md_code=True)"
]
},
{
Expand All @@ -419,30 +419,55 @@
"- {glue:md}`Aircraft.Wing.CHORD_PER_SEMISPAN_DISTRIBUTION`\n",
"- {glue:md}`Aircraft.Wing.LOAD_PATH_SWEEP_DISTRIBUTION`\n",
"\n",
"2. Suppose you have a FLOPS model with detailed wings. For example, you have:\n",
"2. FLOPS allows you to define the BWB detailed wing geometry from either the wing root or from the aircraft centerline. To tell FLOPS where the wing actually starts, the fueslage namelist input `NESOB` should contain the index that corresponds to the location in the detailed geometry arrays that contains the values at the wing root. This parameter is also available in Aviary as {glue:md}`Aircraft.BWB.WING_ROOT_INDEX`, though keep in mind that Aviary indexing starts at 0 instead of 1.\n",
"\n",
"3. When converting a FLOPS model, the Aviary detailed wing definition will look like the FLOPS distribution. This one starts at the centerline:\n",
"\n",
"```\n",
"NETAW = 4,\n",
"ETAW = 0.0, .2075, .6927, 1.000,\n",
"CHD = 48.25, 33.20, 14.19, 3.220,\n",
"TOC = 0.125, 0.125, 0.076, 0.060,\n",
"SWL = 0.0, 0.0, 17.0\n",
"\n",
"&FUSEIN\n",
"NESOB = 2\n",
"```\n",
"\n",
"Note that `SWL` has one entry less than the other variables. This is because it measures the sweep angles between distribution points. The corresponding Aviary inputs should be:\n",
"\n",
"```\n",
"aircraft:wing:input_station_distribution,0.0,0.0,0.2075,0.6927,1.0,unitless\n",
"aircraft:wing:chord_per_semispan_distribution,-1.0,48.25,33.2,14.19,3.22,unitless\n",
"aircraft:wing:thickness_to_chord_distribution,-1.0,0.125,0.125,0.076,0.06,unitless\n",
"aircraft:wing:load_path_sweep_distribution,0.0,0.0,0.0,17.0,deg\n",
"aircraft:blended_wing_body_design:wing_root_index,1,unitless\n",
"aircraft:wing:input_station_distribution,0.0,0.2075,0.6927,1.0,unitless\n",
"aircraft:wing:chord_per_semispan_distribution,48.25,33.2,14.19,3.22,unitless\n",
"aircraft:wing:thickness_to_chord_distribution,0.125,0.125,0.076,0.06,unitless\n",
"aircraft:wing:load_path_sweep_distribution,0.0,0.0,17.0,deg\n",
"```\n",
"\n",
"Note that an extra entry is added with value of `0.0` or `-1.0`. These variables will be updated by Aviary when it runs. The reason for an extra entry is because FLOPS variables started the distribution of input points from wing root. For conventional aircraft, it is assumed that it is the same as starting from the centerline. But for BWB aircraft, they are different and we have to add an extra point to count for the segment from centerline to wing root. They are set to `0.0` or `-1.0` in the input file and are updated during the run.\n",
"Likewise, this wing definition starts at the wing root, and the Aviary inputs follow:\n",
"\n",
"```\n",
"NETAW = 4,\n",
"ETAW = .2075, .6927, 1.000,\n",
"CHD = 33.20, 14.19, 3.220,\n",
"TOC = 0.125, 0.076, 0.060,\n",
"SWL = 0.0, 17.0\n",
"\n",
"&FUSEIN\n",
"NESOB = 1\n",
"```\n",
"\n",
"```\n",
"aircraft:blended_wing_body_design:wing_root_index,0,unitless\n",
"aircraft:wing:input_station_distribution,0.2075,0.6927,1.0,unitless\n",
"aircraft:wing:chord_per_semispan_distribution,33.2,14.19,3.22,unitless\n",
"aircraft:wing:thickness_to_chord_distribution,0.125,0.076,0.06,unitless\n",
"aircraft:wing:load_path_sweep_distribution,0.0,17.0,deg\n",
"```\n",
"\n",
"3. BWB aircraft has an non-pressurized aftbody in addition to the pressurized centerbody. Its mass {glue:md}`Aircraft.Wing.BWB_AFTBODY_MASS` is added to wing mass {glue:md}`Aircraft.Wing.MASS`.\n",
"4. The BWB aircraft has a non-pressurized aftbody in addition to the pressurized centerbody. Its mass {glue:md}`Aircraft.Wing.BWB_AFTBODY_MASS` is added to wing mass {glue:md}`Aircraft.Wing.MASS`.\n",
"\n",
"4. In FLOPS, there are several ways to compute the cabin layout. Aviary implemented two of them. This is set by an Aviary variable {glue:md}`Aircraft.Fuselage.SIMPLE_LAYOUT`.\n",
"5. In FLOPS, there are several ways to compute the cabin layout. Aviary implemented two of them. This is set by an Aviary variable {glue:md}`Aircraft.Fuselage.SIMPLE_LAYOUT`.\n",
"\n",
"If {glue:md}`Aircraft.Fuselage.SIMPLE_LAYOUT` is true, the user should provide fuselage length as input and Aviary will compute the passenger compartment length in the case of conventional aircraft. In the case of BWB aircraft, the user should provide fuselage length, width, leading edge sweek angle and sidebody thickness to chord ratio. Aviary will conpute the passenger compartment length, wing root chord, cabin area, fuselage height, and number of bays.\n",
"\n",
Expand All @@ -462,7 +487,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "base",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -476,7 +501,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.9"
"version": "3.12.3"
}
},
"nbformat": 4,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ aircraft:fuel:wing_reference_capacity,0.0,lbm
aircraft:fuel:wing_reference_capacity_term_a,0.0,unitless
aircraft:fuel:wing_reference_capacity_term_b,0.0,unitless
aircraft:furnishings:mass_scaler,1.118,unitless
aircraft:fuselage:height_to_width_ratio,0.1792,unitless
aircraft:fuselage:sidebody_thickness_to_chord,0.1792,unitless
aircraft:fuselage:laminar_flow_lower,0.0,unitless
aircraft:fuselage:laminar_flow_upper,0.0,unitless
Expand Down Expand Up @@ -142,17 +143,17 @@ aircraft:wing:airfoil_technology,2.0,unitless
# aircraft:wing:aspect_ratio,5.4252,unitless
# aircraft:wing:aspect_ratio_reference,0.0,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan_distribution,-1.0,48.25,33.2,18.97,14.19,10.2,3.22,unitless
aircraft:wing:chord_per_semispan_distribution,48.25,33.2,18.97,14.19,10.2,3.22,unitless
aircraft:wing:composite_fraction,0.85,unitless
aircraft:wing:control_surface_area_ratio,0.3,unitless
aircraft:wing:detailed_wing,True,unitless
aircraft:wing:dihedral,3.0,deg
aircraft:wing:glove_and_bat,1230.5,ft**2
aircraft:wing:input_station_distribution,0.0,0.0,0.2075,0.415,0.6927,0.928,1.0,unitless
aircraft:wing:input_station_distribution,0.0,0.2075,0.415,0.6927,0.928,1.0,unitless
aircraft:wing:laminar_flow_lower,0.0,unitless
aircraft:wing:laminar_flow_upper,0.0,unitless
aircraft:wing:load_distribution_control,2.0,unitless
aircraft:wing:load_path_sweep_distribution,0.0,0.0,0.0,17.0,17.0,17.0,deg
aircraft:wing:load_path_sweep_distribution,0.0,0.0,17.0,17.0,17.0,deg
aircraft:wing:mass_scaler,1.0,unitless
aircraft:wing:max_camber_at_70_semispan,2.0,unitless
aircraft:wing:misc_mass_scaler,1.0,unitless
Expand All @@ -168,7 +169,7 @@ aircraft:wing:surface_control_mass_scaler,1.0,unitless
aircraft:wing:sweep,35.7,deg
aircraft:wing:taper_ratio,0.311,unitless
aircraft:wing:thickness_to_chord,0.11,unitless
aircraft:wing:thickness_to_chord_distribution,-1.0,0.125,0.125,0.076,0.076,0.076,0.06,unitless
aircraft:wing:thickness_to_chord_distribution,0.125,0.125,0.076,0.076,0.076,0.06,unitless
aircraft:wing:thickness_to_chord_reference,0.0,unitless
aircraft:wing:ultimate_load_factor,3.75,unitless
aircraft:wing:var_sweep_mass_penalty,0.0,unitless
Expand Down Expand Up @@ -255,7 +256,6 @@ CONFIN.WSR,0.0
ENGDIN.IFILL,2
ENGDIN.MAXCR,1
ENGDIN.NGPRT,1
FUSEIN.TCF,0.1792
FUSEIN.XLW,50.0
MISSIN.ACTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
MISSIN.ADTAB,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ 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:sidebody_thickness_to_chord,0.11,unitless
aircraft:fuselage:height_to_width_ratio,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 Expand Up @@ -127,14 +128,14 @@ aircraft:vertical_tail:wetted_area_scaler,1.0,unitless
aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless
aircraft:wing:airfoil_technology,2.0,unitless
aircraft:wing:bending_material_mass_scaler,1.0,unitless
aircraft:wing:chord_per_semispan_distribution,-1.0,58.03,0.4491,0.3884,0.3317,0.2886,0.2537,0.2269,0.2121,0.1983,0.1843,0.1704,0.1565,0.1426,0.1287,unitless
aircraft:wing:chord_per_semispan_distribution,58.03,0.4491,0.3884,0.3317,0.2886,0.2537,0.2269,0.2121,0.1983,0.1843,0.1704,0.1565,0.1426,0.1287,unitless
aircraft:wing:composite_fraction,1,unitless
aircraft:wing:control_surface_area_ratio,0.333,unitless
aircraft:wing:detailed_wing,True,unitless
aircraft:wing:dihedral,3.0,deg
aircraft:wing:glove_and_bat,121.05,ft**2
aircraft:wing:input_station_distribution,0.0,0.35,0.4,0.45,0.5,0.55,0.6,0.6499,0.7,0.75,0.8,0.85,0.8999,0.95,1,unitless
aircraft:wing:load_path_sweep_distribution,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,42.9,42.9,42.9,42.9,42.9,42.9,deg
aircraft:wing:input_station_distribution,0.35,0.4,0.45,0.5,0.55,0.6,0.6499,0.7,0.75,0.8,0.85,0.8999,0.95,1,unitless
aircraft:wing:load_path_sweep_distribution,0.0,0.0,0.0,0.0,0.0,0.0,0,42.9,42.9,42.9,42.9,42.9,42.9,deg
aircraft:wing:load_distribution_control,2.0,unitless
aircraft:wing:mass_scaler,1,unitless
aircraft:wing:max_camber_at_70_semispan,2,unitless
Expand All @@ -151,7 +152,7 @@ aircraft:wing:sweep,35.7,deg
aircraft:wing:taper_ratio,0.311,unitless
aircraft:wing:thickness_to_chord,0.11,unitless
aircraft:wing:thickness_to_chord_reference,0.11,unitless
aircraft:wing:thickness_to_chord_distribution,-1.0,0.15,0.1132,0.0928,0.0822,0.0764,0.0742,0.0746,0.0758,0.0758,0.0756,0.0756,0.0758,0.076,0.076,unitless
aircraft:wing:thickness_to_chord_distribution,0.15,0.1132,0.0928,0.0822,0.0764,0.0742,0.0746,0.0758,0.0758,0.0756,0.0756,0.0758,0.076,0.076,unitless
aircraft:wing:ultimate_load_factor,3.75,unitless
aircraft:wing:var_sweep_mass_penalty,0.0,unitless
aircraft:wing:wetted_area_scaler,1.0,unitless
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ aircraft:anti_icing:mass_scaler,1.0,unitless
aircraft:apu:mass_scaler,1.0,unitless
aircraft:avionics:mass_scaler,1.0,unitless
aircraft:blended_wing_body_design:detailed_wing_provided,False,unitless
aircraft:blended_wing_body_design:max_bay_width,12.0,ft
aircraft:blended_wing_body_design:passenger_leading_edge_sweep,45,deg
aircraft:canard:area,0.0,ft**2
aircraft:canard:aspect_ratio,0.0,unitless
Expand Down Expand Up @@ -135,7 +136,7 @@ aircraft:wing:control_surface_area_ratio,0.333,unitless
aircraft:wing:detailed_wing,True,unitless
aircraft:wing:dihedral,3.0,deg
aircraft:wing:glove_and_bat,121.05,ft**2
aircraft:wing:input_station_distribution,0.0,0.5,1.0,unitless
aircraft:wing:input_station_distribution,0.5,1.0,unitless
aircraft:wing:load_distribution_control,2.0,unitless
aircraft:wing:mass_scaler,1,unitless
aircraft:wing:max_camber_at_70_semispan,2,unitless
Expand Down
20 changes: 16 additions & 4 deletions aviary/subsystems/aerodynamics/aerodynamics_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -713,10 +713,22 @@ def get_parameters(self, aviary_inputs=None, user_options=None, subsystem_option

def get_timeseries(self, aviary_inputs=None, user_options=None, subsystem_options=None):
"""Call get_timeseries() on all engine models and return combined result."""
timeseries_vars = [
Dynamic.Vehicle.DRAG_COEFFICIENT,
Dynamic.Vehicle.LIFT_COEFFICIENT,
]
if subsystem_options is None:
subsystem_options = {}

timeseries_vars = []

try:
method = subsystem_options['method']
except KeyError:
method = None

if method != 'external':
timeseries_vars = [
Dynamic.Vehicle.DRAG_COEFFICIENT,
Dynamic.Vehicle.LIFT_COEFFICIENT,
]

return timeseries_vars

def get_pre_mission_bus_variables(self, aviary_inputs=None, mission_info=None):
Expand Down
Loading
Loading