Skip to content

Fix FLOPS Nacelle dimensions to ensure correct scaling with Engine.SCALE_FACTOR - #1314

Open
cmbenne3 wants to merge 27 commits into
OpenMDAO:mainfrom
cmbenne3:issue1281
Open

cmbenne3 wants to merge 27 commits into
OpenMDAO:mainfrom
cmbenne3:issue1281

Conversation

@cmbenne3

@cmbenne3 cmbenne3 commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Aviary does not currently calculate or output scaled Nacelle dimensions (which would be different to the user specified inputs when Engine.SCALE_FACTOR != 1.0)
Aerodynamic predictions remain unchanged as wetted area and characteristic length account for engine scaling already. Fineness ratio is unaffected as both numerator and denominator are scaled by same factor.

Mass subsystem will now give different (but correct) results - Nacelle geometry impacts:

  • Landing Gear Length (and therefore mass)

Other subsystems affected by nacelle geometry already had engine scale factor as an input - this input has now been removed since it is handled in the geometry subsystem:

  • Nacelle Mass
  • Engine Starter Mass
  • Anti Icing Mass

Any FLOPS based models using the propulsion/propeller models will be affected - previously an unscaled diameter was used for calculating the installation losses.

  • Propeller Performance Modelling

2 new variables are created:
Aircraft.Nacelle.REFERENCE_AVG_DIAMETER
Aircraft.Nacelle.REFERENCE_AVG_LENGTH

The existing variables are converted to outputs from the flops based premission geometry subsystem.
Aircraft.Nacelle.AVG_DIAMETER
Aircraft.Nacelle.AVG_LENGTH

GASP-based modelling is unaffected by these changes.

Related Issues

Backwards incompatibilities

All FLOPS based Aviary models will need to be updated to use the new 'reference' nacelle dimensions as inputs.
Answers will change if Engine.SCALE_FACTOR != 1.0 and Landing gear lengths are calculated by Aviary. In these cases the overall mass of the landing gear, and therefore the aircraft will be corrected.

All tests are passing so apparently we have no examples in the repo where we scale the engine and don't overwrite the landing gear calculations.

AI Usage

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

@cmbenne3
cmbenne3 marked this pull request as ready for review September 25, 2026 20:03
Bennett added 5 commits September 25, 2026 16:35
…LE_FACTOR, this variable is now an input to the Nacelle calculations replacing the scaled and reference SLS thrust variables
…bles, and add useful geometry outputs to the geometry report
@jkirk5

jkirk5 commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

One request, can you add a new function to the preprocessor? Something like "deprecations" called right at the start of preprocess_options, which checks if the diam & length are set, and warns the user for anything other than QUIET verbosity.

Example:

    warnings.warn(
        "Aircraft.Nacelle.AVG_DIAMETER has been changed to Aircraft.Nacelle.REFERENCE_AVG_DIAMETER. To avoid overriding scaled nacelle dimensions update your input file to the new variable name.",
        category=DeprecationWarning,
    ) # Added v1.0.2

The comment is so we can easily check how old the warning is and if it is ready to remove.

@cmbenne3

cmbenne3 commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

One request, can you add a new function to the preprocessor? Something like "deprecations" called right at the start of preprocess_options, which checks if the diam & length are set, and warns the user for anything other than QUIET verbosity.

Example:

    warnings.warn(
        "Aircraft.Nacelle.AVG_DIAMETER has been changed to Aircraft.Nacelle.REFERENCE_AVG_DIAMETER. To avoid overriding scaled nacelle dimensions update your input file to the new variable name.",
        category=DeprecationWarning,
    ) # Added v1.0.2

The comment is so we can easily check how old the warning is and if it is ready to remove.

I have added this function, and in testing it I realized that all old files would outright fail as fineness rato and characteristic lengths would calculate to 0 even though the user is overriding the nacelle values. To fix this i created a new nacelle prelim component that just scales the nacelle dimensions, and simplified the characteristic lengths to just use the scaled geometry.
@jkirk5 and @Kenneth-T-Moore please re-review since I've changed a few files...

@jkirk5
jkirk5 added this pull request to the merge queue Oct 9, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 9, 2026
@cmbenne3

cmbenne3 commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor Author

2 tests were failing in the merge queue:

Traceback (most recent call last):
File "/home/runner/work/Aviary/Aviary/aviary/validation_cases/benchmark_tests/test_bench_throttle_allocation.py", line 179, in test_multiengine_dynamic
assert_near_equal(alloc_cruise[0], 0.33626162, tolerance=1e-2)
File "/home/runner/work/Aviary/Aviary/.openmdao-pixi/.pixi/envs/py311/lib/python3.11/site-packages/openmdao/utils/assert_utils.py", line 733, in assert_near_equal
raise ValueError('actual %s, desired %s, %s error %s, tolerance %s'
ValueError: actual [0.33122292], desired [0.33626162], rel error 0.014984450573982188, tolerance 0.01

..../aviary/validation_cases/benchmark_tests/test_bench_throttle_allocation.py:ThrottleAllocationTestcase.test_multiengine_static [cruise_allocation] ... FAIL (00:00:31.79, 965 MB)
Traceback (most recent call last):
File "/home/runner/work/Aviary/Aviary/aviary/validation_cases/benchmark_tests/test_bench_throttle_allocation.py", line 138, in test_multiengine_static
assert_near_equal(alloc_cruise[0], 0.34035731, tolerance=1e-2)
File "/home/runner/work/Aviary/Aviary/.openmdao-pixi/.pixi/envs/py311/lib/python3.11/site-packages/openmdao/utils/assert_utils.py", line 733, in assert_near_equal
raise ValueError('actual %s, desired %s, %s error %s, tolerance %s'
ValueError: actual [0.33529271], desired [0.34035731], rel error 0.014880234751525933, tolerance 0.01

I have manually run and checked these problems. The Throttle allocation tests have 4 engines, and use the nacelle mass component. As a result of the changes to correct nacelle scaling the nacelle mass is now estimated to be 300lbs lighter than previously. This results in a roughly 1200lb difference in structural mass for the aircraft:
Engine scale factor:
image

Nacelle mass in premission - these are essentially directly proportional to engine scale factor now:
image

Structural mass totals:
image
Nacelles total: 2448 vs correct 1283 lbm.

These mass totals significantly affect the overall gross mass of the aircraft so the tests have been updated with new throttle allocation values.

See attached for prob.model.list_vars() for main and issue1281 branch for the two failing tests showing why the tests yield different values.
throttle_allocation_testing_static.txt
throttle_allocation_testing_dynamic.txt
throttle_allocation_testing_issue1281_static.txt
throttle_allocation_testing_issue1281_dynamic.txt

This branch has not been deployed

No deployments
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.

Nacelle physical dimensions do not scale with Engine.Scale_Factor

3 participants