Skip to content

GASP based mass subsystem for BWB#749

Merged
jkirk5 merged 148 commits intoOpenMDAO:mainfrom
xjjiang:gasp_bwb_mass
Jun 18, 2025
Merged

GASP based mass subsystem for BWB#749
jkirk5 merged 148 commits intoOpenMDAO:mainfrom
xjjiang:gasp_bwb_mass

Conversation

@xjjiang
Copy link
Copy Markdown
Contributor

@xjjiang xjjiang commented Apr 24, 2025

Summary

  • For design load, variable Aircraft.Wing.LOADING is replaced by Mission.Design.GROSS_MASS / Aircraft.Wing.EXPOSED_WING_AREA. As a result, BWBLoadSpeeds and BWBLoadFactors replace LoadSpeeds and LoadFactors. A new group BWBDesignLoadGroup is created to include these two new components.

  • Equip And Useful Load

    • EquipAndUsefulLoadMass is a big components that includes the computations of 19 items. Ideally, each of them should be done in its own component and one group has them all. This is a long time goal. For now, it is separated to two components EquipMassPartial and UsefulLoadMass and air conditioning and furnishing masses are singled out because they need to be modified for BWB.
    • A new variable Aircraft.Electrical.SYSTEM_MASS_PER_PASSENGER is added which corresponds to CW(15) in GASP. Its value is different for conventional aircraft and BWB.
    • Two new classes BWBACMass and BWBFurnishingMass are added to equipment_and_useful_load.py. Unit tests for BWB model are created. Our outputs match with GASP run result.
    • Note: GASP Fortran code has new updates that are not included in Aviary. We will update Aviary for furnishing mass but other masses need to be checked.
    • Note: EquipAndUsefulLoadMass has implementation errors for the computations of Aircraft.APU.MASS, Aircraft.Avionics.MASS, Aircraft.AntiIcing.MASS, Aircraft.Furnishings.MASS, and Aircraft.Design.EMERGENCY_EQUIPMENT_MASS. As a result, Aviary always uses user provided masses (not empirical formulas). We should use Aviary's feature of overriding for thf overridinose variables. All the outputs of 9 unit tests in test_mass_summation.py` are updated.
  • Wing Mass Model

    • For wing mass, variable Aircraft.Wing.SPAN has to deduct cabin width (i.e. Aircraft.Fuselage.AVG_DIAMETER). As a result, WingMassSolve component is replaced by BWBWingMassSolve component. BWBWingMassGroup is created to pair BWBWingMassSolve and WingMassTotal.
    • In geometry/gasp_based/wing.py, Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX is moved out of WingParameters class. In stead, a class WingVolume is created to compute Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX. For BWB, another class BWBWingVolume is created for the same purpose. The algorithm is quite different for BWB.
    • In geometry/gasp_based/wing.py, WingFold class is split to two: WingFoldArea and WingFoldVolume. The first computes Aircraft.Wing.FOLDING_AREA and the second computes Aircraft.Fuel.WING_VOLUME_GEOMETRIC_MAX. For BWB, another class BWBWingFoldVolume is created to do the same job. Note that for BWB, BWBWingFoldVolume uses the result in BWBWingVolume.
    • A BWBWingGroup is created to put all these pieces together.
    • Unit tests are added in geometry/gasp_based/test/test_wing.py to make sure that the Aviary result is the same as GASP model.
  • Fuel Model

    • FuelMassGroup groups all fuel related components. In case of BWB, BWBFuselageMass is in place of FuselageMass. This group has a nonlinear solver. In order for it to converge, one must provide good initial guesses for the inputs. Otherwise, it may claim that convergence is reached but gives rise to a strange solution.
    • The computation in BodyTankCalculations of fuel.py can not be matched in GASP Fortran code. It is not very clear if it is correct. It is possible that extra_fuel_volume becomes negative. I added code to make sure that it is always positive.
    • For fuselage mass, the empirical weight equation is quite different. It is computed in FuselageAndStructMass component. This component has two parts: fuselage mass and structural mass. In order to reuse the code for structural mass, this component is split into two components: FuselageMass and StructMass. For BWB, FuselageMass is replaced by BWBFuselageMass.
    • Note: The historic name of Mission.Design.FUEL_MASS_REQUIRED is INGASP.WFAREQ, but WFAREQ includes fuel margin in GASP while Mission.Design.FUEL_MASS_REQUIRED doesn't. The historic name of Mission.Summary.TOTAL_FUEL_MASS is INGASP.WFA, but does not include fuel margin in GASP while Mission.Design.FUEL_MASS_REQUIRED does.
    • Note: GASP Fortran code has items that are not implemented in Aviary (e.g. tail boom support, tip tank weight, fuselage acoustic treatment, pylon, acoustic treatment).
  • In MassPremission group, a BWB mass group is built. Unit test is added for BWB model.

  • Comparison to GASP model

Aviary     GASP     Observation
Aircraft.Nacelle.AVG_DIAMETER 7.18 DBARN 6.95 Different algorithms. Aviary use Aircraft.Engine.REFERENCE_DIAMETER
Aircraft.Design.FIXED_USEFUL_LOAD 5972 WFUL 5775 different unit weight of pilots and attendents
Aircraft.Wing.HIGH_LIFT_MASS 1069 WHLDEV 974 In GAST, wing loading is a variable, but in Aviary, it is a constant
Aircraft.Wing.MASS 7056 WW 6962 GASP includes winglet (7645 - 682.6)
Mission.Design.FUEL_MASS 35320 WFADES 33268 BodyTank algorithm is different
Aircraft.Fuel.TOTAL_CAPACITY 36836 WFAMAX 33268 BodyTank algorithm is different

Related Issues

  • Resolves #

Backwards incompatibilities

None

New Dependencies

None

xjjiang and others added 30 commits April 23, 2025 17:34
add BWBWingMassSolve, BWBWingMassGroup classes and associated unit tests.
… Add BWBFuselageMass and the associated unit tests.
….Design.FUEL_MASS_REQUIRED does not include fuel margin. In GAST, WFA does not inlcude fuel margin. In Aviary, Mission.Summary.TOTAL_FUEL_MASS include fuel margin.
…_performance.py. add smooth_max and d_smooth_max.
@xjjiang xjjiang marked this pull request as ready for review June 3, 2025 00:29
@xjjiang xjjiang changed the title [Draft] GASP based mass subsystem for BWB GASP based mass subsystem for BWB Jun 3, 2025
Copy link
Copy Markdown
Contributor

@jkirk5 jkirk5 left a comment

Choose a reason for hiding this comment

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

Documentation is very thorough, thanks for taking the time to add that detail
I have some minor change requests

Comment thread aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py Outdated
Comment thread aviary/subsystems/mass/gasp_based/equipment_and_useful_load.py Outdated
Comment thread aviary/variable_info/variable_meta_data.py Outdated
Comment thread aviary/variable_info/variable_meta_data.py Outdated
@jkirk5 jkirk5 merged commit 119975f into OpenMDAO:main Jun 18, 2025
6 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.

3 participants