Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
a1206fc
SAWE RP-8 for FLOPS mass
jkirk5 Dec 12, 2025
1358bb7
additional fixes for premission tests
jkirk5 Dec 16, 2025
2a15d27
fixed tests
jkirk5 Dec 17, 2025
6e1e2ba
new variable name test - used AI
jkirk5 Dec 19, 2025
096fb81
fixed mass report formatting making it impossible to find variables
jkirk5 Dec 19, 2025
c5eabfd
missing find+replaces
jkirk5 Dec 22, 2025
d8b3922
variable name capitalization typo
jkirk5 Dec 22, 2025
2d1d6f7
missed find & replaces
jkirk5 Dec 31, 2025
2010cbd
mass docs update
jkirk5 Dec 31, 2025
9f138b4
Merge branch 'main' into reports
Kenneth-T-Moore Jan 6, 2026
21034ed
mass report update
jkirk5 Jan 6, 2026
665aaf5
Merge branch 'reports' of https://github.com/jkirk5/om-Aviary into re…
jkirk5 Jan 6, 2026
bf5df3a
report update
jkirk5 Jan 6, 2026
7e85cdb
mass table formatting improvements
jkirk5 Jan 6, 2026
2f1d274
Removed double-count of external subsystem mass
jkirk5 Jan 7, 2026
ad45100
adjusted landing gear masses into separate components
jkirk5 Jan 8, 2026
7a90f5d
tweaks to mass summation
jkirk5 Jan 8, 2026
b9df860
Merge branch 'main' into reports
jkirk5 Jan 9, 2026
4f0eac5
update for external subsystem api change
jkirk5 Jan 9, 2026
f21a0cc
removed unneeded lines
jkirk5 Jan 13, 2026
024d849
Merge branch 'main' into reports
jkirk5 Jan 13, 2026
9ad8196
Multimission workaround for mass report
jkirk5 Jan 14, 2026
734612c
Merge branch 'reports' of https://github.com/jkirk5/om-Aviary into re…
jkirk5 Jan 14, 2026
8abd5fc
Merge branch 'main' into reports
jkirk5 Jan 15, 2026
abf8d12
Merge branch 'main' into reports
jkirk5 Jan 15, 2026
376372d
Merge branch 'main' into reports
jkirk5 Jan 16, 2026
af385f3
fixed cabin crew var
jkirk5 Jan 20, 2026
72f7bbf
reverted test value changes
jkirk5 Jan 20, 2026
70c3137
Merge branch 'main' into reports
jkirk5 Jan 21, 2026
20cdc4c
clearer total mass in data file
jkirk5 Jan 21, 2026
90c71b1
Merge branch 'main' into reports
jkirk5 Jan 22, 2026
930a8cf
more name updates (economy class, cabin crew
jkirk5 Jan 22, 2026
00bc383
applied variable name changes to "new" code (from main)
jkirk5 Jan 23, 2026
2bddce7
updated missing BWB variables in data file
jkirk5 Jan 23, 2026
e7f3f45
undo mistaken line removal
jkirk5 Jan 23, 2026
53300a7
removed unused case_name from validation tests
jkirk5 Jan 23, 2026
79ece57
fortran-to-aviary converter tests updated for variable name changes
jkirk5 Jan 26, 2026
4026df4
variable hierarchy alphabetization fixes
jkirk5 Jan 26, 2026
950a898
reverted changed test vals with loosened tol
jkirk5 Jan 26, 2026
afc5e8f
Merge branch 'main' into reports
jkirk5 Jan 26, 2026
14bdd8e
report fix for multimission problems
jkirk5 Feb 4, 2026
3a57651
Merge branch 'reports' of https://github.com/jkirk5/om-Aviary into re…
jkirk5 Feb 4, 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
4 changes: 2 additions & 2 deletions aviary/docs/examples/modified_aircraft.csv
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless
aircraft:crew_and_payload:design:num_business_class,0,unitless
aircraft:crew_and_payload:design:num_first_class,11,unitless
aircraft:crew_and_payload:design:num_passengers,169,unitless
aircraft:crew_and_payload:design:num_tourist_class,158,unitless
aircraft:crew_and_payload:design:num_economy_class,158,unitless
aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless
aircraft:crew_and_payload:mass_per_passenger,180.0,lbm
aircraft:crew_and_payload:misc_cargo,0.0,lbm
aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless
aircraft:crew_and_payload:cabin_crew_mass_scaler,1.0,unitless
aircraft:crew_and_payload:num_flight_attendants,3,unitless
aircraft:crew_and_payload:num_flight_crew,2,unitless
aircraft:crew_and_payload:num_galley_crew,0,unitless
Expand Down
20 changes: 10 additions & 10 deletions aviary/docs/examples/multi_mission.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@
"glue_variable(get_variable_name(Aircraft.CrewPayload.NUM_PASSENGERS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.NUM_BUSINESS_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.NUM_FIRST_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.NUM_TOURIST_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.NUM_ECONOMY_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.PASSENGER_SERVICE_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.PASSENGER_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.PASSENGER_MASS_TOTAL), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_PASSENGERS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Design.EMPTY_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Furnishings.MASS), md_code=True)\n",
Expand Down Expand Up @@ -67,7 +67,7 @@
"\n",
"A number of checks exist in {glue:md}`add_aviary_group` which under the hood calls {glue:md}`check_and_preprocess_inputs` to help the user in the case that incomplete as-flow or design passenger information is provided. This was done to provide backward compatability for older aircraft models which only specify design passenger information. \n",
"\n",
"In this example we wanted to compare the same aircraft flying a mission with full passengers vs. a mission with no passengers. However, there are limitations in Aviary's ability to detect user input vs. default values. So we set the passenger count to one instead. Right now, the only way to set an aircraft to exactly zero passengers is by setting {glue:md}`Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS` to zero plus any {glue:md}`Aircraft.CrewPayload.CARGO_MASS` being carried. This zeros out passenger and baggage mass regardless of what value is input to {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.NUM_TOURIST_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.NUM_FIRST_CLASS`. Once issue #610 is resolved the user should be able to set passenger and bags mass to exactly zero by setting {glue:md}`Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS` to zero.\n",
"In this example we wanted to compare the same aircraft flying a mission with full passengers vs. a mission with no passengers. However, there are limitations in Aviary's ability to detect user input vs. default values. So we set the passenger count to one instead. Right now, the only way to set an aircraft to exactly zero passengers is by setting {glue:md}`Aircraft.CrewPayload.TOTAL_PAYLOAD_MASS` to zero plus any {glue:md}`Aircraft.CrewPayload.CARGO_MASS` being carried. This zeros out passenger and baggage mass regardless of what value is input to {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.NUM_ECONOMY_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.NUM_FIRST_CLASS`. Once issue #610 is resolved the user should be able to set passenger and bags mass to exactly zero by setting {glue:md}`Aircraft.CrewPayload.PASSENGER_PAYLOAD_MASS` to zero.\n",
"\n",
"## Best Pratices\n",
"The user should be cognizant of the implications of having two pre-mission systems, one for each mission. When trying to mirror these to create a single aircraft that flies different missions, both of the pre-mission systems should be nearly identical in setup, except for fuel-mass, passenger, and payload calculations. There are numerous opportunities for the user to get this wrong, and accidentally create two different aircraft as a result. For example, in a previous iteration of this example, {glue:md}`Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` was not specified, which resulted in two different landing gears being designed, one for mission1, one for mission2.\n",
Expand Down Expand Up @@ -111,7 +111,7 @@
"metadata": {},
"source": [
"### Aircraft Configuration\n",
"In the example, we import a single aircraft configuration (LargeSingleAisle2FLOPS) and then modify it to create a mission1 which carries 162 passengers and mission2, a mission which carries only a single passengers on the same aircraft. The number of seats for passengers in the aircraft, as well as some other systems like passenger airconditioning mass, is set by values of {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_TOURIST_CLASS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`. Whereas the actual number of passengers on the flight is specified by variables of {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.NUM_TOURIST_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`."
"In the example, we import a single aircraft configuration (LargeSingleAisle2FLOPS) and then modify it to create a mission1 which carries 162 passengers and mission2, a mission which carries only a single passengers on the same aircraft. The number of seats for passengers in the aircraft, as well as some other systems like passenger airconditioning mass, is set by values of {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_ECONOMY_CLASS`, {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.Design.NUM_BUSINESS_CLASS`. Whereas the actual number of passengers on the flight is specified by variables of {glue:md}`Aircraft.CrewPayload.NUM_PASSENGERS`, {glue:md}`Aircraft.CrewPayload.NUM_ECONOMY_CLASS`, {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`, and {glue:md}`Aircraft.CrewPayload.NUM_BUSINESS_CLASS`."
]
},
{
Expand All @@ -124,7 +124,7 @@
"\n",
"aviary_inputs_mission2 = copy.deepcopy(aviary_inputs_mission1)\n",
"aviary_inputs_mission2.set_val(Aircraft.CrewPayload.NUM_PASSENGERS, 1, 'unitless')\n",
"aviary_inputs_mission2.set_val(Aircraft.CrewPayload.NUM_TOURIST_CLASS, 1, 'unitless')\n",
"aviary_inputs_mission2.set_val(Aircraft.CrewPayload.NUM_ECONOMY_CLASS, 1, 'unitless')\n",
"aviary_inputs_mission2.set_val(Aircraft.CrewPayload.NUM_BUSINESS_CLASS, 0, 'unitless')\n",
"aviary_inputs_mission2.set_val(Aircraft.CrewPayload.NUM_FIRST_CLASS, 0, 'unitless')"
]
Expand All @@ -134,7 +134,7 @@
"metadata": {},
"source": [
"### Adding Aviary Groups\n",
"Now we must set the problem type to multimission, this will allow us to use our other commandes like {glue:md}`add_aviary_group` to combine the aviary_values and phase_info to create two Aviary Groups which are added to the problem. {glue:md}`add_aviary_group` can accept engine_builders as well if you wanted to specify a custom engine builder for the models. We give each of the groups a name: mission1 and mission 2 which we will use to reference them later. Lastly we build the model, which adds pre-mission, phases, post-mission, and links phases sequentially. These elements could be called individually if the user desired more control over each one."
"Now we must set the problem type to multimission, this will allow us to use our other commandes like {glue:md}`add_aviary_group` to combine the aviary_values and phase_info to create two AviaryGroups which are added to the problem. {glue:md}`add_aviary_group` can accept external subsystems as well if you wanted to specify custom subsystems per AviaryGroup. We give each of the groups a name: mission1 and mission 2 which we will use to reference them later. Lastly we build the model, which adds pre-mission, phases, post-mission, and links phases sequentially. These elements could be called individually if the user desired more control over each one."
]
},
{
Expand Down Expand Up @@ -233,7 +233,7 @@
"\n",
"{glue:md}`set_design_range` method will access the phase_info for any missions supplied, find the largest `target_rage`, and set `Aircraft1:Range` to that value. This will ensure the avionics are designed similarly for both aircraft.\n",
"\n",
"The total number of passengers ({glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`) and the design number of passengers of each type (business, tourist, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in mission1 and mission2, we ensure the aircraft will be designed similarly. These settings were already set in the `LargeSingleAisle2FLOPS` model which we are using.\n",
"The total number of passengers ({glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS`) and the design number of passengers of each type (business, economy, first class), help to define the passenger air conditioning subsystems and the passenger support mass (seats) respectively. Thus when these values are set equal in mission1 and mission2, we ensure the aircraft will be designed similarly. These settings were already set in the `LargeSingleAisle2FLOPS` model which we are using.\n",
"\n",
"```\n",
"Note: It is good practice, but not required, to set `Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` in Aviary Values to ensure consistent design of the landing gear for both missions. This combined with `Design.GROSS_MASS` helps to ensure that `Aircraft.LandingGear.MAIN_GEAR_MASS` and `Aircraft.LandingGear.NOSE_GEAR_MASS` are the same for both missions. If `Aircraft.Design.LANDING_TO_TAKEOFF_MASS_RATIO` is not set, Landing Gear Masses will be caluclated based on`Mission.Summary.CRUISE_MACH` and Mission.Design.RANGE`. This is potentially problematic because `Mission.Summary.CRUISE_MACH` may not be set, and instead cruse mach may be optimized. In that case, `Mission.Summary.CRUISE_MACH` could vary between mission1 and mission2, which would then cascade into differeing `Aircraft.LandingGear.MAIN_GEAR_MASS` which causes the aircraft designs to diverge.\n",
Expand Down Expand Up @@ -331,7 +331,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "aviary",
"language": "python",
"name": "python3"
},
Expand All @@ -345,7 +345,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
"version": "3.12.9"
}
},
"nbformat": 4,
Expand Down
4 changes: 2 additions & 2 deletions aviary/docs/theory_guide/gasp_based_bwb.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@
"glue_variable(get_variable_name(Mission.Summary.FUEL_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Mission.Summary.TOTAL_FUEL_MASS), md_code=True)\n",
"\n",
"glue_variable(get_variable_name(Aircraft.Design.FIXED_USEFUL_LOAD), md_code=True)\n",
"glue_variable(get_variable_name(Mission.Summary.USEFUL_LOAD), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Wing.HIGH_LIFT_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Fuel.FUEL_SYSTEM_MASS), md_code=True)\n",
"glue_variable(get_variable_name(Aircraft.Design.STRUCTURE_MASS), md_code=True)\n",
Expand All @@ -284,7 +284,7 @@
"\n",
"| Aviary |     | GASP |     | Observation |\n",
"| ------- | ------- | ------- | -------- | ------------- |\n",
"| {glue:md}`Aircraft.Design.FIXED_USEFUL_LOAD` | 5972 | WFUL | 5775 | different unit weight of pilots and attendents |\n",
"| {glue:md}`Mission.Summary.USEFUL_LOAD` | 5972 | WFUL | 5775 | different unit weight of pilots and attendents |\n",
"| {glue:md}`Aircraft.Wing.HIGH_LIFT_MASS` | 972 | WHLDEV | 974 | In GASP, wing loading is a variable, but in Aviary, it is a constant |\n",
"| {glue:md}`Aircraft.Fuel.FUEL_SYSTEM_MASS` | 1316 | WFSS | 1281 | the mass in GASP is computed after engine sizing. |\n",
"| {glue:md}`Aircraft.Design.STRUCTURE_MASS` | 44471 | WST | 45623 | the mass in GASP is computed after engine sizing. |\n",
Expand Down
8 changes: 4 additions & 4 deletions aviary/docs/user_guide/features/blended_wing_body.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
"glue_variable(get_variable_name(Aircraft.Fuselage.SEAT_WIDTH), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.Fuselage.NUM_AISLES), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.Fuselage.AISLE_WIDTH), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.SEAT_PITCH_TOURIST), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_PASSENGERS), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.CrewPayload.Design.NUM_FIRST_CLASS), md_code=False)\n",
"glue_variable(get_variable_name(Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP), md_code=False)\n",
Expand Down Expand Up @@ -89,20 +89,20 @@
"| first class seat pitch | 36.0 | inch |\n",
"| Number of aisles in first class | 2 | unitless |\n",
"| First class aisle width | 24.0 | inch |\n",
"| Length of first class/tourist class aisle | 5.0 | ft |\n",
"| Length of first class/economy class aisle | 5.0 | ft |\n",
"| Tourist class passengers per lav | 78 | unitless |\n",
"| Lav width | 42.0 | inch |\n",
"| Tourist class galley area per passenger | 0.15 | ft**2 |\n",
"| | | |\n",
"\n",
"Aviary will try to fit the seats in both first class and tourist class based on the above and following parameters:\n",
"Aviary will try to fit the seats in both first class and economy class based on the above and following parameters:\n",
"\n",
"| Parameters | Units |\n",
"| ---------- | ----- |\n",
"| {glue:md}`Aircraft.Fuselage.SEAT_WIDTH` | inch |\n",
"| {glue:md}`Aircraft.Fuselage.NUM_AISLES` | unitless |\n",
"| {glue:md}`Aircraft.Fuselage.AISLE_WIDTH` | inch |\n",
"| {glue:md}`Aircraft.CrewPayload.Design.SEAT_PITCH_TOURIST` | inch |\n",
"| {glue:md}`Aircraft.CrewPayload.Design.SEAT_PITCH_ECONOMY` | inch |\n",
"| {glue:md}`Aircraft.CrewPayload.Design.NUM_PASSENGERS` | unitless |\n",
"| {glue:md}`Aircraft.CrewPayload.Design.NUM_FIRST_CLASS` | unitless |\n",
"| {glue:md}`Aircraft.BWB.PASSENGER_LEADING_EDGE_SWEEP` | deg |\n",
Expand Down
Loading
Loading