Skip to content

Commit 0eab7f6

Browse files
authored
Merge pull request #624 from Kenneth-T-Moore/0.9.6_staging
0.9.6 Official PR
2 parents 7b2ef9f + b80ec24 commit 0eab7f6

File tree

228 files changed

+10965
-9205
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

228 files changed

+10965
-9205
lines changed

.github/workflows/test_benchmarks.yml

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ jobs:
3838
SCIPY: 1
3939
PYOPTSPARSE: 'v2.9.1'
4040
SNOPT: '7.7'
41-
#OPENMDAO: 'latest'
42-
OPENMDAO: '3.34.2'
41+
OPENMDAO: 'latest'
4342
DYMOS: 'latest'
4443
SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
4544
SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}

.github/workflows/test_docs.yml

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ jobs:
3838
SCIPY: 1
3939
PYOPTSPARSE: 'v2.9.1'
4040
SNOPT: '7.7'
41-
#OPENMDAO: 'latest'
42-
OPENMDAO: '3.34.2'
41+
OPENMDAO: 'latest'
4342
DYMOS: 'latest'
4443
SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
4544
SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}

.github/workflows/test_workflow.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ jobs:
3434
matrix:
3535
include:
3636
# oldest versions of openmdao/dymos
37+
# Note: bugfixes sometimes require incrementing the minimal version of openmdao or dymos.
3738
- NAME: oldest
3839
PY: '3.9'
3940
NUMPY: '1.20'
4041
SCIPY: '1.6'
4142
PYOPTSPARSE: 'v2.9.1'
4243
SNOPT: '7.7'
43-
OPENMDAO: '3.33.0'
44+
OPENMDAO: '3.35.0'
4445
DYMOS: '1.8.0'
4546

4647
# latest versions of openmdao/dymos
@@ -50,8 +51,7 @@ jobs:
5051
SCIPY: 1
5152
PYOPTSPARSE: 'v2.9.1'
5253
SNOPT: '7.7'
53-
#OPENMDAO: 'latest'
54-
OPENMDAO: '3.34.2'
54+
OPENMDAO: 'latest'
5555
DYMOS: 'latest'
5656

5757
steps:

.github/workflows/test_workflow_dev_deps.yml

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ jobs:
2727
SCIPY: 1
2828
PYOPTSPARSE: 'latest'
2929
SNOPT: '7.7'
30-
#OPENMDAO: 'dev'
31-
OPENMDAO: '3.34.2'
30+
OPENMDAO: 'dev'
3231
DYMOS: 'dev'
3332

3433
steps:

.github/workflows/test_workflow_no_dev_install.yml

-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ jobs:
7070
echo ""
7171
echo "Temporarily install specific versions for now."
7272
pip install "numpy<2"
73-
pip install "openmdao==3.34.2"
7473
pip install packaging
7574
pip install .[all]
7675

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,9 @@ coloring_files/
152152
# OpenMDAO N2 diagrams
153153
n2.html
154154

155+
# Input and output lists
156+
input_list.txt
157+
output_list.txt
158+
155159
# Windows downloads
156160
*:Zone.Identifier

aviary/docs/developer_guide/codebase_overview.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
" 'interface':'is where most code that users interact with is located',\n",
1919
" 'mission':'contains OpenMDAO components and groups for modeling the aircraft mission',\n",
2020
" 'models':'contains aircraft and propulsion models for use in Aviary examples and tests',\n",
21-
" 'subsystems':'is where the aerodynamic, propulsion, mass, and geometry core subsystems are located',\n",
21+
" 'subsystems':'is where the aerodynamic, atmosphere, energy, propulsion, mass, and geometry core subsystems are located',\n",
2222
" 'utils':'contains utility functions for use in Aviary code, examples, and tests',\n",
2323
" 'validation_cases':'contains validation cases for testing and benchmarking Aviary',\n",
2424
" 'variable_info':'contains the variable meta data as well as several variable classes that are used in Aviary',\n",

aviary/docs/examples/coupled_aircraft_mission_optimization.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@
197197
"aircraft_filename = 'models/test_aircraft/aircraft_for_bench_FwFm.csv'\n",
198198
"optimizer = \"IPOPT\"\n",
199199
"make_plots = True\n",
200-
"max_iter = 200\n",
200+
"max_iter = 100\n",
201201
"\n",
202202
"prob = av.run_aviary(aircraft_filename, phase_info, optimizer=optimizer,\n",
203203
" make_plots=make_plots, max_iter=max_iter)"

aviary/docs/getting_started/onboarding_ext_subsystem.ipynb

+3-3
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217
"\n",
218218
"The steps in bold are related specifically to subsystems. So, almost all of the steps involve subsystems. As long as your external subsystem is built based on the guidelines, Aviary will take care of your subsystem.\n",
219219
"\n",
220-
"The next example is the [battery subsystem](https://github.com/OpenMDAO/Aviary/blob/main/aviary/docs/user_guide/battery_subsystem_example). The battery subsystem provides methods to define the battery subsystem's states, design variables, fixed values, initial guesses, and mass names. It also provides methods to build OpenMDAO systems for the pre-mission and mission computations of the subsystem, to get the constraints for the subsystem, and to preprocess the inputs for the subsystem. This subsystem has its own set of variables. We will build an Aviary model with full phases (namely, `climb`, `cruise` and `descent`) and maximize the final total mass: `Dynamic.Mission.MASS`."
220+
"The next example is the [battery subsystem](https://github.com/OpenMDAO/Aviary/blob/main/aviary/docs/user_guide/battery_subsystem_example). The battery subsystem provides methods to define the battery subsystem's states, design variables, fixed values, initial guesses, and mass names. It also provides methods to build OpenMDAO systems for the pre-mission and mission computations of the subsystem, to get the constraints for the subsystem, and to preprocess the inputs for the subsystem. This subsystem has its own set of variables. We will build an Aviary model with full phases (namely, `climb`, `cruise` and `descent`) and maximize the final total mass: `Dynamic.Vehicle.MASS`."
221221
]
222222
},
223223
{
@@ -233,7 +233,7 @@
233233
"source": [
234234
"# Testing Cell\n",
235235
"from aviary.api import Dynamic\n",
236-
"Dynamic.Mission.MASS;"
236+
"Dynamic.Vehicle.MASS;"
237237
]
238238
},
239239
{
@@ -399,7 +399,7 @@
399399
"id": "ed8c764a",
400400
"metadata": {},
401401
"source": [
402-
"Since our objective is `mass`, we want to print the value of `Dynamic.Mission.Mass`. Remember, we have imported Dynamic from aviary.variable_info.variables for this purpose.\n",
402+
"Since our objective is `mass`, we want to print the value of `Dynamic.Vehicle.MASS`. Remember, we have imported Dynamic from aviary.variable_info.variables for this purpose.\n",
403403
"\n",
404404
"So, we have to print the final mass in a different way. Keep in mind that we have three phases in the mission and that final mass is our objective. So, we can get the final mass of the descent phase instead. Let us try this approach. Let us comment out the print statement of final mass (and the import of Dynamic), then add the following lines:"
405405
]

aviary/docs/getting_started/onboarding_level1.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@
474474
"\n",
475475
"In ground roll phase, throttle setting is set to maximum (1.0). Aviary sets a phase parameter:\n",
476476
"```\n",
477-
"Dynamic.Mission.THROTTLE = 1.0\n",
477+
"Dynamic.Vehicle.Propulsion.THROTTLE = 1.0\n",
478478
"```\n",
479479
"For the [`COLLOCATION`](https://openmdao.github.io/dymos/getting_started/collocation.html) setting, there is one [segment](https://openmdao.github.io/dymos/getting_started/intro_to_dymos/intro_segments.html) (`'num_segments': 1`) and polynomial interpolation degree is 3 (`'order': 3`). Increasing the number of segments and/or increasing the degree of polynomial will improve accuracy but will also increase the complexity of computation. For groundroll, it is unnecessary.\n",
480480
"\n",

aviary/docs/getting_started/onboarding_level2.ipynb

+3-3
Original file line numberDiff line numberDiff line change
@@ -629,12 +629,12 @@
629629
"\n",
630630
"| objective_type | objective |\n",
631631
"| -------------- | --------- |\n",
632-
"| mass | `Dynamic.Mission.MASS` |\n",
632+
"| mass | `Dynamic.Vehicle.MASS` |\n",
633633
"| hybrid_objective | `-final_mass / {takeoff_mass} + final_time / 5.` |\n",
634634
"| fuel_burned | `initial_mass - mass_final` (for `FLOPS` mission only)|\n",
635635
"| fuel | `Mission.Objectives.FUEL` |\n",
636636
"\n",
637-
"As listed in the above, if `objective_type=\"mass\"`, the objective is the final value of `Dynamic.Mission.MASS` at the end of the mission.\n",
637+
"As listed in the above, if `objective_type=\"mass\"`, the objective is the final value of `Dynamic.Vehicle.MASS` at the end of the mission.\n",
638638
"If `objective_type=\"fuel\"`, the objective is the `Mission.Objectives.FUEL`.\n",
639639
"There is a special objective type: `hybrid_objective`. When `objective_type=\"hybrid_objective\"`, the objective is a mix of minimizing fuel burn and minimizing the mission duration:"
640640
]
@@ -659,7 +659,7 @@
659659
"from aviary.utils.doctape import check_contains\n",
660660
"\n",
661661
"mo = Mission.Objectives\n",
662-
"dm = Dynamic.Mission\n",
662+
"dm = Dynamic.Vehicle\n",
663663
"expected_objective = {'mass':dm.MASS, 'hybrid_objective':'obj_comp.obj',\n",
664664
" 'fuel_burned':Mission.Summary.FUEL_BURNED, 'fuel':mo.FUEL}\n",
665665
"\n",

aviary/docs/getting_started/onboarding_level3.ipynb

+7-7
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@
334334
"# link phases #\n",
335335
"###############\n",
336336
"\n",
337-
"traj.link_phases([\"climb\", \"cruise\", \"descent\"], [\"time\", av.Dynamic.Mission.MASS, av.Dynamic.Mission.DISTANCE], connected=strong_couple)\n",
337+
"traj.link_phases([\"climb\", \"cruise\", \"descent\"], [\"time\", av.Dynamic.Vehicle.MASS, av.Dynamic.Mission.DISTANCE], connected=strong_couple)\n",
338338
"\n",
339339
"param_vars = [av.Aircraft.Nacelle.CHARACTERISTIC_LENGTH,\n",
340340
" av.Aircraft.Nacelle.FINENESS,\n",
@@ -474,9 +474,9 @@
474474
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_climb, alt_f_climb]), units='m')\n",
475475
"prob.set_val(\n",
476476
" 'traj.climb.controls:mach', climb.interp(\n",
477-
" av.Dynamic.Mission.MACH, ys=[mach_i_climb, mach_f_climb]), units='unitless')\n",
477+
" av.Dynamic.Atmosphere.MACH, ys=[mach_i_climb, mach_f_climb]), units='unitless')\n",
478478
"prob.set_val('traj.climb.states:mass', climb.interp(\n",
479-
" av.Dynamic.Mission.MASS, ys=[mass_i_climb, mass_f_climb]), units='kg')\n",
479+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_climb, mass_f_climb]), units='kg')\n",
480480
"prob.set_val('traj.climb.states:distance', climb.interp(\n",
481481
" av.Dynamic.Mission.DISTANCE, ys=[range_i_climb, range_f_climb]), units='m')\n",
482482
"\n",
@@ -487,9 +487,9 @@
487487
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_cruise, alt_f_cruise]), units='m')\n",
488488
"prob.set_val(\n",
489489
" 'traj.cruise.controls:mach', cruise.interp(\n",
490-
" av.Dynamic.Mission.MACH, ys=[cruise_mach, cruise_mach]), units='unitless')\n",
490+
" av.Dynamic.Atmosphere.MACH, ys=[cruise_mach, cruise_mach]), units='unitless')\n",
491491
"prob.set_val('traj.cruise.states:mass', cruise.interp(\n",
492-
" av.Dynamic.Mission.MASS, ys=[mass_i_cruise, mass_f_cruise]), units='kg')\n",
492+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_cruise, mass_f_cruise]), units='kg')\n",
493493
"prob.set_val('traj.cruise.states:distance', cruise.interp(\n",
494494
" av.Dynamic.Mission.DISTANCE, ys=[range_i_cruise, range_f_cruise]), units='m')\n",
495495
"\n",
@@ -500,9 +500,9 @@
500500
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_descent, alt_f_descent]), units='m')\n",
501501
"prob.set_val(\n",
502502
" 'traj.descent.controls:mach', descent.interp(\n",
503-
" av.Dynamic.Mission.MACH, ys=[mach_i_descent, mach_f_descent]), units='unitless')\n",
503+
" av.Dynamic.Atmosphere.MACH, ys=[mach_i_descent, mach_f_descent]), units='unitless')\n",
504504
"prob.set_val('traj.descent.states:mass', descent.interp(\n",
505-
" av.Dynamic.Mission.MASS, ys=[mass_i_descent, mass_f_descent]), units='kg')\n",
505+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_descent, mass_f_descent]), units='kg')\n",
506506
"prob.set_val('traj.descent.states:distance', descent.interp(\n",
507507
" av.Dynamic.Mission.DISTANCE, ys=[distance_i_descent, distance_f_descent]), units='m')\n",
508508
"\n",

aviary/docs/user_guide/SGM_capabilities.ipynb

+8-8
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@
132132
" problem_name=phase_name,\n",
133133
" outputs=[\"normal_force\", \"alpha\"],\n",
134134
" states=[\n",
135-
" Dynamic.Mission.MASS,\n",
135+
" Dynamic.Vehicle.MASS,\n",
136136
" Dynamic.Mission.DISTANCE,\n",
137137
" Dynamic.Mission.ALTITUDE,\n",
138138
" Dynamic.Mission.VELOCITY,\n",
139139
" ],\n",
140140
" # state_units=['lbm','nmi','ft'],\n",
141141
" alternate_state_rate_names={\n",
142-
" Dynamic.Mission.MASS: Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL},\n",
142+
" Dynamic.Vehicle.MASS: Dynamic.Vehicle.Propulsion.FUEL_FLOW_RATE_NEGATIVE_TOTAL},\n",
143143
" **simupy_args,\n",
144144
" )\n",
145145
"\n",
@@ -196,11 +196,11 @@
196196
"full_traj = FlexibleTraj(\n",
197197
" Phases=phase_info,\n",
198198
" traj_final_state_output=[\n",
199-
" Dynamic.Mission.MASS,\n",
199+
" Dynamic.Vehicle.MASS,\n",
200200
" Dynamic.Mission.DISTANCE,\n",
201201
" ],\n",
202202
" traj_initial_state_input=[\n",
203-
" Dynamic.Mission.MASS,\n",
203+
" Dynamic.Vehicle.MASS,\n",
204204
" Dynamic.Mission.DISTANCE,\n",
205205
" Dynamic.Mission.ALTITUDE,\n",
206206
" ],\n",
@@ -210,11 +210,11 @@
210210
" # third key is event_idx associated with input\n",
211211
" ('groundroll', Dynamic.Mission.VELOCITY, 0,),\n",
212212
" ('climb3', Dynamic.Mission.ALTITUDE, 0,),\n",
213-
" ('cruise', Dynamic.Mission.MASS, 0,),\n",
213+
" ('cruise', Dynamic.Vehicle.MASS, 0,),\n",
214214
" ],\n",
215215
" traj_intermediate_state_output=[\n",
216216
" ('cruise', Dynamic.Mission.DISTANCE),\n",
217-
" ('cruise', Dynamic.Mission.MASS),\n",
217+
" ('cruise', Dynamic.Vehicle.MASS),\n",
218218
" ]\n",
219219
")"
220220
]
@@ -278,7 +278,7 @@
278278
"from aviary.utils.doctape import check_value\n",
279279
"\n",
280280
"for phase_name, phase in descent_phases.items():\n",
281-
" check_value(phase['user_options'][Dynamic.Mission.THROTTLE],(0, 'unitless'))"
281+
" check_value(phase['user_options'][Dynamic.Vehicle.Propulsion.THROTTLE],(0, 'unitless'))"
282282
]
283283
}
284284
],
@@ -298,7 +298,7 @@
298298
"name": "python",
299299
"nbconvert_exporter": "python",
300300
"pygments_lexer": "ipython3",
301-
"version": "3.10.13"
301+
"version": "3.12.3"
302302
}
303303
},
304304
"nbformat": 4,

aviary/docs/user_guide/examples_of_the_same_mission_at_different_UI_levels.ipynb

+6-6
Original file line numberDiff line numberDiff line change
@@ -449,9 +449,9 @@
449449
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_climb, alt_f_climb]), units='m')\n",
450450
"prob.set_val(\n",
451451
" 'traj.climb.controls:mach', climb.interp(\n",
452-
" av.Dynamic.Mission.MACH, ys=[mach_i_climb, mach_f_climb]), units='unitless')\n",
452+
" av.Dynamic.Atmosphere.MACH, ys=[mach_i_climb, mach_f_climb]), units='unitless')\n",
453453
"prob.set_val('traj.climb.states:mass', climb.interp(\n",
454-
" av.Dynamic.Mission.MASS, ys=[mass_i_climb, mass_f_climb]), units='kg')\n",
454+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_climb, mass_f_climb]), units='kg')\n",
455455
"prob.set_val('traj.climb.states:distance', climb.interp(\n",
456456
" av.Dynamic.Mission.DISTANCE, ys=[distance_i_climb, distance_f_climb]), units='m')\n",
457457
"\n",
@@ -462,9 +462,9 @@
462462
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_cruise, alt_f_cruise]), units='m')\n",
463463
"prob.set_val(\n",
464464
" 'traj.cruise.controls:mach', cruise.interp(\n",
465-
" av.Dynamic.Mission.MACH, ys=[cruise_mach, cruise_mach]), units='unitless')\n",
465+
" av.Dynamic.Atmosphere.MACH, ys=[cruise_mach, cruise_mach]), units='unitless')\n",
466466
"prob.set_val('traj.cruise.states:mass', cruise.interp(\n",
467-
" av.Dynamic.Mission.MASS, ys=[mass_i_cruise, mass_f_cruise]), units='kg')\n",
467+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_cruise, mass_f_cruise]), units='kg')\n",
468468
"prob.set_val('traj.cruise.states:distance', cruise.interp(\n",
469469
" av.Dynamic.Mission.DISTANCE, ys=[distance_i_cruise, distance_f_cruise]), units='m')\n",
470470
"\n",
@@ -475,9 +475,9 @@
475475
" av.Dynamic.Mission.ALTITUDE, ys=[alt_i_descent, alt_f_descent]), units='m')\n",
476476
"prob.set_val(\n",
477477
" 'traj.descent.controls:mach', descent.interp(\n",
478-
" av.Dynamic.Mission.MACH, ys=[mach_i_descent, mach_f_descent]), units='unitless')\n",
478+
" av.Dynamic.Atmosphere.MACH, ys=[mach_i_descent, mach_f_descent]), units='unitless')\n",
479479
"prob.set_val('traj.descent.states:mass', descent.interp(\n",
480-
" av.Dynamic.Mission.MASS, ys=[mass_i_descent, mass_f_descent]), units='kg')\n",
480+
" av.Dynamic.Vehicle.MASS, ys=[mass_i_descent, mass_f_descent]), units='kg')\n",
481481
"prob.set_val('traj.descent.states:distance', descent.interp(\n",
482482
" av.Dynamic.Mission.DISTANCE, ys=[distance_i_descent, distance_f_descent]), units='m')\n",
483483
"\n",

0 commit comments

Comments
 (0)