dymos 1.13.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. dymos/__init__.py +12 -0
  2. dymos/_options.py +30 -0
  3. dymos/examples/__init__.py +0 -0
  4. dymos/examples/aircraft_steady_flight/__init__.py +0 -0
  5. dymos/examples/aircraft_steady_flight/aero/__init__.py +0 -0
  6. dymos/examples/aircraft_steady_flight/aero/aero_coef_comp.py +19 -0
  7. dymos/examples/aircraft_steady_flight/aero/aero_forces_comp.py +51 -0
  8. dymos/examples/aircraft_steady_flight/aero/aerodynamics_group.py +29 -0
  9. dymos/examples/aircraft_steady_flight/aero/crm_data.py +667 -0
  10. dymos/examples/aircraft_steady_flight/aero/data/CRM_aero_inputs.dat +27 -0
  11. dymos/examples/aircraft_steady_flight/aero/data/CRM_aero_outputs.dat +3 -0
  12. dymos/examples/aircraft_steady_flight/aero/interpND_aero_coef_comp.py +124 -0
  13. dymos/examples/aircraft_steady_flight/aero/test/__init__.py +0 -0
  14. dymos/examples/aircraft_steady_flight/aero/test/test_aero_coef_comp.py +184 -0
  15. dymos/examples/aircraft_steady_flight/aero/test/test_interpND_aero_coef_comp.py +219 -0
  16. dymos/examples/aircraft_steady_flight/aircraft_ode.py +68 -0
  17. dymos/examples/aircraft_steady_flight/dynamic_pressure_comp.py +30 -0
  18. dymos/examples/aircraft_steady_flight/flight_equlibrium/__init__.py +0 -0
  19. dymos/examples/aircraft_steady_flight/flight_equlibrium/lift_equilibrium_comp.py +76 -0
  20. dymos/examples/aircraft_steady_flight/flight_equlibrium/steady_flight_equilibrium_group.py +61 -0
  21. dymos/examples/aircraft_steady_flight/flight_equlibrium/test/__init__.py +0 -0
  22. dymos/examples/aircraft_steady_flight/flight_equlibrium/test/test_flight_equilibrium_group.py +64 -0
  23. dymos/examples/aircraft_steady_flight/flight_equlibrium/thrust_equilibrium_comp.py +86 -0
  24. dymos/examples/aircraft_steady_flight/mass_comp.py +34 -0
  25. dymos/examples/aircraft_steady_flight/propulsion/__init__.py +0 -0
  26. dymos/examples/aircraft_steady_flight/propulsion/fuel_burn_rate_comp.py +33 -0
  27. dymos/examples/aircraft_steady_flight/propulsion/max_thrust_comp.py +35 -0
  28. dymos/examples/aircraft_steady_flight/propulsion/propulsion_group.py +55 -0
  29. dymos/examples/aircraft_steady_flight/propulsion/test/__init__.py +0 -0
  30. dymos/examples/aircraft_steady_flight/propulsion/test/test_propulsion_group.py +48 -0
  31. dymos/examples/aircraft_steady_flight/propulsion/throttle_comp.py +35 -0
  32. dymos/examples/aircraft_steady_flight/propulsion/thrust_comp.py +49 -0
  33. dymos/examples/aircraft_steady_flight/propulsion/tsfc_comp.py +40 -0
  34. dymos/examples/aircraft_steady_flight/range_rate_comp.py +39 -0
  35. dymos/examples/aircraft_steady_flight/steady_flight_path_angle_comp.py +38 -0
  36. dymos/examples/aircraft_steady_flight/test/__init__.py +0 -0
  37. dymos/examples/aircraft_steady_flight/test/test_aircraft_cruise.py +316 -0
  38. dymos/examples/aircraft_steady_flight/test/test_aircraft_ode.py +53 -0
  39. dymos/examples/aircraft_steady_flight/test/test_ex_aircraft_steady_flight.py +156 -0
  40. dymos/examples/aircraft_steady_flight/true_airspeed_comp.py +29 -0
  41. dymos/examples/balanced_field/__init__.py +0 -0
  42. dymos/examples/balanced_field/balanced_field_length.py +189 -0
  43. dymos/examples/balanced_field/balanced_field_ode.py +122 -0
  44. dymos/examples/balanced_field/doc/__init__.py +0 -0
  45. dymos/examples/balanced_field/doc/test_doc_balanced_field_length.py +262 -0
  46. dymos/examples/balanced_field/test/__init__.py +0 -0
  47. dymos/examples/balanced_field/test/test_balanced_field_func_comp.py +164 -0
  48. dymos/examples/balanced_field/test/test_balanced_field_length.py +239 -0
  49. dymos/examples/battery_multibranch/__init__.py +0 -0
  50. dymos/examples/battery_multibranch/batteries.py +126 -0
  51. dymos/examples/battery_multibranch/battery_multibranch_ode.py +42 -0
  52. dymos/examples/battery_multibranch/motors.py +71 -0
  53. dymos/examples/battery_multibranch/test/__init__.py +0 -0
  54. dymos/examples/battery_multibranch/test/test_multibranch_trajectory.py +355 -0
  55. dymos/examples/brachistochrone/__init__.py +2 -0
  56. dymos/examples/brachistochrone/brachistochrone_ode.py +87 -0
  57. dymos/examples/brachistochrone/brachistochrone_vector_states_ode.py +72 -0
  58. dymos/examples/brachistochrone/doc/__init__.py +0 -0
  59. dymos/examples/brachistochrone/doc/brachistochrone_ode.py +73 -0
  60. dymos/examples/brachistochrone/doc/test_doc_brachistochrone.py +403 -0
  61. dymos/examples/brachistochrone/doc/test_doc_brachistochrone_static_gravity.py +179 -0
  62. dymos/examples/brachistochrone/doc/test_doc_brachistochrone_tandem_phases.py +163 -0
  63. dymos/examples/brachistochrone/doc/test_doc_brachistochrone_upstream_control.py +149 -0
  64. dymos/examples/brachistochrone/doc/test_doc_brachistochrone_upstream_state.py +167 -0
  65. dymos/examples/brachistochrone/test/__init__.py +0 -0
  66. dymos/examples/brachistochrone/test/ex_brachistochrone.py +104 -0
  67. dymos/examples/brachistochrone/test/ex_brachistochrone_vector_states.py +95 -0
  68. dymos/examples/brachistochrone/test/test_brachistochrone_birkhoff_constraints.py +231 -0
  69. dymos/examples/brachistochrone/test/test_brachistochrone_boundary_balance.py +204 -0
  70. dymos/examples/brachistochrone/test/test_brachistochrone_callable_ode_class.py +369 -0
  71. dymos/examples/brachistochrone/test/test_brachistochrone_control_rate_targets.py +226 -0
  72. dymos/examples/brachistochrone/test/test_brachistochrone_external_control.py +140 -0
  73. dymos/examples/brachistochrone/test/test_brachistochrone_implicit_recorder.py +80 -0
  74. dymos/examples/brachistochrone/test/test_brachistochrone_integrated_control.py +256 -0
  75. dymos/examples/brachistochrone/test/test_brachistochrone_integrated_parameter.py +229 -0
  76. dymos/examples/brachistochrone/test/test_brachistochrone_path_constraint.py +64 -0
  77. dymos/examples/brachistochrone/test/test_brachistochrone_quick_start.py +179 -0
  78. dymos/examples/brachistochrone/test/test_brachistochrone_simulate_options.py +172 -0
  79. dymos/examples/brachistochrone/test/test_brachistochrone_solve_segments.py +562 -0
  80. dymos/examples/brachistochrone/test/test_brachistochrone_static_gravity.py +238 -0
  81. dymos/examples/brachistochrone/test/test_brachistochrone_subprob_reports.py +203 -0
  82. dymos/examples/brachistochrone/test/test_brachistochrone_timeseries_feedback.py +171 -0
  83. dymos/examples/brachistochrone/test/test_brachistochrone_varying_order_control_simulation.py +169 -0
  84. dymos/examples/brachistochrone/test/test_brachistochrone_vector_boundary_constraints.py +147 -0
  85. dymos/examples/brachistochrone/test/test_brachistochrone_vector_path_constraints.py +305 -0
  86. dymos/examples/brachistochrone/test/test_brachistochrone_vector_states_ode.py +38 -0
  87. dymos/examples/brachistochrone/test/test_doc_brachistochrone_polynomial_controls.py +1507 -0
  88. dymos/examples/brachistochrone/test/test_duplicate_constraints.py +573 -0
  89. dymos/examples/brachistochrone/test/test_duplicate_timeseries_inputs.py +125 -0
  90. dymos/examples/brachistochrone/test/test_ex_brachistochrone.py +125 -0
  91. dymos/examples/brachistochrone/test/test_ex_brachistochrone_refine_grid.py +119 -0
  92. dymos/examples/brachistochrone/test/test_ex_brachistochrone_vector_states.py +150 -0
  93. dymos/examples/brachistochrone/test/test_path_constraints.py +329 -0
  94. dymos/examples/brachistochrone/test/test_phase_param_introspection_failure.py +686 -0
  95. dymos/examples/brachistochrone/test/test_simulate_units.py +102 -0
  96. dymos/examples/brachistochrone/test/test_state_rate_introspection.py +947 -0
  97. dymos/examples/brachistochrone/test/test_static_outputs.py +162 -0
  98. dymos/examples/brachistochrone/test/test_tandem_phases.py +178 -0
  99. dymos/examples/brachistochrone/test/test_timeseries_units.py +121 -0
  100. dymos/examples/cannonball/__init__.py +0 -0
  101. dymos/examples/cannonball/cannonball_ode.py +72 -0
  102. dymos/examples/cannonball/doc/__init__.py +0 -0
  103. dymos/examples/cannonball/doc/test_doc_cannonball_implicit_duration.py +230 -0
  104. dymos/examples/cannonball/doc/test_doc_two_phase_cannonball.py +256 -0
  105. dymos/examples/cannonball/size_comp.py +43 -0
  106. dymos/examples/cannonball/test/__init__.py +0 -0
  107. dymos/examples/cannonball/test/test_cannonball_connected_initial_states.py +126 -0
  108. dymos/examples/cannonball/test/test_cannonball_expr_constraint.py +124 -0
  109. dymos/examples/cannonball/test/test_cannonball_matrix_state.py +456 -0
  110. dymos/examples/cannonball/test/test_connect_control_to_parameter.py +205 -0
  111. dymos/examples/cannonball/test/test_load_case_missing_phase.py +191 -0
  112. dymos/examples/cannonball/test/test_phase_linkage_compliance.py +621 -0
  113. dymos/examples/cannonball/test/test_traj_param_static_and_dynamic.py +214 -0
  114. dymos/examples/cannonball/test/test_two_phase_cannonball_birkhoff.py +257 -0
  115. dymos/examples/cannonball/test/test_two_phase_cannonball_ode_output_linkage.py +384 -0
  116. dymos/examples/cannonball/test/test_two_phase_cannonball_renamed_time.py +112 -0
  117. dymos/examples/cart_pole/__init__.py +0 -0
  118. dymos/examples/cart_pole/animate_cartpole.py +75 -0
  119. dymos/examples/cart_pole/cartpole_dynamics.py +143 -0
  120. dymos/examples/cart_pole/test/test_cartpole_dynamics.py +39 -0
  121. dymos/examples/cart_pole/test/test_cartpole_opt.py +103 -0
  122. dymos/examples/double_integrator/__init__.py +0 -0
  123. dymos/examples/double_integrator/breakwell_ode.py +25 -0
  124. dymos/examples/double_integrator/doc/__init__.py +0 -0
  125. dymos/examples/double_integrator/doc/test_doc_double_integrator.py +111 -0
  126. dymos/examples/double_integrator/double_integrator_ode.py +19 -0
  127. dymos/examples/double_integrator/test/__init__.py +0 -0
  128. dymos/examples/double_integrator/test/test_double_integrator.py +225 -0
  129. dymos/examples/double_integrator/test/test_double_integrator_breakwell.py +132 -0
  130. dymos/examples/double_integrator/test/test_double_integrator_timeseries_units.py +118 -0
  131. dymos/examples/finite_burn_orbit_raise/__init__.py +0 -0
  132. dymos/examples/finite_burn_orbit_raise/doc/__init__.py +0 -0
  133. dymos/examples/finite_burn_orbit_raise/doc/test_doc_finite_burn_orbit_raise.py +241 -0
  134. dymos/examples/finite_burn_orbit_raise/finite_burn_eom.py +183 -0
  135. dymos/examples/finite_burn_orbit_raise/finite_burn_orbit_raise_problem.py +328 -0
  136. dymos/examples/finite_burn_orbit_raise/test/__init__.py +0 -0
  137. dymos/examples/finite_burn_orbit_raise/test/test_ex_two_burn_orbit_raise.py +43 -0
  138. dymos/examples/finite_burn_orbit_raise/test/test_ex_two_burn_orbit_raise_bokeh_plots.py +69 -0
  139. dymos/examples/finite_burn_orbit_raise/test/test_ex_two_burn_orbit_raise_mpi.py +70 -0
  140. dymos/examples/finite_burn_orbit_raise/test/test_finite_burn_eom.py +86 -0
  141. dymos/examples/finite_burn_orbit_raise/test/test_multi_phase_restart.py +202 -0
  142. dymos/examples/finite_burn_orbit_raise/test/test_two_burn_orbit_raise_linkages.py +1095 -0
  143. dymos/examples/finite_burn_orbit_raise/test/test_two_phase_orbit_double_linked.py +91 -0
  144. dymos/examples/flying_robot/__init__.py +0 -0
  145. dymos/examples/flying_robot/flying_robot_ode.py +29 -0
  146. dymos/examples/flying_robot/test/__init__.py +0 -0
  147. dymos/examples/flying_robot/test/test_flying_robot.py +104 -0
  148. dymos/examples/goddard_rocket_problem/__init__.py +1 -0
  149. dymos/examples/goddard_rocket_problem/rocket_ode.py +57 -0
  150. dymos/examples/goddard_rocket_problem/test/__init__.py +0 -0
  151. dymos/examples/goddard_rocket_problem/test/test_goddard_rocket_problem.py +133 -0
  152. dymos/examples/hull_problem/__init__.py +0 -0
  153. dymos/examples/hull_problem/hull_ode.py +26 -0
  154. dymos/examples/hull_problem/test/__init__.py +0 -0
  155. dymos/examples/hull_problem/test/test_hull_problem.py +127 -0
  156. dymos/examples/hyper_sensitive/__init__.py +1 -0
  157. dymos/examples/hyper_sensitive/doc/__init__.py +0 -0
  158. dymos/examples/hyper_sensitive/doc/test_doc_hyper_sensitive.py +121 -0
  159. dymos/examples/hyper_sensitive/hyper_sensitive_ode.py +41 -0
  160. dymos/examples/hyper_sensitive/test/__init__.py +0 -0
  161. dymos/examples/hyper_sensitive/test/test_hyper_sensitive.py +176 -0
  162. dymos/examples/length_constrained_brachistochrone/__init__.py +0 -0
  163. dymos/examples/length_constrained_brachistochrone/arc_length_comp.py +37 -0
  164. dymos/examples/length_constrained_brachistochrone/doc/__init__.py +0 -0
  165. dymos/examples/length_constrained_brachistochrone/doc/test_doc_length_constrained_brachistochrone.py +127 -0
  166. dymos/examples/low_thrust_spiral/__init__.py +1 -0
  167. dymos/examples/low_thrust_spiral/low_thrust_ode.py +66 -0
  168. dymos/examples/low_thrust_spiral/test/__init__.py +0 -0
  169. dymos/examples/low_thrust_spiral/test/test_low_thrust_spiral.py +109 -0
  170. dymos/examples/min_time_climb/__init__.py +0 -0
  171. dymos/examples/min_time_climb/aero/__init__.py +1 -0
  172. dymos/examples/min_time_climb/aero/aero.py +76 -0
  173. dymos/examples/min_time_climb/aero/cd0_comp.py +44 -0
  174. dymos/examples/min_time_climb/aero/cd_comp.py +36 -0
  175. dymos/examples/min_time_climb/aero/cl_comp.py +31 -0
  176. dymos/examples/min_time_climb/aero/cla_comp.py +49 -0
  177. dymos/examples/min_time_climb/aero/dynamic_pressure_comp.py +27 -0
  178. dymos/examples/min_time_climb/aero/kappa_comp.py +51 -0
  179. dymos/examples/min_time_climb/aero/lift_drag_force_comp.py +60 -0
  180. dymos/examples/min_time_climb/aero/mach_comp.py +33 -0
  181. dymos/examples/min_time_climb/aero/test/__init__.py +0 -0
  182. dymos/examples/min_time_climb/aero/test/test_aerodynamics.py +61 -0
  183. dymos/examples/min_time_climb/aero/test/test_cd0_comp.py +73 -0
  184. dymos/examples/min_time_climb/aero/test/test_cla_comp.py +74 -0
  185. dymos/examples/min_time_climb/aero/test/test_kappa_comp.py +45 -0
  186. dymos/examples/min_time_climb/doc/__init__.py +0 -0
  187. dymos/examples/min_time_climb/doc/aero_partial_coloring.py +85 -0
  188. dymos/examples/min_time_climb/doc/dynamic_pressure_comp_partial_coloring.py +25 -0
  189. dymos/examples/min_time_climb/doc/min_time_climb_ode_partial_coloring.py +44 -0
  190. dymos/examples/min_time_climb/min_time_climb_ode.py +42 -0
  191. dymos/examples/min_time_climb/prop/__init__.py +2 -0
  192. dymos/examples/min_time_climb/prop/max_thrust_comp.py +72 -0
  193. dymos/examples/min_time_climb/prop/mdot_comp.py +35 -0
  194. dymos/examples/min_time_climb/prop/prop.py +54 -0
  195. dymos/examples/min_time_climb/prop/test/__init__.py +0 -0
  196. dymos/examples/min_time_climb/prop/test/test_max_thrust_comp.py +40 -0
  197. dymos/examples/min_time_climb/prop/thrust_comp.py +34 -0
  198. dymos/examples/min_time_climb/test/__init__.py +0 -0
  199. dymos/examples/min_time_climb/test/test_doc_min_time_climb_partial_coloring.py +124 -0
  200. dymos/examples/min_time_climb/test/test_ex_min_time_climb.py +385 -0
  201. dymos/examples/min_time_climb/test/test_min_time_climb_simulate_failure.py +101 -0
  202. dymos/examples/min_time_climb/test/test_refine_with_shaped_parameter.py +173 -0
  203. dymos/examples/moon_landing/__init__.py +1 -0
  204. dymos/examples/moon_landing/moon_landing_ode.py +45 -0
  205. dymos/examples/moon_landing/test/__init__.py +0 -0
  206. dymos/examples/moon_landing/test/test_moon_landing_problem.py +86 -0
  207. dymos/examples/oscillator/__init__.py +0 -0
  208. dymos/examples/oscillator/oscillator_ode.py +72 -0
  209. dymos/examples/oscillator/test/__init__.py +0 -0
  210. dymos/examples/oscillator/test/test_oscillator.py +432 -0
  211. dymos/examples/oscillator/test/test_oscillator_vector_states.py +99 -0
  212. dymos/examples/plotting.py +53 -0
  213. dymos/examples/racecar/Track.py +36 -0
  214. dymos/examples/racecar/__init__.py +0 -0
  215. dymos/examples/racecar/accelerationODE.py +83 -0
  216. dymos/examples/racecar/carODE.py +266 -0
  217. dymos/examples/racecar/combinedODE.py +58 -0
  218. dymos/examples/racecar/curvature.py +43 -0
  219. dymos/examples/racecar/linewidthhelper.py +34 -0
  220. dymos/examples/racecar/normalForceODE.py +113 -0
  221. dymos/examples/racecar/spline.py +131 -0
  222. dymos/examples/racecar/test/__init__.py +0 -0
  223. dymos/examples/racecar/test/test_racecar.py +189 -0
  224. dymos/examples/racecar/timeAdder.py +36 -0
  225. dymos/examples/racecar/timeODE.py +109 -0
  226. dymos/examples/racecar/tireConstraintODE.py +177 -0
  227. dymos/examples/racecar/tireODE.py +163 -0
  228. dymos/examples/racecar/tracks.py +367 -0
  229. dymos/examples/robertson_problem/__init__.py +0 -0
  230. dymos/examples/robertson_problem/doc/__init__.py +0 -0
  231. dymos/examples/robertson_problem/doc/test_doc_robertson_problem.py +113 -0
  232. dymos/examples/robertson_problem/robertson_ode.py +60 -0
  233. dymos/examples/robot_arm/__init__.py +0 -0
  234. dymos/examples/robot_arm/doc/__init__.py +0 -0
  235. dymos/examples/robot_arm/doc/test_doc_robot_arm.py +114 -0
  236. dymos/examples/robot_arm/robot_arm_ode.py +91 -0
  237. dymos/examples/robot_arm/test/__init__.py +0 -0
  238. dymos/examples/robot_arm/test/test_robot_arm.py +206 -0
  239. dymos/examples/shuttle_reentry/__init__.py +0 -0
  240. dymos/examples/shuttle_reentry/aerodynamics_comp.py +77 -0
  241. dymos/examples/shuttle_reentry/atmosphere_comp.py +35 -0
  242. dymos/examples/shuttle_reentry/doc/__init__.py +0 -0
  243. dymos/examples/shuttle_reentry/doc/test_doc_reentry.py +110 -0
  244. dymos/examples/shuttle_reentry/flight_dynamics_comp.py +166 -0
  245. dymos/examples/shuttle_reentry/heating_comp.py +71 -0
  246. dymos/examples/shuttle_reentry/shuttle_ode.py +35 -0
  247. dymos/examples/shuttle_reentry/test/__init__.py +0 -0
  248. dymos/examples/shuttle_reentry/test/test_reentry.py +305 -0
  249. dymos/examples/ssto/__init__.py +0 -0
  250. dymos/examples/ssto/doc/__init__.py +0 -0
  251. dymos/examples/ssto/doc/test_doc_ssto_earth.py +142 -0
  252. dymos/examples/ssto/doc/test_doc_ssto_linear_tangent_guidance.py +302 -0
  253. dymos/examples/ssto/doc/test_doc_ssto_polynomial_control.py +317 -0
  254. dymos/examples/ssto/launch_vehicle_ode.py +121 -0
  255. dymos/examples/ssto/test/__init__.py +0 -0
  256. dymos/examples/ssto/test/test_linear_tangent_traj_params.py +330 -0
  257. dymos/examples/ssto/test/test_simulate_root_trajectory.py +322 -0
  258. dymos/examples/vanderpol/__init__.py +0 -0
  259. dymos/examples/vanderpol/doc/__init__.py +0 -0
  260. dymos/examples/vanderpol/doc/test_doc_vanderpol.py +136 -0
  261. dymos/examples/vanderpol/test/__init__.py +0 -0
  262. dymos/examples/vanderpol/test/test_vanderpol.py +80 -0
  263. dymos/examples/vanderpol/vanderpol_dymos.py +97 -0
  264. dymos/examples/vanderpol/vanderpol_ode.py +138 -0
  265. dymos/examples/water_rocket/__init__.py +0 -0
  266. dymos/examples/water_rocket/phases.py +192 -0
  267. dymos/examples/water_rocket/test/__init__.py +0 -0
  268. dymos/examples/water_rocket/test/test_water_rocket.py +246 -0
  269. dymos/examples/water_rocket/water_engine_comp.py +193 -0
  270. dymos/examples/water_rocket/water_propulsion_ode.py +85 -0
  271. dymos/grid_refinement/__init__.py +0 -0
  272. dymos/grid_refinement/error_estimation.py +372 -0
  273. dymos/grid_refinement/grid_refinement_ode_system.py +177 -0
  274. dymos/grid_refinement/hp_adaptive/__init__.py +0 -0
  275. dymos/grid_refinement/hp_adaptive/hp_adaptive.py +532 -0
  276. dymos/grid_refinement/ph_adaptive/__init__.py +0 -0
  277. dymos/grid_refinement/ph_adaptive/ph_adaptive.py +122 -0
  278. dymos/grid_refinement/refinement.py +93 -0
  279. dymos/grid_refinement/test/test_error_estimation.py +117 -0
  280. dymos/grid_refinement/test/test_grid_refinement.py +145 -0
  281. dymos/grid_refinement/write_iteration.py +95 -0
  282. dymos/load_case.py +207 -0
  283. dymos/models/__init__.py +0 -0
  284. dymos/models/atmosphere/__init__.py +1 -0
  285. dymos/models/atmosphere/atmos_1976.py +1674 -0
  286. dymos/models/atmosphere/test/__init__.py +0 -0
  287. dymos/models/atmosphere/test/test_atmos.py +104 -0
  288. dymos/models/eom/__init__.py +1 -0
  289. dymos/models/eom/flight_path_eom_2d.py +201 -0
  290. dymos/models/eom/test/__init__.py +0 -0
  291. dymos/models/eom/test/test_flight_path_eom_2d.py +145 -0
  292. dymos/phase/__init__.py +3 -0
  293. dymos/phase/analytic_phase.py +476 -0
  294. dymos/phase/options.py +706 -0
  295. dymos/phase/phase.py +3064 -0
  296. dymos/phase/simulation_phase.py +277 -0
  297. dymos/phase/test/__init__.py +0 -0
  298. dymos/phase/test/test_add_boundary_constraint.py +216 -0
  299. dymos/phase/test/test_add_parameter_types.py +84 -0
  300. dymos/phase/test/test_add_path_constraint.py +186 -0
  301. dymos/phase/test/test_analytic_phase.py +673 -0
  302. dymos/phase/test/test_implicit_duration.py +192 -0
  303. dymos/phase/test/test_input_parameter_connections.py +132 -0
  304. dymos/phase/test/test_interp.py +144 -0
  305. dymos/phase/test/test_phase.py +713 -0
  306. dymos/phase/test/test_set_time_options.py +251 -0
  307. dymos/phase/test/test_simulate.py +140 -0
  308. dymos/phase/test/test_sized_input_parameters.py +263 -0
  309. dymos/phase/test/test_state_discovery.py +253 -0
  310. dymos/phase/test/test_time_targets.py +396 -0
  311. dymos/phase/test/test_time_units.py +63 -0
  312. dymos/phase/test/test_timeseries.py +750 -0
  313. dymos/run_problem.py +158 -0
  314. dymos/test/__init__.py +0 -0
  315. dymos/test/test_check_partials.py +414 -0
  316. dymos/test/test_lint_docstrings.py +162 -0
  317. dymos/test/test_load_case.py +380 -0
  318. dymos/test/test_options.py +40 -0
  319. dymos/test/test_pycodestyle.py +111 -0
  320. dymos/test/test_readme.py +53 -0
  321. dymos/test/test_run_problem.py +908 -0
  322. dymos/trajectory/__init__.py +1 -0
  323. dymos/trajectory/options.py +99 -0
  324. dymos/trajectory/phase_linkage_comp.py +148 -0
  325. dymos/trajectory/test/__init__.py +0 -0
  326. dymos/trajectory/test/test_link_phases.py +127 -0
  327. dymos/trajectory/test/test_phase_linkage_comp.py +126 -0
  328. dymos/trajectory/test/test_t_initial_bounds.py +501 -0
  329. dymos/trajectory/test/test_trajectory.py +1906 -0
  330. dymos/trajectory/test/test_trajectory_parameters.py +644 -0
  331. dymos/trajectory/trajectory.py +1410 -0
  332. dymos/transcriptions/__init__.py +6 -0
  333. dymos/transcriptions/analytic/__init__.py +0 -0
  334. dymos/transcriptions/analytic/analytic.py +506 -0
  335. dymos/transcriptions/common/__init__.py +5 -0
  336. dymos/transcriptions/common/continuity_comp.py +434 -0
  337. dymos/transcriptions/common/control_comp.py +500 -0
  338. dymos/transcriptions/common/parameter_comp.py +191 -0
  339. dymos/transcriptions/common/test/__init__.py +0 -0
  340. dymos/transcriptions/common/test/test_continuity_comp.py +179 -0
  341. dymos/transcriptions/common/test/test_control_group.py +51 -0
  342. dymos/transcriptions/common/test/test_control_interp_comp.py +488 -0
  343. dymos/transcriptions/common/test/test_time_comp.py +141 -0
  344. dymos/transcriptions/common/time_comp.py +92 -0
  345. dymos/transcriptions/common/timeseries_output_comp.py +389 -0
  346. dymos/transcriptions/explicit_shooting/__init__.py +1 -0
  347. dymos/transcriptions/explicit_shooting/barycentric_control_interp_comp.py +618 -0
  348. dymos/transcriptions/explicit_shooting/cubic_spline_control_interp_comp.py +203 -0
  349. dymos/transcriptions/explicit_shooting/explicit_shooting.py +862 -0
  350. dymos/transcriptions/explicit_shooting/explicit_shooting_continuity_comp.py +254 -0
  351. dymos/transcriptions/explicit_shooting/ode_evaluation_group.py +368 -0
  352. dymos/transcriptions/explicit_shooting/ode_integration_comp.py +857 -0
  353. dymos/transcriptions/explicit_shooting/state_rate_collector_comp.py +82 -0
  354. dymos/transcriptions/explicit_shooting/tau_comp.py +135 -0
  355. dymos/transcriptions/explicit_shooting/test/__init__.py +0 -0
  356. dymos/transcriptions/explicit_shooting/test/test_explicit_shooting.py +655 -0
  357. dymos/transcriptions/explicit_shooting/test/test_ode_evaluation_group.py +121 -0
  358. dymos/transcriptions/explicit_shooting/test/test_ode_integration_comp.py +257 -0
  359. dymos/transcriptions/explicit_shooting/test/test_tau_comp.py +60 -0
  360. dymos/transcriptions/explicit_shooting/vandermonde_control_interp_comp.py +402 -0
  361. dymos/transcriptions/grid_data.py +850 -0
  362. dymos/transcriptions/picard_shooting/__init__.py +0 -0
  363. dymos/transcriptions/picard_shooting/birkhoff_picard_iter_group.py +113 -0
  364. dymos/transcriptions/picard_shooting/birkhoff_picard_update_comp.py +269 -0
  365. dymos/transcriptions/picard_shooting/multiple_shooting_iter_group.py +107 -0
  366. dymos/transcriptions/picard_shooting/multiple_shooting_update_comp.py +216 -0
  367. dymos/transcriptions/picard_shooting/picard_shooting.py +851 -0
  368. dymos/transcriptions/picard_shooting/states_comp.py +109 -0
  369. dymos/transcriptions/picard_shooting/test/test_birkhoff_picard_iter_group.py +301 -0
  370. dymos/transcriptions/picard_shooting/test/test_multiple_shooting_iter_group.py +230 -0
  371. dymos/transcriptions/pseudospectral/__init__.py +0 -0
  372. dymos/transcriptions/pseudospectral/birkhoff.py +782 -0
  373. dymos/transcriptions/pseudospectral/components/__init__.py +8 -0
  374. dymos/transcriptions/pseudospectral/components/birkhoff_boundary_group.py +154 -0
  375. dymos/transcriptions/pseudospectral/components/birkhoff_defect_comp.py +346 -0
  376. dymos/transcriptions/pseudospectral/components/birkhoff_iter_group.py +252 -0
  377. dymos/transcriptions/pseudospectral/components/collocation_comp.py +182 -0
  378. dymos/transcriptions/pseudospectral/components/control_endpoint_defect_comp.py +119 -0
  379. dymos/transcriptions/pseudospectral/components/gauss_lobatto_interleave_comp.py +158 -0
  380. dymos/transcriptions/pseudospectral/components/state_independents.py +214 -0
  381. dymos/transcriptions/pseudospectral/components/state_interp_comp.py +318 -0
  382. dymos/transcriptions/pseudospectral/components/test/__init__.py +0 -0
  383. dymos/transcriptions/pseudospectral/components/test/test_birkhoff_collocation_defect.py +130 -0
  384. dymos/transcriptions/pseudospectral/components/test/test_birkhoff_iter_group.py +145 -0
  385. dymos/transcriptions/pseudospectral/components/test/test_collocation_defect_opt.py +101 -0
  386. dymos/transcriptions/pseudospectral/components/test/test_collocation_defect_sol_opt.py +209 -0
  387. dymos/transcriptions/pseudospectral/components/test/test_collocation_defect_solver.py +385 -0
  388. dymos/transcriptions/pseudospectral/components/test/test_control_endpoint_defect_comp.py +70 -0
  389. dymos/transcriptions/pseudospectral/components/test/test_gauss_lobatto_interleave_comp.py +108 -0
  390. dymos/transcriptions/pseudospectral/components/test/test_state_interp_comp.py +426 -0
  391. dymos/transcriptions/pseudospectral/components/time_duration_comp.py +211 -0
  392. dymos/transcriptions/pseudospectral/gauss_lobatto.py +604 -0
  393. dymos/transcriptions/pseudospectral/pseudospectral_base.py +630 -0
  394. dymos/transcriptions/pseudospectral/radau_pseudospectral.py +445 -0
  395. dymos/transcriptions/pseudospectral/test/__init__.py +0 -0
  396. dymos/transcriptions/pseudospectral/test/test_ps_base.py +96 -0
  397. dymos/transcriptions/transcription_base.py +795 -0
  398. dymos/utils/__init__.py +0 -0
  399. dymos/utils/birkhoff.py +69 -0
  400. dymos/utils/cgl.py +94 -0
  401. dymos/utils/constants.py +13 -0
  402. dymos/utils/hermite.py +148 -0
  403. dymos/utils/indexing.py +118 -0
  404. dymos/utils/interpolate.py +250 -0
  405. dymos/utils/introspection.py +1169 -0
  406. dymos/utils/lagrange.py +72 -0
  407. dymos/utils/lg.py +89 -0
  408. dymos/utils/lgl.py +105 -0
  409. dymos/utils/lgr.py +120 -0
  410. dymos/utils/misc.py +310 -0
  411. dymos/utils/ode_utils.py +277 -0
  412. dymos/utils/test/__init__.py +0 -0
  413. dymos/utils/test/test_birkhoff.py +25 -0
  414. dymos/utils/test/test_cgl.py +44 -0
  415. dymos/utils/test/test_hermite.py +69 -0
  416. dymos/utils/test/test_indexing.py +40 -0
  417. dymos/utils/test/test_introspection.py +44 -0
  418. dymos/utils/test/test_lg.py +43 -0
  419. dymos/utils/test/test_lgl.py +53 -0
  420. dymos/utils/test/test_lgr.py +60 -0
  421. dymos/utils/test/test_misc.py +25 -0
  422. dymos/utils/test/test_testing_utils.py +512 -0
  423. dymos/utils/testing_utils.py +521 -0
  424. dymos/visualization/__init__.py +0 -0
  425. dymos/visualization/linkage/__init__.py +0 -0
  426. dymos/visualization/linkage/js/DmLinkageCellRenderer.js +90 -0
  427. dymos/visualization/linkage/js/DmLinkageDiagram.js +43 -0
  428. dymos/visualization/linkage/js/DmLinkageLegend.js +93 -0
  429. dymos/visualization/linkage/js/DmLinkageMatrix.js +322 -0
  430. dymos/visualization/linkage/js/DmLinkageMatrixCell.js +81 -0
  431. dymos/visualization/linkage/js/DmLinkageModelData.js +23 -0
  432. dymos/visualization/linkage/js/DmLinkageStyle.js +99 -0
  433. dymos/visualization/linkage/js/DmLinkageSymbolType.js +42 -0
  434. dymos/visualization/linkage/js/DmLinkageTreeNode.js +160 -0
  435. dymos/visualization/linkage/js/DmLinkageUserInterface.js +27 -0
  436. dymos/visualization/linkage/js/DmLinkage_main.js +25 -0
  437. dymos/visualization/linkage/report.py +409 -0
  438. dymos/visualization/linkage/report_template.html +285 -0
  439. dymos/visualization/linkage/style/linkage_report.css +114 -0
  440. dymos/visualization/linkage/test/__init__.py +0 -0
  441. dymos/visualization/linkage/test/linkage_report_ui_test.py +749 -0
  442. dymos/visualization/linkage/test/model_data.dat +1 -0
  443. dymos/visualization/linkage/test/test_gui.py +16 -0
  444. dymos/visualization/linkage/test/test_linkage_report.py +257 -0
  445. dymos/visualization/test/__init__.py +0 -0
  446. dymos/visualization/test/test_timeseries_plots.py +600 -0
  447. dymos/visualization/timeseries/__init__.py +0 -0
  448. dymos/visualization/timeseries/bokeh_timeseries_report.py +604 -0
  449. dymos/visualization/timeseries_plots.py +432 -0
  450. dymos-1.13.1.dist-info/METADATA +272 -0
  451. dymos-1.13.1.dist-info/RECORD +454 -0
  452. dymos-1.13.1.dist-info/WHEEL +4 -0
  453. dymos-1.13.1.dist-info/entry_points.txt +2 -0
  454. dymos-1.13.1.dist-info/licenses/LICENSE +189 -0
dymos/__init__.py ADDED
@@ -0,0 +1,12 @@
1
+ __version__ = '1.13.1'
2
+
3
+
4
+ from .phase import Phase, AnalyticPhase
5
+ from .transcriptions import GaussLobatto, Radau, ExplicitShooting, Analytic, \
6
+ Birkhoff, PicardShooting
7
+ from .transcriptions.grid_data import GaussLobattoGrid, ChebyshevGaussLobattoGrid, \
8
+ RadauGrid, UniformGrid, BirkhoffGrid
9
+ from .trajectory.trajectory import Trajectory
10
+ from .run_problem import run_problem
11
+ from .load_case import load_case
12
+ from ._options import options
dymos/_options.py ADDED
@@ -0,0 +1,30 @@
1
+ import os
2
+
3
+ from openmdao.api import OptionsDictionary
4
+
5
+
6
+ options = OptionsDictionary()
7
+
8
+ _env_check_partials = os.environ.get('DYMOS_CHECK_PARTIALS', '0')
9
+ _icp_default = _env_check_partials.lower() in ('1', 'yes', 'true')
10
+
11
+
12
+ def _removed_option(name, value):
13
+ if value is not None:
14
+ raise ValueError(f'Option {name} has been replaced by '
15
+ 'Phase.timeseries_options["use_prefix"].')
16
+
17
+
18
+ options.declare('include_check_partials', default=_icp_default, types=bool,
19
+ desc='If True, include dymos components when checking partials.')
20
+
21
+ options.declare('plots', default='bokeh', values=['matplotlib', 'bokeh'],
22
+ desc='The plot library used to generate output plots for Dymos.')
23
+
24
+ options.declare('notebook_mode', default=False, types=bool,
25
+ desc='If True, provide notebook-enhanced plots and outputs.')
26
+
27
+ options.declare('use_timeseries_prefix', default=None, allow_none=True,
28
+ check_valid=_removed_option,
29
+ desc='Note: This option is no longer valid and has been '
30
+ 'replaced by Phase.timeseries_options["use_prefix"].')
File without changes
File without changes
File without changes
@@ -0,0 +1,19 @@
1
+ import numpy as np
2
+ import openmdao.api as om
3
+
4
+ from .crm_data import h_bp, alpha_bp, mach_bp, eta_bp, CL_data, CD_data, CM_data
5
+
6
+
7
+ class AeroCoefComp(om.MetaModelStructuredComp):
8
+ """ Interpolates aerodynamic coefficients for the NASA Common Research Model. """
9
+
10
+ def setup(self):
11
+ nn = self.options['vec_size']
12
+ self.add_input(name='mach', val=0.2 * np.ones(nn), units=None, training_data=mach_bp)
13
+ self.add_input(name='alpha', val=0.0 * np.ones(nn), units='deg', training_data=alpha_bp)
14
+ self.add_input(name='alt', val=0.0 * np.ones(nn), units='ft', training_data=h_bp)
15
+ self.add_input(name='eta', val=0.0 * np.ones(nn), units='deg', training_data=eta_bp)
16
+
17
+ self.add_output(name='CL', val=np.zeros(nn), units=None, training_data=CL_data)
18
+ self.add_output(name='CD', val=np.zeros(nn), units=None, training_data=CD_data + 0.015)
19
+ self.add_output(name='CM', val=np.zeros(nn), units=None, training_data=CM_data)
@@ -0,0 +1,51 @@
1
+ import numpy as np
2
+
3
+ import openmdao.api as om
4
+
5
+
6
+ class AeroForcesComp(om.ExplicitComponent):
7
+
8
+ def initialize(self):
9
+ self.options.declare('num_nodes', types=int)
10
+
11
+ def setup(self):
12
+ nn = self.options['num_nodes']
13
+
14
+ self.add_input('q', val=np.ones(nn), desc='dynamic pressure', units='Pa')
15
+ self.add_input('S', val=np.ones(nn), desc='aerodynamic reference area', units='m**2')
16
+ self.add_input('CL', val=np.ones(nn), desc='lift coefficient', units=None)
17
+ self.add_input('CD', val=np.ones(nn), desc='drag coefficient', units=None)
18
+
19
+ self.add_output('L', val=np.ones(nn), desc='lift', units='N')
20
+ self.add_output('D', val=np.ones(nn), desc='drag', units='N')
21
+
22
+ ar = np.arange(nn)
23
+
24
+ self.declare_partials('L', 'q', rows=ar, cols=ar)
25
+ self.declare_partials('L', 'S', rows=ar, cols=ar)
26
+ self.declare_partials('L', 'CL', rows=ar, cols=ar)
27
+
28
+ self.declare_partials('D', 'q', rows=ar, cols=ar)
29
+ self.declare_partials('D', 'S', rows=ar, cols=ar)
30
+ self.declare_partials('D', 'CD', rows=ar, cols=ar)
31
+
32
+ def compute(self, inputs, outputs):
33
+ qS = inputs['q'] * inputs['S']
34
+
35
+ outputs['L'] = qS * inputs['CL']
36
+ outputs['D'] = qS * inputs['CD']
37
+
38
+ def compute_partials(self, inputs, partials):
39
+ q = inputs['q']
40
+ S = inputs['S']
41
+ CL = inputs['CL']
42
+ CD = inputs['CD']
43
+ qS = inputs['q'] * inputs['S']
44
+
45
+ partials['L', 'q'] = S * CL
46
+ partials['L', 'S'] = q * CL
47
+ partials['L', 'CL'] = qS
48
+
49
+ partials['D', 'q'] = S * CD
50
+ partials['D', 'S'] = q * CD
51
+ partials['D', 'CD'] = qS
@@ -0,0 +1,29 @@
1
+ import openmdao.api as om
2
+ from .aero_forces_comp import AeroForcesComp
3
+ from .interpND_aero_coef_comp import InterpNDAeroCoeffComp, setup_surrogates_all
4
+
5
+
6
+ class AerodynamicsGroup(om.Group):
7
+ """
8
+ The purpose of the Aerodynamics is to compute the lift and
9
+ drag forces on the aircraft.
10
+ """
11
+ def initialize(self):
12
+ self.options.declare('num_nodes', types=int)
13
+
14
+ def setup(self):
15
+ n = self.options['num_nodes']
16
+
17
+ interpND_CL, interpND_CD, interpND_CM, interp_num = setup_surrogates_all()
18
+
19
+ self.add_subsystem(name='aero_coef_comp',
20
+ subsys=InterpNDAeroCoeffComp(vec_size=n, interpND_CL=interpND_CL, interpND_CD=interpND_CD,
21
+ interpND_CM=interpND_CM,
22
+ interp_num=interp_num),
23
+ promotes_inputs=[('M', 'mach'), 'alpha', ('h', 'alt'), 'eta'],
24
+ promotes_outputs=['CL', 'CD', 'CM'])
25
+
26
+ self.add_subsystem(name='aero_forces_comp',
27
+ subsys=AeroForcesComp(num_nodes=n),
28
+ promotes_inputs=['q', 'S', 'CL', 'CD'],
29
+ promotes_outputs=['L', 'D'])