From 4fece664686261d9daa25cfed86f9a95f9cafdb6 Mon Sep 17 00:00:00 2001 From: <> Date: Thu, 29 Jun 2023 14:18:00 +0000 Subject: [PATCH] Update documentation --- ...d2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png | Bin 39069 -> 0 bytes ...7b6abfb3f54e82034b2c42e882f44725a41e67.png | Bin 0 -> 39063 bytes ...d9d02d2b3bab5e939848e01171e71cb5f99df.png} | Bin 24613 -> 24613 bytes _modules/dymos/phase/analytic_phase.html | 4 + _modules/dymos/trajectory/trajectory.html | 15 +- .../balanced_field/balanced_field.ipynb | 8 +- .../balanced_field_funccomp.ipynb | 8 +- .../brachistochrone/brachistochrone.ipynb | 8 +- .../brachistochrone_tandem_phases.ipynb | 14 +- .../brachistochrone_upstream_controls.ipynb | 12 +- ...chrone_upstream_init_duration_states.ipynb | 14 +- .../brachistochrone_upstream_states.ipynb | 14 +- .../bryson_denham/bryson_denham.ipynb | 16 +- .../cannonball_implicit_duration.ipynb | 27 +- _sources/examples/cart_pole/cart_pole.ipynb | 16 +- .../commercial_aircraft.ipynb | 2 +- .../double_integrator/double_integrator.ipynb | 10 +- .../finite_burn_orbit_raise.ipynb | 8 +- _sources/examples/hull/hull_problem.ipynb | 12 +- .../hypersensitive/hypersensitive.ipynb | 10 +- .../length_constrained_brachistochrone.ipynb | 16 +- .../min_time_climb/min_time_climb.ipynb | 4 +- .../examples/mountain_car/mountain_car.ipynb | 12 +- .../multi_phase_cannonball.ipynb | 28 +- _sources/examples/racecar/racecar.ipynb | 24 +- _sources/examples/reentry/reentry.ipynb | 8 +- .../robertson_problem/robertson_problem.ipynb | 8 +- _sources/examples/ssto_earth/ssto_earth.ipynb | 18 +- .../ssto_moon_linear_tangent.ipynb | 8 +- .../ssto_moon_polynomial_controls.ipynb | 12 +- _sources/examples/vanderpol/vanderpol.ipynb | 12 +- .../examples/water_rocket/water_rocket.ipynb | 52 +- .../connect_scalar_parameters_to_ode.ipynb | 12 +- _sources/faq/downstream_analysis.ipynb | 2 +- _sources/faq/tandem_phases.ipynb | 14 +- .../features/phases/analytic_phases.ipynb | 6 +- _sources/features/phases/timeseries.ipynb | 16 +- .../intro_to_dymos/intro_ivp.ipynb | 12 +- .../intro_to_dymos/intro_segments.ipynb | 12 +- contributing/contributing.html | 16 +- examples/balanced_field/balanced_field.html | 74 +- .../balanced_field_funccomp.html | 48 +- examples/brachistochrone/brachistochrone.html | 62 +- .../brachistochrone_tandem_phases.html | 32 +- .../brachistochrone_upstream_controls.html | 26 +- ...ochrone_upstream_init_duration_states.html | 28 +- .../brachistochrone_upstream_states.html | 28 +- examples/bryson_denham/bryson_denham.html | 98 +- .../cannonball_implicit_duration.html | 219 +- examples/cart_pole/cart_pole.html | 48 +- .../commercial_aircraft.html | 66 +- .../double_integrator/double_integrator.html | 34 +- .../finite_burn_orbit_raise.html | 36 +- examples/hull/hull_problem.html | 54 +- examples/hypersensitive/hypersensitive.html | 154 +- .../length_constrained_brachistochrone.html | 28 +- examples/min_time_climb/min_time_climb.html | 200 +- examples/mountain_car/mountain_car.html | 103 +- .../multi_phase_cannonball.html | 262 +- .../multibranch_trajectory.html | 10 +- examples/racecar/racecar.html | 32 +- examples/reentry/reentry.html | 44 +- .../robertson_problem/robertson_problem.html | 10 +- examples/ssto_earth/ssto_earth.html | 155 +- .../ssto_moon_linear_tangent.html | 152 +- .../ssto_moon_polynomial_controls.html | 632 ++-- examples/vanderpol/vanderpol.html | 130 +- examples/water_rocket/water_rocket.html | 2668 +++++++------ faq/connect_scalar_parameters_to_ode.html | 18 +- faq/downstream_analysis.html | 2 +- faq/tandem_phases.html | 472 +-- faq/use_partial_coloring.html | 3340 ++++++++--------- features/phases/analytic_phases.html | 30 +- features/phases/constraints.html | 8 +- features/phases/phases.html | 8 +- features/phases/timeseries.html | 16 +- features/phases/variables.html | 2 +- features/trajectories/trajectories.html | 4 +- getting_started/collocation.html | 24 +- getting_started/defining_odes.html | 6 +- getting_started/intro_to_dymos/intro_ivp.html | 24 +- .../intro_to_dymos/intro_segments.html | 16 +- getting_started/optimal_control.html | 12 +- searchindex.js | 2 +- 84 files changed, 4939 insertions(+), 4968 deletions(-) delete mode 100644 _images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png create mode 100644 _images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png rename _images/{1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png => bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png} (99%) diff --git a/_images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png b/_images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png deleted file mode 100644 index 38106365671059a41c47c841fe0e3528bbc3972a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39069 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 C#S)tLxq{t;rwn!Vq&ju8oskVBJiuP?t-%+ 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 diff --git a/_images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png b/_images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png new file mode 100644 index 0000000000000000000000000000000000000000..b530d8871f24f7e6b14439c73a77c05a28ce4478 GIT binary patch literal 39063 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 N`_y&SvQ;dv{$GeX<7of@ literal 0 HcmV?d00001 diff --git a/_images/1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png b/_images/bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png similarity index 99% rename from _images/1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png rename to _images/bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png index fff29cb1d1d4a219e80767f1ba702f01d7be4845..476b98cca7db4982b3ff6c701822868d772db0eb 100644 GIT binary patch delta 46 zcmZ2_fN|*o#tp`z+}p}?*LCmeGp%2vxYSource code for dymos.phase.analytic_phase

         if self.parameter_options:
             transcription.setup_parameters(self)
 
+        # Never allow state rate outputs for analytic phases
+        self.timeseries_options['include_state_rates'] = False
+        self.timeseries_options._dict['include_state_rates']['values'] = [False]
+
         transcription.setup_states(self)
         self._check_ode()
         transcription.setup_ode(self)
diff --git a/_modules/dymos/trajectory/trajectory.html b/_modules/dymos/trajectory/trajectory.html
index 1706e250b..7c9e21c01 100644
--- a/_modules/dymos/trajectory/trajectory.html
+++ b/_modules/dymos/trajectory/trajectory.html
@@ -944,6 +944,9 @@ 

Source code for dymos.trajectory.trajectory

         units = {'a': _unspecified, 'b': _unspecified}
         shapes = {'a': _unspecified, 'b': _unspecified}
 
+        use_prefix = {'a': phase_a.timeseries_options['use_prefix'],
+                      'b': phase_b.timeseries_options['use_prefix']}
+
         for i in ('a', 'b'):
             if classes[i] == 't':
                 time_name = phases[i].time_options['name']
@@ -956,17 +959,17 @@ 

Source code for dymos.trajectory.trajectory

                 units[i] = phases[i].time_options['units']
                 shapes[i] = (1,)
             elif classes[i] == 'state':
-                prefix = 'states:' if dymos_options['use_timeseries_prefix'] else ''
+                prefix = 'states:' if use_prefix[i] else ''
                 sources[i] = f'timeseries.{prefix}{vars[i]}'
                 units[i] = phases[i].state_options[vars[i]]['units']
                 shapes[i] = phases[i].state_options[vars[i]]['shape']
             elif classes[i] in {'indep_control', 'input_control'}:
-                prefix = 'controls:' if dymos_options['use_timeseries_prefix'] else ''
+                prefix = 'controls:' if use_prefix[i] else ''
                 sources[i] = f'timeseries.{prefix}{vars[i]}'
                 units[i] = phases[i].control_options[vars[i]]['units']
                 shapes[i] = phases[i].control_options[vars[i]]['shape']
             elif classes[i] in {'control_rate', 'control_rate2'}:
-                prefix = 'control_rates:' if dymos_options['use_timeseries_prefix'] else ''
+                prefix = 'control_rates:' if use_prefix[i] else ''
                 sources[i] = f'timeseries.{prefix}{vars[i]}'
                 control_name = vars[i][:-5] if classes[i] == 'control_rate' else vars[i][:-6]
                 units[i] = phases[i].control_options[control_name]['units']
@@ -974,12 +977,12 @@ 

Source code for dymos.trajectory.trajectory

                 units[i] = get_rate_units(units[i], phases[i].time_options['units'], deriv=deriv)
                 shapes[i] = phases[i].control_options[control_name]['shape']
             elif classes[i] in {'indep_polynomial_control', 'input_polynomial_control'}:
-                prefix = 'polynomial_controls:' if dymos_options['use_timeseries_prefix'] else ''
+                prefix = 'polynomial_controls:' if use_prefix[i] else ''
                 sources[i] = f'timeseries.{prefix}{vars[i]}'
                 units[i] = phases[i].polynomial_control_options[vars[i]]['units']
                 shapes[i] = phases[i].polynomial_control_options[vars[i]]['shape']
             elif classes[i] in {'polynomial_control_rate', 'polynomial_control_rate2'}:
-                prefix = 'polynomial_control_rates:' if dymos_options['use_timeseries_prefix'] else ''
+                prefix = 'polynomial_control_rates:' if use_prefix[i] else ''
                 sources[i] = f'timeseries.{prefix}{vars[i]}'
                 control_name = vars[i][:-5] if classes[i] == 'polynomial_control_rate' else vars[i][:-6]
                 control_units = phases[i].polynomial_control_options[control_name]['units']
@@ -1145,7 +1148,7 @@ 

Source code for dymos.trajectory.trajectory

                     }
 
         def _get_prefixed_var(var, phase):
-            if dymos_options['use_timeseries_prefix']:
+            if phase.timeseries_options['use_prefix']:
                 return f'{prefixes[phase.classify_var(var)]}{var}'
             else:
                 return var
diff --git a/_sources/examples/balanced_field/balanced_field.ipynb b/_sources/examples/balanced_field/balanced_field.ipynb
index e67aaaf2c..9d8da10c3 100644
--- a/_sources/examples/balanced_field/balanced_field.ipynb
+++ b/_sources/examples/balanced_field/balanced_field.ipynb
@@ -714,8 +714,8 @@
     "\n",
     "fig, axes = plt.subplots(2, 1, sharex=True, gridspec_kw={'top': 0.92}, figsize=(12,6))\n",
     "for phase in ['br_to_v1', 'rto', 'v1_to_vr', 'rotate', 'climb']:\n",
-    "    r = sim_case.get_val(f'traj.{phase}.timeseries.states:r', units='ft')\n",
-    "    v = sim_case.get_val(f'traj.{phase}.timeseries.states:v', units='kn')\n",
+    "    r = sim_case.get_val(f'traj.{phase}.timeseries.r', units='ft')\n",
+    "    v = sim_case.get_val(f'traj.{phase}.timeseries.v', units='kn')\n",
     "    t = sim_case.get_val(f'traj.{phase}.timeseries.time', units='s')\n",
     "    axes[0].plot(t, r, '-', label=phase)\n",
     "    axes[1].plot(t, v, '-', label=phase)\n",
@@ -727,10 +727,10 @@
     "axes[1].grid(True)\n",
     "\n",
     "tv1 = sim_case.get_val('traj.br_to_v1.timeseries.time', units='s')[-1, 0]\n",
-    "v1 = sim_case.get_val('traj.br_to_v1.timeseries.states:v', units='kn')[-1, 0]\n",
+    "v1 = sim_case.get_val('traj.br_to_v1.timeseries.v', units='kn')[-1, 0]\n",
     "\n",
     "tf_rto = sim_case.get_val('traj.rto.timeseries.time', units='s')[-1, 0]\n",
-    "rf_rto = sim_case.get_val('traj.rto.timeseries.states:r', units='ft')[-1, 0]\n",
+    "rf_rto = sim_case.get_val('traj.rto.timeseries.r', units='ft')[-1, 0]\n",
     "\n",
     "axes[0].annotate(f'field length = {r[-1, 0]:5.1f} ft', xy=(t[-1, 0], r[-1, 0]),\n",
     "                 xycoords='data', xytext=(0.7, 0.5),\n",
diff --git a/_sources/examples/balanced_field/balanced_field_funccomp.ipynb b/_sources/examples/balanced_field/balanced_field_funccomp.ipynb
index c40f0646f..9649a9db6 100644
--- a/_sources/examples/balanced_field/balanced_field_funccomp.ipynb
+++ b/_sources/examples/balanced_field/balanced_field_funccomp.ipynb
@@ -451,8 +451,8 @@
     "\n",
     "fig, axes = plt.subplots(2, 1, sharex=True, gridspec_kw={'top': 0.92}, figsize=(12, 6))\n",
     "for phase in ['br_to_v1', 'rto', 'v1_to_vr', 'rotate', 'climb']:\n",
-    "    r = sim_case.get_val(f'traj.{phase}.timeseries.states:r', units='ft')\n",
-    "    v = sim_case.get_val(f'traj.{phase}.timeseries.states:v', units='kn')\n",
+    "    r = sim_case.get_val(f'traj.{phase}.timeseries.r', units='ft')\n",
+    "    v = sim_case.get_val(f'traj.{phase}.timeseries.v', units='kn')\n",
     "    t = sim_case.get_val(f'traj.{phase}.timeseries.time', units='s')\n",
     "    axes[0].plot(t, r, '-', label=phase)\n",
     "    axes[1].plot(t, v, '-', label=phase)\n",
@@ -464,10 +464,10 @@
     "axes[1].grid(True)\n",
     "\n",
     "tv1 = sim_case.get_val('traj.br_to_v1.timeseries.time', units='s')[-1, 0]\n",
-    "v1 = sim_case.get_val('traj.br_to_v1.timeseries.states:v', units='kn')[-1, 0]\n",
+    "v1 = sim_case.get_val('traj.br_to_v1.timeseries.v', units='kn')[-1, 0]\n",
     "\n",
     "tf_rto = sim_case.get_val('traj.rto.timeseries.time', units='s')[-1, 0]\n",
-    "rf_rto = sim_case.get_val('traj.rto.timeseries.states:r', units='ft')[-1, 0]\n",
+    "rf_rto = sim_case.get_val('traj.rto.timeseries.r', units='ft')[-1, 0]\n",
     "\n",
     "axes[0].annotate(f'field length = {r[-1, 0]:5.1f} ft', xy=(t[-1, 0], r[-1, 0]),\n",
     "                 xycoords='data', xytext=(0.7, 0.5),\n",
diff --git a/_sources/examples/brachistochrone/brachistochrone.ipynb b/_sources/examples/brachistochrone/brachistochrone.ipynb
index 1047031d4..29c5a8af9 100644
--- a/_sources/examples/brachistochrone/brachistochrone.ipynb
+++ b/_sources/examples/brachistochrone/brachistochrone.ipynb
@@ -505,9 +505,9 @@
     "# Generate the explicitly simulated trajectory\n",
     "exp_out = traj.simulate()\n",
     "\n",
-    "plot_results([('traj.phase0.timeseries.states:x', 'traj.phase0.timeseries.states:y',\n",
+    "plot_results([('traj.phase0.timeseries.x', 'traj.phase0.timeseries.y',\n",
     "               'x (m)', 'y (m)'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:theta',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.theta',\n",
     "               'time (s)', 'theta (deg)')],\n",
     "             title='Brachistochrone Solution\\nHigh-Order Gauss-Lobatto Method',\n",
     "             p_sol=p, p_sim=exp_out)\n",
@@ -649,9 +649,9 @@
    },
    "outputs": [],
    "source": [
-    "plot_results([('traj.phase0.timeseries.states:x', 'traj.phase0.timeseries.states:y',\n",
+    "plot_results([('traj.phase0.timeseries.x', 'traj.phase0.timeseries.y',\n",
     "               'x (m)', 'y (m)'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:theta',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.theta',\n",
     "               'time (s)', 'theta (deg)')],\n",
     "             title='Brachistochrone Solution\\nExplicit Shooting Method',\n",
     "             p_sol=p)\n",
diff --git a/_sources/examples/brachistochrone/brachistochrone_tandem_phases.ipynb b/_sources/examples/brachistochrone/brachistochrone_tandem_phases.ipynb
index 1d28978ea..819cc44bb 100644
--- a/_sources/examples/brachistochrone/brachistochrone_tandem_phases.ipynb
+++ b/_sources/examples/brachistochrone/brachistochrone_tandem_phases.ipynb
@@ -217,8 +217,8 @@
     "#\n",
     "p.model.connect('phase0.t_duration', 'phase1.t_duration')\n",
     "\n",
-    "p.model.connect('phase0.timeseries2.controls:theta', 'phase1.controls:theta')\n",
-    "p.model.connect('phase0.timeseries2.states:v', 'phase1.controls:v')\n",
+    "p.model.connect('phase0.timeseries2.theta', 'phase1.controls:theta')\n",
+    "p.model.connect('phase0.timeseries2.v', 'phase1.controls:v')\n",
     "\n",
     "# Minimize time\n",
     "phase1.add_objective('time', loc='final', ref=1)\n",
@@ -308,12 +308,12 @@
     "\n",
     "sol_case = om.CaseReader('dymos_solution.db').get_case('final')\n",
     "\n",
-    "sol_x = sol_case.get_val('phase0.timeseries.states:x')\n",
-    "sol_y = sol_case.get_val('phase0.timeseries.states:y')\n",
-    "sol_v = sol_case.get_val('phase0.timeseries.states:v')\n",
+    "sol_x = sol_case.get_val('phase0.timeseries.x')\n",
+    "sol_y = sol_case.get_val('phase0.timeseries.y')\n",
+    "sol_v = sol_case.get_val('phase0.timeseries.v')\n",
     "sol_t0 = sol_case.get_val('phase0.timeseries.time')\n",
     "sol_t1 = sol_case.get_val('phase1.timeseries.time')\n",
-    "sol_s = sol_case.get_val('phase1.timeseries.states:S')\n",
+    "sol_s = sol_case.get_val('phase1.timeseries.S')\n",
     "\n",
     "def add_plot(p, x, y, label, i):\n",
     "    circle = p.circle(x.ravel(), y.ravel(), color=c[i], size=5)\n",
@@ -357,7 +357,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.5"
+   "version": "3.11.0"
   }
  },
  "nbformat": 4,
diff --git a/_sources/examples/brachistochrone/brachistochrone_upstream_controls.ipynb b/_sources/examples/brachistochrone/brachistochrone_upstream_controls.ipynb
index d58843fcb..b4a959e99 100644
--- a/_sources/examples/brachistochrone/brachistochrone_upstream_controls.ipynb
+++ b/_sources/examples/brachistochrone/brachistochrone_upstream_controls.ipynb
@@ -185,12 +185,12 @@
     "# Plot the results\n",
     "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4.5))\n",
     "\n",
-    "axes[0].plot(p.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             p.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(p.get_val('traj.phase0.timeseries.x'),\n",
+    "             p.get_val('traj.phase0.timeseries.y'),\n",
     "             'ro', label='solution')\n",
     "\n",
-    "axes[0].plot(sim_out.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim_out.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(sim_out.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim_out.get_val('traj.phase0.timeseries.y'),\n",
     "             'b-', label='simulation')\n",
     "\n",
     "axes[0].set_xlabel('x (m)')\n",
@@ -199,11 +199,11 @@
     "axes[0].grid()\n",
     "\n",
     "axes[1].plot(p.get_val('traj.phase0.timeseries.time'),\n",
-    "             p.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             p.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'ro', label='solution')\n",
     "\n",
     "axes[1].plot(sim_out.get_val('traj.phase0.timeseries.time'),\n",
-    "             sim_out.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             sim_out.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'b-', label='simulation')\n",
     "\n",
     "axes[1].set_xlabel('time (s)')\n",
diff --git a/_sources/examples/brachistochrone/brachistochrone_upstream_init_duration_states.ipynb b/_sources/examples/brachistochrone/brachistochrone_upstream_init_duration_states.ipynb
index 4f24fe26f..14a3fd0e1 100644
--- a/_sources/examples/brachistochrone/brachistochrone_upstream_init_duration_states.ipynb
+++ b/_sources/examples/brachistochrone/brachistochrone_upstream_init_duration_states.ipynb
@@ -91,7 +91,7 @@
     "# Connect x0 to the state error component so we can constrain the given value of x0\n",
     "# to be equal to the value chosen in the phase.\n",
     "# p.model.connect('x0', 'state_error_comp.x0_target')\n",
-    "# p.model.connect('traj.phase0.timeseries.states:x', 'state_error_comp.x0_actual',\n",
+    "# p.model.connect('traj.phase0.timeseries.x', 'state_error_comp.x0_actual',\n",
     "#                 src_indices=[0])\n",
     "p.model.connect('t_initial', 'traj.phase0.t_initial')\n",
     "p.model.connect('t_duration', 'traj.phase0.t_duration')\n",
@@ -188,21 +188,21 @@
     "\n",
     "# Plot the results\n",
     "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4.5))\n",
-    "axes[0].plot(sol.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sol.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(sol.get_val('traj.phase0.timeseries.x'),\n",
+    "             sol.get_val('traj.phase0.timeseries.y'),\n",
     "             'ro', label='solution')\n",
-    "axes[0].plot(sim.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(sim.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim.get_val('traj.phase0.timeseries.y'),\n",
     "             'b-', label='simulation')\n",
     "axes[0].set_xlabel('x (m)')\n",
     "axes[0].set_ylabel('y (m/s)')\n",
     "axes[0].legend()\n",
     "axes[0].grid()\n",
     "axes[1].plot(sol.get_val('traj.phase0.timeseries.time'),\n",
-    "             sol.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             sol.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'ro', label='solution')\n",
     "axes[1].plot(sim.get_val('traj.phase0.timeseries.time'),\n",
-    "             sim.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             sim.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'b-', label='simulation')\n",
     "axes[1].set_xlabel('time (s)')\n",
     "axes[1].set_ylabel(r'$\\theta$ (deg)')\n",
diff --git a/_sources/examples/brachistochrone/brachistochrone_upstream_states.ipynb b/_sources/examples/brachistochrone/brachistochrone_upstream_states.ipynb
index 5d5f4cb77..d7651ee8a 100644
--- a/_sources/examples/brachistochrone/brachistochrone_upstream_states.ipynb
+++ b/_sources/examples/brachistochrone/brachistochrone_upstream_states.ipynb
@@ -107,7 +107,7 @@
     "# Connect x0 to the state error component so we can constrain the given value of x0\n",
     "# to be equal to the value chosen in the phase.\n",
     "p.model.connect('x0', 'state_error_comp.x0_target')\n",
-    "p.model.connect('traj.phase0.timeseries.states:x', 'state_error_comp.x0_actual', src_indices=[0])\n",
+    "p.model.connect('traj.phase0.timeseries.x', 'state_error_comp.x0_actual', src_indices=[0])\n",
     "\n",
     "#\n",
     "# Define a Trajectory object\n",
@@ -203,12 +203,12 @@
     "# Plot the results\n",
     "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4.5))\n",
     "\n",
-    "axes[0].plot(p.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             p.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(p.get_val('traj.phase0.timeseries.x'),\n",
+    "             p.get_val('traj.phase0.timeseries.y'),\n",
     "             'ro', label='solution')\n",
     "\n",
-    "axes[0].plot(sim_out.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim_out.get_val('traj.phase0.timeseries.states:y'),\n",
+    "axes[0].plot(sim_out.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim_out.get_val('traj.phase0.timeseries.y'),\n",
     "             'b-', label='simulation')\n",
     "\n",
     "axes[0].set_xlabel('x (m)')\n",
@@ -217,11 +217,11 @@
     "axes[0].grid()\n",
     "\n",
     "axes[1].plot(p.get_val('traj.phase0.timeseries.time'),\n",
-    "             p.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             p.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'ro', label='solution')\n",
     "\n",
     "axes[1].plot(sim_out.get_val('traj.phase0.timeseries.time'),\n",
-    "             sim_out.get_val('traj.phase0.timeseries.controls:theta', units='deg'),\n",
+    "             sim_out.get_val('traj.phase0.timeseries.theta', units='deg'),\n",
     "             'b-', label='simulation')\n",
     "\n",
     "axes[1].set_xlabel('time (s)')\n",
diff --git a/_sources/examples/bryson_denham/bryson_denham.ipynb b/_sources/examples/bryson_denham/bryson_denham.ipynb
index 4cb424ad0..33cb314c4 100644
--- a/_sources/examples/bryson_denham/bryson_denham.ipynb
+++ b/_sources/examples/bryson_denham/bryson_denham.ipynb
@@ -450,17 +450,17 @@
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
     "t = sol.get_val('traj.phase0.timeseries.time')\n",
-    "x = sol.get_val('traj.phase0.timeseries.states:x')\n",
-    "v = sol.get_val('traj.phase0.timeseries.states:v')\n",
-    "J = sol.get_val('traj.phase0.timeseries.states:J')\n",
-    "u = sol.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x = sol.get_val('traj.phase0.timeseries.x')\n",
+    "v = sol.get_val('traj.phase0.timeseries.v')\n",
+    "J = sol.get_val('traj.phase0.timeseries.J')\n",
+    "u = sol.get_val('traj.phase0.timeseries.u')\n",
     "h = np.sin(3 * x) / 3\n",
     "\n",
     "t_sim = sim.get_val('traj.phase0.timeseries.time')\n",
-    "x_sim = sim.get_val('traj.phase0.timeseries.states:x')\n",
-    "v_sim = sim.get_val('traj.phase0.timeseries.states:v')\n",
-    "J_sim = sim.get_val('traj.phase0.timeseries.states:J')\n",
-    "u_sim = sim.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x_sim = sim.get_val('traj.phase0.timeseries.x')\n",
+    "v_sim = sim.get_val('traj.phase0.timeseries.v')\n",
+    "J_sim = sim.get_val('traj.phase0.timeseries.J')\n",
+    "u_sim = sim.get_val('traj.phase0.timeseries.u')\n",
     "h_sim = np.sin(3 * x_sim) / 3\n",
     "\n",
     "fig = plt.figure(constrained_layout=True, figsize=(12, 4))\n",
diff --git a/_sources/examples/cannonball_implicit_duration/cannonball_implicit_duration.ipynb b/_sources/examples/cannonball_implicit_duration/cannonball_implicit_duration.ipynb
index 2eab4113c..98da7d170 100644
--- a/_sources/examples/cannonball_implicit_duration/cannonball_implicit_duration.ipynb
+++ b/_sources/examples/cannonball_implicit_duration/cannonball_implicit_duration.ipynb
@@ -372,9 +372,9 @@
     "print(f'optimal radius: {rad} m ')\n",
     "mass = p.get_val('size_comp.mass', units='kg')[0]\n",
     "print(f'cannonball mass: {mass} kg ')\n",
-    "angle = p.get_val('traj.phase.timeseries.states:gam', units='deg')[0, 0]\n",
+    "angle = p.get_val('traj.phase.timeseries.gam', units='deg')[0, 0]\n",
     "print(f'launch angle: {angle} deg')\n",
-    "max_range = p.get_val('traj.phase.timeseries.states:r')[-1, 0]\n",
+    "max_range = p.get_val('traj.phase.timeseries.r')[-1, 0]\n",
     "print(f'maximum range: {max_range} m')\n",
     "\n",
     "fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6))\n",
@@ -383,13 +383,13 @@
     "\n",
     "time_exp = exp_out.get_val('traj.phase.timeseries.time')\n",
     "\n",
-    "r_imp = p.get_val('traj.phase.timeseries.states:r')\n",
+    "r_imp = p.get_val('traj.phase.timeseries.r')\n",
     "\n",
-    "r_exp = exp_out.get_val('traj.phase.timeseries.states:r')\n",
+    "r_exp = exp_out.get_val('traj.phase.timeseries.r')\n",
     "\n",
-    "h_imp = p.get_val('traj.phase.timeseries.states:h')\n",
+    "h_imp = p.get_val('traj.phase.timeseries.h')\n",
     "\n",
-    "h_exp = exp_out.get_val('traj.phase.timeseries.states:h')\n",
+    "h_exp = exp_out.get_val('traj.phase.timeseries.h')\n",
     "\n",
     "axes.plot(r_imp, h_imp, 'bo')\n",
     "\n",
@@ -401,9 +401,9 @@
     "fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6))\n",
     "states = ['r', 'h', 'v', 'gam']\n",
     "for i, state in enumerate(states):\n",
-    "    x_imp = p.get_val(f'traj.phase.timeseries.states:{state}')\n",
+    "    x_imp = p.get_val(f'traj.phase.timeseries.{state}')\n",
     "\n",
-    "    x_exp = exp_out.get_val(f'traj.phase.timeseries.states:{state}')\n",
+    "    x_exp = exp_out.get_val(f'traj.phase.timeseries.{state}')\n",
     "\n",
     "    axes[i].set_ylabel(state)\n",
     "\n",
@@ -426,16 +426,9 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase.states:r')[-1],\n",
+    "assert_near_equal(p.get_val('traj.phase.timeseries.r')[-1],\n",
     "                  3183.25, tolerance=1.0E-2)"
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
@@ -463,7 +456,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.0"
+   "version": "3.11.4"
   }
  },
  "nbformat": 4,
diff --git a/_sources/examples/cart_pole/cart_pole.ipynb b/_sources/examples/cart_pole/cart_pole.ipynb
index a5c6e58bf..17d91e0f3 100644
--- a/_sources/examples/cart_pole/cart_pole.ipynb
+++ b/_sources/examples/cart_pole/cart_pole.ipynb
@@ -333,17 +333,17 @@
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
     "# plot time histories of x, x_dot, theta, theta_dot\n",
-    "plot_results([('traj.phase.timeseries.time', 'traj.phase.timeseries.states:x', 'time (s)', 'x (m)'),\n",
-    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.states:x_dot', 'time (s)', 'vx (m/s)'),\n",
-    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.states:theta', 'time (s)', 'theta (rad)'),\n",
-    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.states:theta_dot', 'time (s)', 'theta_dot (rad/s)'),\n",
-    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.controls:f', 'time (s)', 'control (N)')],\n",
+    "plot_results([('traj.phase.timeseries.time', 'traj.phase.timeseries.x', 'time (s)', 'x (m)'),\n",
+    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.x_dot', 'time (s)', 'vx (m/s)'),\n",
+    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.theta', 'time (s)', 'theta (rad)'),\n",
+    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.theta_dot', 'time (s)', 'theta_dot (rad/s)'),\n",
+    "              ('traj.phase.timeseries.time', 'traj.phase.timeseries.f', 'time (s)', 'control (N)')],\n",
     "             title='Cart-Pole Problem', p_sol=sol, p_sim=sim)\n",
     "\n",
     "# uncomment the following lines to show the cart-pole animation\n",
-    "### x = sol.get_val('traj.phase.timeseries.states:x', units='m')\n",
-    "### theta = sol.get_val('traj.phase.timeseries.states:theta', units='rad')\n",
-    "### force = sol.get_val('traj.phase.timeseries.controls:f', units='N')\n",
+    "### x = sol.get_val('traj.phase.timeseries.x', units='m')\n",
+    "### theta = sol.get_val('traj.phase.timeseries.theta', units='rad')\n",
+    "### force = sol.get_val('traj.phase.timeseries.f', units='N')\n",
     "### npts = len(x)\n",
     "\n",
     "### from dymos.examples.cart_pole.animate_cartpole import animate_cartpole\n",
diff --git a/_sources/examples/commercial_aircraft/commercial_aircraft.ipynb b/_sources/examples/commercial_aircraft/commercial_aircraft.ipynb
index 2e502effe..8884f579d 100644
--- a/_sources/examples/commercial_aircraft/commercial_aircraft.ipynb
+++ b/_sources/examples/commercial_aircraft/commercial_aircraft.ipynb
@@ -689,7 +689,7 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:range', units='NM')[-1],\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.range', units='NM')[-1],\n",
     "                  726.85, tolerance=1.0E-2)"
    ]
   },
diff --git a/_sources/examples/double_integrator/double_integrator.ipynb b/_sources/examples/double_integrator/double_integrator.ipynb
index 3f034222d..aaf0a8a2c 100644
--- a/_sources/examples/double_integrator/double_integrator.ipynb
+++ b/_sources/examples/double_integrator/double_integrator.ipynb
@@ -211,11 +211,11 @@
     "sol = om.CaseReader('dymos_solution.db').get_case('final')\n",
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
-    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.states:x',\n",
+    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.x',\n",
     "               'time (s)', 'x $(m)$'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.states:v',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.v',\n",
     "               'time (s)', 'v $(m/s)$'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:u',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.u',\n",
     "               'time (s)', 'u $(m/s^2)$')],\n",
     "             title='Double Integrator Solution\\nRadau Pseudospectral Method',\n",
     "             p_sol=sol, p_sim=sim)\n",
@@ -236,8 +236,8 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "x = p.get_val('traj.phase0.timeseries.states:x')\n",
-    "v = p.get_val('traj.phase0.timeseries.states:v')\n",
+    "x = p.get_val('traj.phase0.timeseries.x')\n",
+    "v = p.get_val('traj.phase0.timeseries.v')\n",
     "\n",
     "assert_near_equal(x[0], 0.0, tolerance=1.0E-4)\n",
     "assert_near_equal(x[-1], 0.25, tolerance=1.0E-4)\n",
diff --git a/_sources/examples/finite_burn_orbit_raise/finite_burn_orbit_raise.ipynb b/_sources/examples/finite_burn_orbit_raise/finite_burn_orbit_raise.ipynb
index 4a1c07a4b..be3fc6266 100644
--- a/_sources/examples/finite_burn_orbit_raise/finite_burn_orbit_raise.ipynb
+++ b/_sources/examples/finite_burn_orbit_raise/finite_burn_orbit_raise.ipynb
@@ -331,9 +331,9 @@
     "             for phs in ['burn1', 'coast', 'burn2'])\n",
     "y_sol = dict((phs, sol.get_val(f'traj.{phs}.timeseries.pos_y'.format(phs)))\n",
     "             for phs in ['burn1', 'coast', 'burn2'])\n",
-    "dv_sol = dict((phs, sol.get_val(f'traj.{phs}.timeseries.states:deltav'.format(phs)))\n",
+    "dv_sol = dict((phs, sol.get_val(f'traj.{phs}.timeseries.deltav'.format(phs)))\n",
     "              for phs in ['burn1', 'coast', 'burn2'])\n",
-    "u1_sol = dict((phs, sol.get_val(f'traj.{phs}.timeseries.controls:u1'.format(phs), units='deg'))\n",
+    "u1_sol = dict((phs, sol.get_val(f'traj.{phs}.timeseries.u1'.format(phs), units='deg'))\n",
     "              for phs in ['burn1', 'burn2'])\n",
     "\n",
     "t_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.time'))\n",
@@ -342,9 +342,9 @@
     "             for phs in ['burn1', 'coast', 'burn2'])\n",
     "y_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.pos_y'))\n",
     "             for phs in ['burn1', 'coast', 'burn2'])\n",
-    "dv_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.states:deltav'))\n",
+    "dv_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.deltav'))\n",
     "              for phs in ['burn1', 'coast', 'burn2'])\n",
-    "u1_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.controls:u1',\n",
+    "u1_exp = dict((phs, sim.get_val(f'traj.{phs}.timeseries.u1',\n",
     "                                units='deg'))\n",
     "              for phs in ['burn1', 'burn2'])\n",
     "\n",
diff --git a/_sources/examples/hull/hull_problem.ipynb b/_sources/examples/hull/hull_problem.ipynb
index d358a1ac6..7088a983f 100644
--- a/_sources/examples/hull/hull_problem.ipynb
+++ b/_sources/examples/hull/hull_problem.ipynb
@@ -435,14 +435,14 @@
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
     "t = sol.get_val('traj.phase0.timeseries.time')\n",
-    "x = sol.get_val('traj.phase0.timeseries.states:x')\n",
-    "xL = sol.get_val('traj.phase0.timeseries.states:xL')\n",
-    "u = sol.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x = sol.get_val('traj.phase0.timeseries.x')\n",
+    "xL = sol.get_val('traj.phase0.timeseries.xL')\n",
+    "u = sol.get_val('traj.phase0.timeseries.u')\n",
     "\n",
     "t_sim = sim.get_val('traj.phase0.timeseries.time')\n",
-    "x_sim = sim.get_val('traj.phase0.timeseries.states:x')\n",
-    "xL_sim = sim.get_val('traj.phase0.timeseries.states:xL')\n",
-    "u_sim = sim.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x_sim = sim.get_val('traj.phase0.timeseries.x')\n",
+    "xL_sim = sim.get_val('traj.phase0.timeseries.xL')\n",
+    "u_sim = sim.get_val('traj.phase0.timeseries.u')\n",
     "\n",
     "fig = plt.figure(constrained_layout=True, figsize=(12, 4))\n",
     "gs = fig.add_gridspec(3, 1)\n",
diff --git a/_sources/examples/hypersensitive/hypersensitive.ipynb b/_sources/examples/hypersensitive/hypersensitive.ipynb
index b596afad1..0b5357c45 100644
--- a/_sources/examples/hypersensitive/hypersensitive.ipynb
+++ b/_sources/examples/hypersensitive/hypersensitive.ipynb
@@ -254,9 +254,9 @@
     "sol = om.CaseReader('dymos_solution.db').get_case('final')\n",
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
-    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.states:x',\n",
+    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.x',\n",
     "               'time (s)', 'x $(m)$'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:u',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.u',\n",
     "               'time (s)', 'u $(m/s^2)$')],\n",
     "             title='Hyper Sensitive Problem Solution\\nRadau Pseudospectral Method',\n",
     "             p_sol=sol, p_sim=sim)\n",
@@ -279,15 +279,15 @@
     "\n",
     "ui, uf, J = solution()\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.controls:u')[0],\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.u')[0],\n",
     "                  ui,\n",
     "                  tolerance=1.5e-2)\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.controls:u')[-1],\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.u')[-1],\n",
     "                  uf,\n",
     "                  tolerance=1.5e-2)\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:xL')[-1],\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.xL')[-1],\n",
     "                  J,\n",
     "                  tolerance=1e-2)"
    ]
diff --git a/_sources/examples/length_constrained_brachistochrone/length_constrained_brachistochrone.ipynb b/_sources/examples/length_constrained_brachistochrone/length_constrained_brachistochrone.ipynb
index e623806bb..07e6bee22 100644
--- a/_sources/examples/length_constrained_brachistochrone/length_constrained_brachistochrone.ipynb
+++ b/_sources/examples/length_constrained_brachistochrone/length_constrained_brachistochrone.ipynb
@@ -197,8 +197,8 @@
     "p.model.add_subsystem('arc_length_comp',\n",
     "                      subsys=ArcLengthComp(num_nodes=tx.grid_data.num_nodes))\n",
     "\n",
-    "p.model.connect('traj.phase0.timeseries.controls:theta', 'arc_length_comp.theta')\n",
-    "p.model.connect('traj.phase0.timeseries.states:x', 'arc_length_comp.x')\n",
+    "p.model.connect('traj.phase0.timeseries.theta', 'arc_length_comp.theta')\n",
+    "p.model.connect('traj.phase0.timeseries.x', 'arc_length_comp.x')\n",
     "\n",
     "p.model.add_constraint('arc_length_comp.S', upper=MAX_ARCLENGTH, ref=1)\n",
     "\n",
@@ -222,15 +222,15 @@
     "exp_out = traj.simulate()\n",
     "\n",
     "# Extract the timeseries from the implicit solution and the explicit simulation\n",
-    "x = p.get_val('traj.phase0.timeseries.states:x')\n",
-    "y = p.get_val('traj.phase0.timeseries.states:y')\n",
+    "x = p.get_val('traj.phase0.timeseries.x')\n",
+    "y = p.get_val('traj.phase0.timeseries.y')\n",
     "t = p.get_val('traj.phase0.timeseries.time')\n",
-    "theta = p.get_val('traj.phase0.timeseries.controls:theta')\n",
+    "theta = p.get_val('traj.phase0.timeseries.theta')\n",
     "\n",
-    "x_exp = exp_out.get_val('traj.phase0.timeseries.states:x')\n",
-    "y_exp = exp_out.get_val('traj.phase0.timeseries.states:y')\n",
+    "x_exp = exp_out.get_val('traj.phase0.timeseries.x')\n",
+    "y_exp = exp_out.get_val('traj.phase0.timeseries.y')\n",
     "t_exp = exp_out.get_val('traj.phase0.timeseries.time')\n",
-    "theta_exp = exp_out.get_val('traj.phase0.timeseries.controls:theta')\n",
+    "theta_exp = exp_out.get_val('traj.phase0.timeseries.theta')\n",
     "\n",
     "fig, axes = plt.subplots(nrows=2, ncols=1)\n",
     "\n",
diff --git a/_sources/examples/min_time_climb/min_time_climb.ipynb b/_sources/examples/min_time_climb/min_time_climb.ipynb
index 48f89a45c..13fd7712f 100644
--- a/_sources/examples/min_time_climb/min_time_climb.ipynb
+++ b/_sources/examples/min_time_climb/min_time_climb.ipynb
@@ -285,9 +285,9 @@
     "sol = om.CaseReader('dymos_solution.db').get_case('final')\n",
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
-    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.states:h',\n",
+    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.h',\n",
     "               'time (s)', 'altitude (m)'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:alpha',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.alpha',\n",
     "               'time (s)', 'alpha (deg)')],\n",
     "             title='Supersonic Minimum Time-to-Climb Solution',\n",
     "             p_sol=sol, p_sim=sim)\n",
diff --git a/_sources/examples/mountain_car/mountain_car.ipynb b/_sources/examples/mountain_car/mountain_car.ipynb
index 600a779e1..09f063a06 100644
--- a/_sources/examples/mountain_car/mountain_car.ipynb
+++ b/_sources/examples/mountain_car/mountain_car.ipynb
@@ -504,15 +504,15 @@
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
     "t = sol.get_val('traj.phase0.timeseries.time')\n",
-    "x = sol.get_val('traj.phase0.timeseries.states:x')\n",
-    "v = sol.get_val('traj.phase0.timeseries.states:v')\n",
-    "u = sol.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x = sol.get_val('traj.phase0.timeseries.x')\n",
+    "v = sol.get_val('traj.phase0.timeseries.v')\n",
+    "u = sol.get_val('traj.phase0.timeseries.u')\n",
     "h = np.sin(3 * x) / 3\n",
     "\n",
     "t_sim = sim.get_val('traj.phase0.timeseries.time')\n",
-    "x_sim = sim.get_val('traj.phase0.timeseries.states:x')\n",
-    "v_sim = sim.get_val('traj.phase0.timeseries.states:v')\n",
-    "u_sim = sim.get_val('traj.phase0.timeseries.controls:u')\n",
+    "x_sim = sim.get_val('traj.phase0.timeseries.x')\n",
+    "v_sim = sim.get_val('traj.phase0.timeseries.v')\n",
+    "u_sim = sim.get_val('traj.phase0.timeseries.u')\n",
     "h_sim = np.sin(3 * x_sim) / 3"
    ]
   },
diff --git a/_sources/examples/multi_phase_cannonball/multi_phase_cannonball.ipynb b/_sources/examples/multi_phase_cannonball/multi_phase_cannonball.ipynb
index 8e7d1bb57..10c987b17 100644
--- a/_sources/examples/multi_phase_cannonball/multi_phase_cannonball.ipynb
+++ b/_sources/examples/multi_phase_cannonball/multi_phase_cannonball.ipynb
@@ -454,9 +454,9 @@
     "print(f'cannonball mass: {mass} kg ')\n",
     "area = p.get_val('size_comp.S', units='cm**2')[0]\n",
     "print(f'cannonball aerodynamic reference area: {area} cm**2 ')\n",
-    "angle = p.get_val('traj.ascent.timeseries.states:gam', units='deg')[0, 0]\n",
+    "angle = p.get_val('traj.ascent.timeseries.gam', units='deg')[0, 0]\n",
     "print(f'launch angle: {angle} deg')\n",
-    "max_range = p.get_val('traj.descent.timeseries.states:r')[-1, 0]\n",
+    "max_range = p.get_val('traj.descent.timeseries.r')[-1, 0]\n",
     "print(f'maximum range: {max_range} m')\n",
     "\n",
     "fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 6))\n",
@@ -467,17 +467,17 @@
     "time_exp = {'ascent': sim.get_val('traj.ascent.timeseries.time'),\n",
     "            'descent': sim.get_val('traj.descent.timeseries.time')}\n",
     "\n",
-    "r_imp = {'ascent': p.get_val('traj.ascent.timeseries.states:r'),\n",
-    "         'descent': p.get_val('traj.descent.timeseries.states:r')}\n",
+    "r_imp = {'ascent': p.get_val('traj.ascent.timeseries.r'),\n",
+    "         'descent': p.get_val('traj.descent.timeseries.r')}\n",
     "\n",
-    "r_exp = {'ascent': sim.get_val('traj.ascent.timeseries.states:r'),\n",
-    "         'descent': sim.get_val('traj.descent.timeseries.states:r')}\n",
+    "r_exp = {'ascent': sim.get_val('traj.ascent.timeseries.r'),\n",
+    "         'descent': sim.get_val('traj.descent.timeseries.r')}\n",
     "\n",
-    "h_imp = {'ascent': p.get_val('traj.ascent.timeseries.states:h'),\n",
-    "         'descent': p.get_val('traj.descent.timeseries.states:h')}\n",
+    "h_imp = {'ascent': p.get_val('traj.ascent.timeseries.h'),\n",
+    "         'descent': p.get_val('traj.descent.timeseries.h')}\n",
     "\n",
-    "h_exp = {'ascent': sim.get_val('traj.ascent.timeseries.states:h'),\n",
-    "         'descent': sim.get_val('traj.descent.timeseries.states:h')}\n",
+    "h_exp = {'ascent': sim.get_val('traj.ascent.timeseries.h'),\n",
+    "         'descent': sim.get_val('traj.descent.timeseries.h')}\n",
     "\n",
     "axes.plot(r_imp['ascent'], h_imp['ascent'], 'bo')\n",
     "\n",
@@ -494,11 +494,11 @@
     "fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 6))\n",
     "states = ['r', 'h', 'v', 'gam']\n",
     "for i, state in enumerate(states):\n",
-    "    x_imp = {'ascent': sol.get_val(f'traj.ascent.timeseries.states:{state}'),\n",
-    "             'descent': sol.get_val(f'traj.descent.timeseries.states:{state}')}\n",
+    "    x_imp = {'ascent': sol.get_val(f'traj.ascent.timeseries.{state}'),\n",
+    "             'descent': sol.get_val(f'traj.descent.timeseries.{state}')}\n",
     "\n",
-    "    x_exp = {'ascent': sim.get_val(f'traj.ascent.timeseries.states:{state}'),\n",
-    "             'descent': sim.get_val(f'traj.descent.timeseries.states:{state}')}\n",
+    "    x_exp = {'ascent': sim.get_val(f'traj.ascent.timeseries.{state}'),\n",
+    "             'descent': sim.get_val(f'traj.descent.timeseries.{state}')}\n",
     "\n",
     "    axes[i].set_ylabel(state)\n",
     "    axes[i].grid(True)\n",
diff --git a/_sources/examples/racecar/racecar.ipynb b/_sources/examples/racecar/racecar.ipynb
index 159c8720b..bb22f55b3 100644
--- a/_sources/examples/racecar/racecar.ipynb
+++ b/_sources/examples/racecar/racecar.ipynb
@@ -384,11 +384,11 @@
     "print('Optimization finished')\n",
     "\n",
     "# Get optimized time series\n",
-    "n = p.get_val('traj.phase0.timeseries.states:n')\n",
+    "n = p.get_val('traj.phase0.timeseries.n')\n",
     "s = p.get_val('traj.phase0.timeseries.s')\n",
-    "V = p.get_val('traj.phase0.timeseries.states:V')\n",
-    "thrust = p.get_val('traj.phase0.timeseries.controls:thrust')\n",
-    "delta = p.get_val('traj.phase0.timeseries.controls:delta')\n",
+    "V = p.get_val('traj.phase0.timeseries.V')\n",
+    "thrust = p.get_val('traj.phase0.timeseries.thrust')\n",
+    "delta = p.get_val('traj.phase0.timeseries.delta')\n",
     "power = p.get_val('traj.phase0.timeseries.power', units='W')\n",
     "\n"
    ]
@@ -400,11 +400,11 @@
    "outputs": [],
    "source": [
     "# Get optimized time series\n",
-    "n = p.get_val('traj.phase0.timeseries.states:n')\n",
+    "n = p.get_val('traj.phase0.timeseries.n')\n",
     "s = p.get_val('traj.phase0.timeseries.s')\n",
-    "V = p.get_val('traj.phase0.timeseries.states:V')\n",
-    "thrust = p.get_val('traj.phase0.timeseries.controls:thrust')\n",
-    "delta = p.get_val('traj.phase0.timeseries.controls:delta')\n",
+    "V = p.get_val('traj.phase0.timeseries.V')\n",
+    "thrust = p.get_val('traj.phase0.timeseries.thrust')\n",
+    "delta = p.get_val('traj.phase0.timeseries.delta')\n",
     "power = p.get_val('traj.phase0.timeseries.power', units='W')\n",
     "\n",
     "# We know the optimal distance from the centerline (n). To transform this into the racing\n",
@@ -512,7 +512,7 @@
     "\n",
     "# Velocity vs s\n",
     "axes[0].plot(s,\n",
-    "             p.get_val('traj.phase0.timeseries.states:V'), label='solution')\n",
+    "             p.get_val('traj.phase0.timeseries.V'), label='solution')\n",
     "\n",
     "axes[0].set_xlabel('s (m)')\n",
     "axes[0].set_ylabel('V (m/s)')\n",
@@ -521,7 +521,7 @@
     "\n",
     "# n vs s\n",
     "axes[1].plot(s,\n",
-    "             p.get_val('traj.phase0.timeseries.states:n', units='m'), label='solution')\n",
+    "             p.get_val('traj.phase0.timeseries.n', units='m'), label='solution')\n",
     "\n",
     "axes[1].set_xlabel('s (m)')\n",
     "axes[1].set_ylabel('n (m)')\n",
@@ -538,7 +538,7 @@
     "\n",
     "# delta vs s\n",
     "axes[3].plot(s,\n",
-    "             p.get_val('traj.phase0.timeseries.controls:delta', units=None),\n",
+    "             p.get_val('traj.phase0.timeseries.delta', units=None),\n",
     "             label='solution')\n",
     "\n",
     "axes[3].set_xlabel('s (m)')\n",
@@ -585,7 +585,7 @@
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
     "# Test this example in Dymos' continuous integration process\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:t')[-1], 22.2657, tolerance=0.01)"
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.t')[-1], 22.2657, tolerance=0.01)"
    ]
   }
  ],
diff --git a/_sources/examples/reentry/reentry.ipynb b/_sources/examples/reentry/reentry.ipynb
index d35665a06..83d1eaa97 100644
--- a/_sources/examples/reentry/reentry.ipynb
+++ b/_sources/examples/reentry/reentry.ipynb
@@ -686,11 +686,11 @@
     "sol = om.CaseReader('dymos_solution.db').get_case('final')\n",
     "sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
-    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:alpha',\n",
+    "plot_results([('traj.phase0.timeseries.time', 'traj.phase0.timeseries.alpha',\n",
     "               'time (s)', 'alpha (rad)'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.controls:beta',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.beta',\n",
     "               'time (s)', 'beta (rad)'),\n",
-    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.states:theta',\n",
+    "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.theta',\n",
     "               'time (s)', 'theta (rad)'),\n",
     "              ('traj.phase0.timeseries.time', 'traj.phase0.timeseries.q',\n",
     "               'time (s)', 'q (Btu/ft**2/s)')], title='Reentry Solution', p_sol=sol,\n",
@@ -715,7 +715,7 @@
     "# Check the validity of the solution\n",
     "assert_near_equal(p.get_val('traj.phase0.timeseries.time')[-1], 2008.59,\n",
     "                  tolerance=1e-3)\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:theta', units='deg')[-1],\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.theta', units='deg')[-1],\n",
     "                  34.1412, tolerance=1e-3)"
    ]
   },
diff --git a/_sources/examples/robertson_problem/robertson_problem.ipynb b/_sources/examples/robertson_problem/robertson_problem.ipynb
index 24a8c3b38..50afe85d3 100644
--- a/_sources/examples/robertson_problem/robertson_problem.ipynb
+++ b/_sources/examples/robertson_problem/robertson_problem.ipynb
@@ -336,7 +336,7 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:x0')[-1], 0.71583161, tolerance=1E-4)"
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.x0')[-1], 0.71583161, tolerance=1E-4)"
    ]
   },
   {
@@ -352,7 +352,7 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:y0')[-1], 9.18571144e-06, tolerance=1E-4)"
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.y0')[-1], 9.18571144e-06, tolerance=1E-4)"
    ]
   },
   {
@@ -368,7 +368,7 @@
    "source": [
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:z0')[-1], 0.2841592, tolerance=1E-4)"
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.z0')[-1], 0.2841592, tolerance=1E-4)"
    ]
   },
   {
@@ -384,7 +384,7 @@
     "states = ['x0', 'y0', 'z0']\n",
     "fig, axes = plt.subplots(len(states), 1)\n",
     "for i, state in enumerate(states):\n",
-    "    axes[i].plot(t, p.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n",
+    "    axes[i].plot(t, p.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n",
     "    axes[i].set_ylabel(state[0])\n",
     "axes[-1].set_xlabel('time (s)')\n",
     "plt.tight_layout()\n",
diff --git a/_sources/examples/ssto_earth/ssto_earth.ipynb b/_sources/examples/ssto_earth/ssto_earth.ipynb
index 8def49258..4569af591 100644
--- a/_sources/examples/ssto_earth/ssto_earth.ipynb
+++ b/_sources/examples/ssto_earth/ssto_earth.ipynb
@@ -338,15 +338,15 @@
     "\n",
     "fig, [traj_ax, control_ax] = plt.subplots(nrows=2, ncols=1, figsize=(10, 8))\n",
     "\n",
-    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sol.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.x'),\n",
+    "             sol.get_val('traj.phase0.timeseries.y'),\n",
     "             marker='o',\n",
     "             ms=4,\n",
     "             linestyle='None',\n",
     "             label='solution')\n",
     "\n",
-    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim.get_val('traj.phase0.timeseries.y'),\n",
     "             marker=None,\n",
     "             linestyle='-',\n",
     "             label='simulation')\n",
@@ -357,13 +357,13 @@
     "traj_ax.grid(True)\n",
     "\n",
     "control_ax.plot(sol.get_val('traj.phase0.timeseries.time'),\n",
-    "             sol.get_val('traj.phase0.timeseries.controls:theta'),\n",
+    "             sol.get_val('traj.phase0.timeseries.theta'),\n",
     "             marker='o',\n",
     "             ms=4,\n",
     "             linestyle='None')\n",
     "\n",
     "control_ax.plot(sim.get_val('traj.phase0.timeseries.time'),\n",
-    "             sim.get_val('traj.phase0.timeseries.controls:theta'),\n",
+    "             sim.get_val('traj.phase0.timeseries.theta'),\n",
     "             linestyle='-',\n",
     "             marker=None)\n",
     "\n",
@@ -391,9 +391,9 @@
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
     "assert_near_equal(p.get_val('traj.phase0.timeseries.time')[-1], 143, tolerance=0.05)\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:y')[-1], 1.85E5, 1e-4)\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:vx')[-1], 7796.6961, 1e-4)\n",
-    "assert_near_equal(p.get_val('traj.phase0.timeseries.states:vy')[-1], 0, 1e-4)"
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.y')[-1], 1.85E5, 1e-4)\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.vx')[-1], 7796.6961, 1e-4)\n",
+    "assert_near_equal(p.get_val('traj.phase0.timeseries.vy')[-1], 0, 1e-4)"
    ]
   },
   {
diff --git a/_sources/examples/ssto_moon_linear_tangent/ssto_moon_linear_tangent.ipynb b/_sources/examples/ssto_moon_linear_tangent/ssto_moon_linear_tangent.ipynb
index ceda5f2d0..70dc7310e 100644
--- a/_sources/examples/ssto_moon_linear_tangent/ssto_moon_linear_tangent.ipynb
+++ b/_sources/examples/ssto_moon_linear_tangent/ssto_moon_linear_tangent.ipynb
@@ -361,15 +361,15 @@
     "\n",
     "fig, [traj_ax, control_ax, param_ax] = plt.subplots(nrows=3, ncols=1, figsize=(10, 8))\n",
     "\n",
-    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sol.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.x'),\n",
+    "             sol.get_val('traj.phase0.timeseries.y'),\n",
     "             marker='o',\n",
     "             ms=4,\n",
     "             linestyle='None',\n",
     "             label='solution')\n",
     "\n",
-    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim.get_val('traj.phase0.timeseries.y'),\n",
     "             marker=None,\n",
     "             linestyle='-',\n",
     "             label='simulation')\n",
diff --git a/_sources/examples/ssto_moon_polynomial_controls/ssto_moon_polynomial_controls.ipynb b/_sources/examples/ssto_moon_polynomial_controls/ssto_moon_polynomial_controls.ipynb
index a651d911e..7db873c99 100644
--- a/_sources/examples/ssto_moon_polynomial_controls/ssto_moon_polynomial_controls.ipynb
+++ b/_sources/examples/ssto_moon_polynomial_controls/ssto_moon_polynomial_controls.ipynb
@@ -344,15 +344,15 @@
     "\n",
     "fig, [traj_ax, control_ax, param_ax] = plt.subplots(nrows=3, ncols=1, figsize=(10, 8))\n",
     "\n",
-    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sol.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sol.get_val('traj.phase0.timeseries.x'),\n",
+    "             sol.get_val('traj.phase0.timeseries.y'),\n",
     "             marker='o',\n",
     "             ms=4,\n",
     "             linestyle='None',\n",
     "             label='solution')\n",
     "\n",
-    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.states:x'),\n",
-    "             sim.get_val('traj.phase0.timeseries.states:y'),\n",
+    "traj_ax.plot(sim.get_val('traj.phase0.timeseries.x'),\n",
+    "             sim.get_val('traj.phase0.timeseries.y'),\n",
     "             marker=None,\n",
     "             linestyle='-',\n",
     "             label='simulation')\n",
@@ -376,8 +376,8 @@
     "control_ax.set_ylabel(r'$\\theta$ (deg)')\n",
     "control_ax.grid(True)\n",
     "\n",
-    "tan_theta_sol = sol.get_val('traj.phase0.timeseries.polynomial_controls:tan_theta')\n",
-    "tan_theta_sim = sim.get_val('traj.phase0.timeseries.polynomial_controls:tan_theta')\n",
+    "tan_theta_sol = sol.get_val('traj.phase0.timeseries.tan_theta')\n",
+    "tan_theta_sim = sim.get_val('traj.phase0.timeseries.tan_theta')\n",
     "\n",
     "param_ax.plot(sol.get_val('traj.phase0.timeseries.time'),\n",
     "             tan_theta_sol,\n",
diff --git a/_sources/examples/vanderpol/vanderpol.ipynb b/_sources/examples/vanderpol/vanderpol.ipynb
index ae3a985df..fe66eb2b5 100644
--- a/_sources/examples/vanderpol/vanderpol.ipynb
+++ b/_sources/examples/vanderpol/vanderpol.ipynb
@@ -401,23 +401,23 @@
     "    sim = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "    \n",
     "    plot_results([('traj.phase0.timeseries.time',\n",
-    "                   'traj.phase0.timeseries.states:x1',\n",
+    "                   'traj.phase0.timeseries.x1',\n",
     "                   'time (s)',\n",
     "                   '$x_1$ (V)'),\n",
     "                 ('traj.phase0.timeseries.time',\n",
-    "                  'traj.phase0.timeseries.states:x0',\n",
+    "                  'traj.phase0.timeseries.x0',\n",
     "                  'time (s)',\n",
     "                  '$x_0$ (V/s)'),\n",
     "                  ('traj.phase0.timeseries.time',\n",
-    "                   'traj.phase0.timeseries.states:J',\n",
+    "                   'traj.phase0.timeseries.J',\n",
     "                   'time (s)',\n",
     "                   'J'),\n",
-    "                  ('traj.phase0.timeseries.states:x0',\n",
-    "                   'traj.phase0.timeseries.states:x1',\n",
+    "                  ('traj.phase0.timeseries.x0',\n",
+    "                   'traj.phase0.timeseries.x1',\n",
     "                   '$x_0$ (V/s)',\n",
     "                   '$x_1$ (V)'),\n",
     "                 ('traj.phase0.timeseries.time',\n",
-    "                  'traj.phase0.timeseries.controls:u',\n",
+    "                  'traj.phase0.timeseries.u',\n",
     "                  'time (s)',\n",
     "                  'control u'),\n",
     "                  ],\n",
diff --git a/_sources/examples/water_rocket/water_rocket.ipynb b/_sources/examples/water_rocket/water_rocket.ipynb
index 37fbefd50..968729ff2 100644
--- a/_sources/examples/water_rocket/water_rocket.ipynb
+++ b/_sources/examples/water_rocket/water_rocket.ipynb
@@ -410,14 +410,14 @@
     "    p = water_rocket_problem\n",
     "    Entry = namedtuple('Entry', 'value unit')\n",
     "    summary = {\n",
-    "        'Launch angle': Entry(p.get_val('traj.propelled_ascent.timeseries.states:gam',  units='deg')[0, 0], 'deg'),\n",
-    "        'Flight angle at end of propulsion': Entry(p.get_val('traj.propelled_ascent.timeseries.states:gam',\n",
+    "        'Launch angle': Entry(p.get_val('traj.propelled_ascent.timeseries.gam',  units='deg')[0, 0], 'deg'),\n",
+    "        'Flight angle at end of propulsion': Entry(p.get_val('traj.propelled_ascent.timeseries.gam',\n",
     "                                                   units='deg')[-1, 0], 'deg'),\n",
     "        'Empty mass': Entry(p.get_val('traj.parameters:m_empty', units='kg')[0], 'kg'),\n",
-    "        'Water volume': Entry(p.get_val('traj.propelled_ascent.timeseries.states:V_w', 'L')[0, 0], 'L'),\n",
-    "        'Maximum range': Entry(p.get_val('traj.descent.timeseries.states:r', units='m')[-1, 0], 'm'),\n",
-    "        'Maximum height': Entry(p.get_val('traj.ballistic_ascent.timeseries.states:h', units='m')[-1, 0], 'm'),\n",
-    "        'Maximum velocity': Entry(p.get_val('traj.propelled_ascent.timeseries.states:v', units='m/s')[-1, 0], 'm/s'),\n",
+    "        'Water volume': Entry(p.get_val('traj.propelled_ascent.timeseries.V_w', 'L')[0, 0], 'L'),\n",
+    "        'Maximum range': Entry(p.get_val('traj.descent.timeseries.r', units='m')[-1, 0], 'm'),\n",
+    "        'Maximum height': Entry(p.get_val('traj.ballistic_ascent.timeseries.h', units='m')[-1, 0], 'm'),\n",
+    "        'Maximum velocity': Entry(p.get_val('traj.propelled_ascent.timeseries.v', units='m/s')[-1, 0], 'm/s'),\n",
     "    }\n",
     "\n",
     "    return summary\n"
@@ -439,13 +439,13 @@
     "    \n",
     "    c = colors['pa']\n",
     "\n",
-    "    ax[0,0].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.states:p', 'bar'), '.', color=c)\n",
-    "    ax[0,0].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.states:p', 'bar'), '-', color=c)\n",
+    "    ax[0,0].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.p', 'bar'), '.', color=c)\n",
+    "    ax[0,0].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.p', 'bar'), '-', color=c)\n",
     "    ax[0,0].set_ylabel('p (bar)')\n",
     "    ax[0,0].set_ylim(bottom=0)\n",
     "\n",
-    "    ax[1,0].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.states:V_w', 'L'), '.', color=c)\n",
-    "    ax[1,0].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.states:V_w', 'L'), '-', color=c)\n",
+    "    ax[1,0].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.V_w', 'L'), '.', color=c)\n",
+    "    ax[1,0].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.V_w', 'L'), '-', color=c)\n",
     "    ax[1,0].set_ylabel('$V_w$ (L)')\n",
     "\n",
     "    ax[0,1].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.T', 'N'), '.', color=c)\n",
@@ -453,8 +453,8 @@
     "    ax[0,1].set_ylabel('T (N)')\n",
     "    ax[0,1].set_ylim(bottom=0)\n",
     "\n",
-    "    ax[1,1].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.states:v', 'm/s'), '.', color=c)\n",
-    "    ax[1,1].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.states:v', 'm/s'), '-', color=c)\n",
+    "    ax[1,1].plot(t_imp, p.get_val('traj.propelled_ascent.timeseries.v', 'm/s'), '.', color=c)\n",
+    "    ax[1,1].plot(t_exp, exp_out.get_val('traj.propelled_ascent.timeseries.v', 'm/s'), '-', color=c)\n",
     "    ax[1,1].set_ylabel('v (m/s)')\n",
     "    ax[1,1].set_ylim(bottom=0)\n",
     "\n",
@@ -488,13 +488,13 @@
     "                'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.time'),\n",
     "                'descent': exp_out.get_val('traj.descent.timeseries.time')}\n",
     "\n",
-    "    x_imp = {phase: {state: p.get_val(f\"traj.{phase}.timeseries.states:{state}\", unit)\n",
+    "    x_imp = {phase: {state: p.get_val(f\"traj.{phase}.timeseries.{state}\", unit)\n",
     "                     for state, unit in zip(states, units)\n",
     "                     }\n",
     "             for phase in phases\n",
     "             }\n",
     "\n",
-    "    x_exp = {phase: {state: exp_out.get_val(f\"traj.{phase}.timeseries.states:{state}\", unit)\n",
+    "    x_exp = {phase: {state: exp_out.get_val(f\"traj.{phase}.timeseries.{state}\", unit)\n",
     "                     for state, unit in zip(states, units)\n",
     "                     }\n",
     "             for phase in phases\n",
@@ -541,21 +541,21 @@
     "                'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.time'),\n",
     "                'descent': exp_out.get_val('traj.descent.timeseries.time')}\n",
     "\n",
-    "    r_imp = {'ballistic_ascent': p.get_val('traj.ballistic_ascent.timeseries.states:r'),\n",
-    "             'propelled_ascent': p.get_val('traj.propelled_ascent.timeseries.states:r'),\n",
-    "             'descent': p.get_val('traj.descent.timeseries.states:r')}\n",
+    "    r_imp = {'ballistic_ascent': p.get_val('traj.ballistic_ascent.timeseries.r'),\n",
+    "             'propelled_ascent': p.get_val('traj.propelled_ascent.timeseries.r'),\n",
+    "             'descent': p.get_val('traj.descent.timeseries.r')}\n",
     "\n",
-    "    r_exp = {'ballistic_ascent': exp_out.get_val('traj.ballistic_ascent.timeseries.states:r'),\n",
-    "             'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.states:r'),\n",
-    "             'descent': exp_out.get_val('traj.descent.timeseries.states:r')}\n",
+    "    r_exp = {'ballistic_ascent': exp_out.get_val('traj.ballistic_ascent.timeseries.r'),\n",
+    "             'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.r'),\n",
+    "             'descent': exp_out.get_val('traj.descent.timeseries.r')}\n",
     "\n",
-    "    h_imp = {'ballistic_ascent': p.get_val('traj.ballistic_ascent.timeseries.states:h'),\n",
-    "             'propelled_ascent': p.get_val('traj.propelled_ascent.timeseries.states:h'),\n",
-    "             'descent': p.get_val('traj.descent.timeseries.states:h')}\n",
+    "    h_imp = {'ballistic_ascent': p.get_val('traj.ballistic_ascent.timeseries.h'),\n",
+    "             'propelled_ascent': p.get_val('traj.propelled_ascent.timeseries.h'),\n",
+    "             'descent': p.get_val('traj.descent.timeseries.h')}\n",
     "\n",
-    "    h_exp = {'ballistic_ascent': exp_out.get_val('traj.ballistic_ascent.timeseries.states:h'),\n",
-    "             'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.states:h'),\n",
-    "             'descent': exp_out.get_val('traj.descent.timeseries.states:h')}\n",
+    "    h_exp = {'ballistic_ascent': exp_out.get_val('traj.ballistic_ascent.timeseries.h'),\n",
+    "             'propelled_ascent': exp_out.get_val('traj.propelled_ascent.timeseries.h'),\n",
+    "             'descent': exp_out.get_val('traj.descent.timeseries.h')}\n",
     "\n",
     "    axes.plot(r_imp['propelled_ascent'], h_imp['propelled_ascent'], 'o', color=colors['pa'])\n",
     "    axes.plot(r_imp['ballistic_ascent'], h_imp['ballistic_ascent'], 'o', color=colors['ba'])\n",
diff --git a/_sources/faq/connect_scalar_parameters_to_ode.ipynb b/_sources/faq/connect_scalar_parameters_to_ode.ipynb
index f331a8297..0ee7db42f 100644
--- a/_sources/faq/connect_scalar_parameters_to_ode.ipynb
+++ b/_sources/faq/connect_scalar_parameters_to_ode.ipynb
@@ -186,15 +186,15 @@
     "exp_out = om.CaseReader('dymos_simulation.db').get_case('final')\n",
     "\n",
     "# Extract the timeseries from the implicit solution and the explicit simulation\n",
-    "x = p.get_val('traj.phase0.timeseries.states:x')\n",
-    "y = p.get_val('traj.phase0.timeseries.states:y')\n",
+    "x = p.get_val('traj.phase0.timeseries.x')\n",
+    "y = p.get_val('traj.phase0.timeseries.y')\n",
     "t = p.get_val('traj.phase0.timeseries.time')\n",
-    "theta = p.get_val('traj.phase0.timeseries.controls:theta')\n",
+    "theta = p.get_val('traj.phase0.timeseries.theta')\n",
     "\n",
-    "x_exp = exp_out.get_val('traj.phase0.timeseries.states:x')\n",
-    "y_exp = exp_out.get_val('traj.phase0.timeseries.states:y')\n",
+    "x_exp = exp_out.get_val('traj.phase0.timeseries.x')\n",
+    "y_exp = exp_out.get_val('traj.phase0.timeseries.y')\n",
     "t_exp = exp_out.get_val('traj.phase0.timeseries.time')\n",
-    "theta_exp = exp_out.get_val('traj.phase0.timeseries.controls:theta')\n",
+    "theta_exp = exp_out.get_val('traj.phase0.timeseries.theta')\n",
     "\n",
     "fig, axes = plt.subplots(nrows=2, ncols=1)\n",
     "\n",
diff --git a/_sources/faq/downstream_analysis.ipynb b/_sources/faq/downstream_analysis.ipynb
index 7c0dae322..6aec66ea7 100644
--- a/_sources/faq/downstream_analysis.ipynb
+++ b/_sources/faq/downstream_analysis.ipynb
@@ -58,7 +58,7 @@
     "For example, something like the following might be used to connect the final value of the state `range` to some downstream component.\n",
     "\n",
     "```python\n",
-    "problem.model.connect('trajectory.phase0.timeseries.states:range',\n",
+    "problem.model.connect('trajectory.phase0.timeseries.range',\n",
     "                      'postprocess.final_range',\n",
     "                      src_indices=[-1])\n",
     "```\n",
diff --git a/_sources/faq/tandem_phases.ipynb b/_sources/faq/tandem_phases.ipynb
index 243ce854c..d7ad5b900 100644
--- a/_sources/faq/tandem_phases.ipynb
+++ b/_sources/faq/tandem_phases.ipynb
@@ -243,8 +243,8 @@
     "#\n",
     "p.model.connect('phase0.t_duration', 'phase1.t_duration')\n",
     "\n",
-    "p.model.connect('phase0.timeseries2.controls:theta', 'phase1.controls:theta')\n",
-    "p.model.connect('phase0.timeseries2.states:v', 'phase1.controls:v')\n",
+    "p.model.connect('phase0.timeseries2.theta', 'phase1.controls:theta')\n",
+    "p.model.connect('phase0.timeseries2.v', 'phase1.controls:v')\n",
     "\n",
     "# Minimize arclength at the end of the second phase\n",
     "phase1.add_objective('S', loc='final', ref=1)\n",
@@ -268,10 +268,10 @@
     "\n",
     "fig, (ax0, ax1) = plt.subplots(2, 1)\n",
     "fig.tight_layout()\n",
-    "ax0.plot(p.get_val('phase0.timeseries.states:x'), p.get_val('phase0.timeseries.states:y'), '.')\n",
+    "ax0.plot(p.get_val('phase0.timeseries.x'), p.get_val('phase0.timeseries.y'), '.')\n",
     "ax0.set_xlabel('x (m)')\n",
     "ax0.set_ylabel('y (m)')\n",
-    "ax1.plot(p.get_val('phase1.timeseries.time'), p.get_val('phase1.timeseries.states:S'), '+')\n",
+    "ax1.plot(p.get_val('phase1.timeseries.time'), p.get_val('phase1.timeseries.S'), '+')\n",
     "ax1.set_xlabel('t (s)')\n",
     "ax1.set_ylabel('S (m)')\n",
     "plt.show()"
@@ -291,7 +291,7 @@
     "from openmdao.utils.assert_utils import assert_near_equal\n",
     "\n",
     "expected = np.sqrt((10-0)**2 + (10 - 5)**2)\n",
-    "assert_near_equal(p.get_val('phase1.timeseries.states:S')[-1], expected, tolerance=1.0E-3)"
+    "assert_near_equal(p.get_val('phase1.timeseries.S')[-1], expected, tolerance=1.0E-3)"
    ]
   }
  ],
@@ -306,7 +306,7 @@
    }
   },
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -320,7 +320,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.3"
+   "version": "3.11.0"
   }
  },
  "nbformat": 4,
diff --git a/_sources/features/phases/analytic_phases.ipynb b/_sources/features/phases/analytic_phases.ipynb
index 73f79aa64..6c6598938 100644
--- a/_sources/features/phases/analytic_phases.ipynb
+++ b/_sources/features/phases/analytic_phases.ipynb
@@ -218,7 +218,7 @@
     "p.run_model()\n",
     "\n",
     "t = p.get_val('traj.phase.timeseries.time', units='s')\n",
-    "x = p.get_val('traj.phase.timeseries.states:x', units='unitless')\n",
+    "x = p.get_val('traj.phase.timeseries.x', units='unitless')\n",
     "\n",
     "print(f'x({t[-1, 0]}) = {x[-1, 0]}')\n",
     "\n",
@@ -373,11 +373,11 @@
     "p.run_driver()\n",
     "\n",
     "t_1 = p.get_val('traj.first_phase.timeseries.time', units='s')[:, 0]\n",
-    "x_1 = p.get_val('traj.first_phase.timeseries.states:x', units='unitless')[:, 0]\n",
+    "x_1 = p.get_val('traj.first_phase.timeseries.x', units='unitless')[:, 0]\n",
     "x0_1 = p.get_val('traj.first_phase.parameter_vals:x0')[:, 0]\n",
     "\n",
     "t_2 = p.get_val('traj.second_phase.timeseries.time', units='s')[:, 0]\n",
-    "x_2 = p.get_val('traj.second_phase.timeseries.states:x', units='unitless')[:, 0]\n",
+    "x_2 = p.get_val('traj.second_phase.timeseries.x', units='unitless')[:, 0]\n",
     "x0_2 = p.get_val('traj.second_phase.parameter_vals:x0')[:, 0]\n",
     "\n",
     "print(f'x({t_1[-1]}) = {x_1[-1]}')\n",
diff --git a/_sources/features/phases/timeseries.ipynb b/_sources/features/phases/timeseries.ipynb
index dd17c04be..9cd661388 100644
--- a/_sources/features/phases/timeseries.ipynb
+++ b/_sources/features/phases/timeseries.ipynb
@@ -64,14 +64,14 @@
     "|--------------------------------------------------------------|-----------------------------------------------------|\n",
     "|``.timeseries.time``                              |Current time value                                   |\n",
     "|``.timeseries.time_phase``                        |Current phase elapsed time                           |\n",
-    "|``.timeseries.states:``                        |Value of state variable named x                      |\n",
-    "|``.timeseries.controls:``                      |Value of control variable named u                    |\n",
-    "|``.timeseries.control_rates:_rate``            |Time derivative of control named u                   |\n",
-    "|``.timeseries.control_rates:_rate2``           |Second time derivative of control named u            |\n",
-    "|``.timeseries.polynomial_controls:

`` |Value of polynomial control variable named u |\n", - "|``.timeseries.polynomial_control_rates:

_rate`` |Time derivative of polynomial control named u |\n", - "|``.timeseries.polynomial_control_rates:

_rate2``|Second time derivative of polynomial control named u |\n", - "|``.timeseries.parameters:`` |Value of parameter named d |\n", + "|``.timeseries.`` |Value of state variable named x |\n", + "|``.timeseries.`` |Value of control variable named u |\n", + "|``.timeseries._rate`` |Time derivative of control named u |\n", + "|``.timeseries._rate2`` |Second time derivative of control named u |\n", + "|``.timeseries.

`` |Value of polynomial control variable named u |\n", + "|``.timeseries.

_rate`` |Time derivative of polynomial control named u |\n", + "|``.timeseries.

_rate2``|Second time derivative of polynomial control named u |\n", + "|``.timeseries.`` |Value of parameter named d |\n", "\n", "## Adding additional timeseries outputs\n", "\n", diff --git a/_sources/getting_started/intro_to_dymos/intro_ivp.ipynb b/_sources/getting_started/intro_to_dymos/intro_ivp.ipynb index 913e7a409..5bc9c6a8b 100644 --- a/_sources/getting_started/intro_to_dymos/intro_ivp.ipynb +++ b/_sources/getting_started/intro_to_dymos/intro_ivp.ipynb @@ -233,8 +233,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", @@ -361,8 +361,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", @@ -462,8 +462,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", diff --git a/_sources/getting_started/intro_to_dymos/intro_segments.ipynb b/_sources/getting_started/intro_to_dymos/intro_segments.ipynb index 2fefa961d..eb0915c21 100644 --- a/_sources/getting_started/intro_to_dymos/intro_segments.ipynb +++ b/_sources/getting_started/intro_to_dymos/intro_segments.ipynb @@ -135,8 +135,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", @@ -232,8 +232,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", @@ -319,8 +319,8 @@ "states = ['x', 'v']\n", "fig, axes = plt.subplots(len(states), 1)\n", "for i, state in enumerate(states):\n", - " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.states:{state}'), 'o')\n", - " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.states:{state}'), '-')\n", + " sol = axes[i].plot(t_sol, prob.get_val(f'traj.phase0.timeseries.{state}'), 'o')\n", + " sim = axes[i].plot(t_sim, sim_out.get_val(f'traj.phase0.timeseries.{state}'), '-')\n", " axes[i].set_ylabel(state)\n", "axes[-1].set_xlabel('time (s)')\n", "fig.legend((sol[0], sim[0]), ('solution', 'simulation'), loc='lower right', ncol=2)\n", diff --git a/contributing/contributing.html b/contributing/contributing.html index 92739c3d0..24d289a14 100644 --- a/contributing/contributing.html +++ b/contributing/contributing.html @@ -729,21 +729,21 @@

Notebook Creation#

Both sets of equations of motion have common aerodynamic models.

First, the lift coefficient is computed using a model which assumes linearity in lift wrt the angle of attack.

-
-(21)#\[\begin{align} +
+(21)#\[\begin{align} C_L &= C_{L0} + \frac{\alpha}{\alpha_{max}} \left(C_{L-max} - C_{L0}\right) \end{align}\]

Next, the drag-due-to-lift factor is computed (Equations 12.48 and 12.61 in Raymer[@raymer2012aircraft]).

-
-(22)#\[\begin{align} +
+(22)#\[\begin{align} K_{nom} &= \frac{1}{ \pi AR e} \\ b &= \frac{span}{2} \\ K &= 33 K_{nom} \frac{ \left(\frac{h + h_w}{b} \right) ^{\frac{3}{2}}}{1.0 + 33 \left( \frac{h + h_w}{b}\right) ^{\frac{3}{2}}} @@ -591,8 +591,8 @@

The Aerodynamic Model

Finally, the lift and drag are computed after computing the dynamic pressure.

-
-(23)#\[\begin{align} +
+(23)#\[\begin{align} q &= 0.5 \rho v^2 \\ L &= q S C_L \\ D &= q S \left( C_{D0} + K C_{L}^2 \right) @@ -603,8 +603,8 @@

Stall Speed\(\frac{v}{v_{stall}}\)). This constraint is used to trigger the beginning of rotation and is used as a boundary constraint at the end of the initial climb. Stall speed is given by Equation 5.6 in Raymer[@raymer2012aircraft].

-
-(24)#\[\begin{align} +
+(24)#\[\begin{align} W &= m g \\ v_{stall} &= \sqrt{\frac{2 * W}{\rho S C_{L-max}}} \end{align}\]
@@ -612,8 +612,8 @@

Stall Speed

Runway Equations of Motion#

The runway equations of motion are used to integrate range and speed as the vehicle rolls along the runway.

-
-(25)#\[\begin{align} +
+(25)#\[\begin{align} F_r &= mg - L \cos \alpha - T \sin \alpha \\ \dot{v} &= \frac{T \cos \alpha - D - F_r \mu_r}{m} \\ \dot{r} &= v @@ -640,8 +640,8 @@

Runway Equations of Motion

Flight Equations of Motion#

The flight equations of motion include two additional state variables: the flight-path angle (\(\gamma\)) and altitude (\(h\)).

-
-(26)#\[\begin{align} +
+(26)#\[\begin{align} \dot{v} &= \frac{T}{m} \cos \alpha - \frac{D}{m} - g \sin \gamma \\ \dot{\gamma} &= \frac{T}{m v} \sin \alpha + \frac{L}{m v} - \frac{g \cos \gamma}{v} \\ \dot{h} &= v \sin \gamma \\ @@ -1165,7 +1165,7 @@

Building and running the problem -
+
Coloring for 'traj.phases.rto.rhs_all' (class BalancedFieldODEComp)
 
 Jacobian shape: (132, 60)  ( 9.79% nonzero)
 FWD solves: 16   REV solves: 0
 Total colors vs. total size: 16 vs 60  (73.3% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.024118 sec.
-Time to compute coloring: 0.017445 sec.
+Time to compute sparsity: 0.021996 sec.
+Time to compute coloring: 0.016319 sec.
 Memory to compute coloring: 0.000000 MB.
 
 Coloring for 'traj.phases.v1_to_vr.rhs_all' (class BalancedFieldODEComp)
@@ -1449,8 +1449,8 @@ 

Building and running the problem
Full total jacobian was computed 3 times, taking 1.752797 seconds.
+
Full total jacobian was computed 3 times, taking 1.474327 seconds.
 Total jacobian shape: (178, 166) 
 
 
@@ -1486,12 +1486,12 @@ 

Building and running the problem
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/total_jac.py:1782: DerivativesWarning:Constraints or objectives [('traj.phases.climb.timeseries.timeseries_comp.states:gam', inds=[(0, 0)])] cannot be impacted by the design variables of the problem.
+
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/total_jac.py:1782: DerivativesWarning:Constraints or objectives [('traj.phases.climb.timeseries.timeseries_comp.gam', inds=[(0, 0)])] cannot be impacted by the design variables of the problem.
 
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
@@ -1530,8 +1530,8 @@ 

Building and running the problemfig, axes = plt.subplots(2, 1, sharex=True, gridspec_kw={'top': 0.92}, figsize=(12,6)) for phase in ['br_to_v1', 'rto', 'v1_to_vr', 'rotate', 'climb']: - r = sim_case.get_val(f'traj.{phase}.timeseries.states:r', units='ft') - v = sim_case.get_val(f'traj.{phase}.timeseries.states:v', units='kn') + r = sim_case.get_val(f'traj.{phase}.timeseries.r', units='ft') + v = sim_case.get_val(f'traj.{phase}.timeseries.v', units='kn') t = sim_case.get_val(f'traj.{phase}.timeseries.time', units='s') axes[0].plot(t, r, '-', label=phase) axes[1].plot(t, v, '-', label=phase) @@ -1543,10 +1543,10 @@

Building and running the problemaxes[1].grid(True) tv1 = sim_case.get_val('traj.br_to_v1.timeseries.time', units='s')[-1, 0] -v1 = sim_case.get_val('traj.br_to_v1.timeseries.states:v', units='kn')[-1, 0] +v1 = sim_case.get_val('traj.br_to_v1.timeseries.v', units='kn')[-1, 0] tf_rto = sim_case.get_val('traj.rto.timeseries.time', units='s')[-1, 0] -rf_rto = sim_case.get_val('traj.rto.timeseries.states:r', units='ft')[-1, 0] +rf_rto = sim_case.get_val('traj.rto.timeseries.r', units='ft')[-1, 0] axes[0].annotate(f'field length = {r[-1, 0]:5.1f} ft', xy=(t[-1, 0], r[-1, 0]), xycoords='data', xytext=(0.7, 0.5), diff --git a/examples/balanced_field/balanced_field_funccomp.html b/examples/balanced_field/balanced_field_funccomp.html index 139482cf2..c14bdeb2b 100644 --- a/examples/balanced_field/balanced_field_funccomp.html +++ b/examples/balanced_field/balanced_field_funccomp.html @@ -993,8 +993,8 @@

Building and running the problem
Coloring for 'traj.phases.rto.rhs_all' (class ExplicitFuncComp)
 
-Jacobian shape: (132, 60)  ( 9.79% nonzero)
+Jacobian shape: (132, 60)  ( 9.77% nonzero)
 FWD solves: 16   REV solves: 0
 Total colors vs. total size: 16 vs 60  (73.3% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.392592 sec.
-Time to compute coloring: 0.086176 sec.
+Time to compute sparsity: 0.334716 sec.
+Time to compute coloring: 0.070965 sec.
 Memory to compute coloring: 0.000000 MB.
 

@@ -1023,8 +1023,8 @@

Building and running the problem
Full total jacobian was computed 3 times, taking 5.754664 seconds.
+
Full total jacobian was computed 3 times, taking 4.821109 seconds.
 Total jacobian shape: (178, 166) 
 
 
@@ -1067,31 +1067,31 @@ 

Building and running the problem
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/total_jac.py:1782: DerivativesWarning:Constraints or objectives [('traj.phases.climb.timeseries.timeseries_comp.states:gam', inds=[(0, 0)])] cannot be impacted by the design variables of the problem.
+
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/total_jac.py:1782: DerivativesWarning:Constraints or objectives [('traj.phases.climb.timeseries.timeseries_comp.gam', inds=[(0, 0)])] cannot be impacted by the design variables of the problem.
 
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 /usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 /usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 /usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
+/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
+/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 /usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 /usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
-/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
 
-
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/core/group.py:2829: UnusedOptionWarning:'ode_eval' <class ODEEvaluationGroup>: ignored flat_src_indices and/or src_shape because src_indices was not specified.
-/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/recorders/sqlite_recorder.py:227: UserWarning:The existing case recorder file, dymos_simulation.db, is being overwritten.
+
Simulating trajectory traj
 
-
Simulating trajectory traj
+
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/recorders/sqlite_recorder.py:227: UserWarning:The existing case recorder file, dymos_simulation.db, is being overwritten.
 
Done simulating trajectory traj
@@ -1106,8 +1106,8 @@ 

Building and running the problemfig, axes = plt.subplots(2, 1, sharex=True, gridspec_kw={'top': 0.92}, figsize=(12, 6)) for phase in ['br_to_v1', 'rto', 'v1_to_vr', 'rotate', 'climb']: - r = sim_case.get_val(f'traj.{phase}.timeseries.states:r', units='ft') - v = sim_case.get_val(f'traj.{phase}.timeseries.states:v', units='kn') + r = sim_case.get_val(f'traj.{phase}.timeseries.r', units='ft') + v = sim_case.get_val(f'traj.{phase}.timeseries.v', units='kn') t = sim_case.get_val(f'traj.{phase}.timeseries.time', units='s') axes[0].plot(t, r, '-', label=phase) axes[1].plot(t, v, '-', label=phase) @@ -1119,10 +1119,10 @@

Building and running the problemaxes[1].grid(True) tv1 = sim_case.get_val('traj.br_to_v1.timeseries.time', units='s')[-1, 0] -v1 = sim_case.get_val('traj.br_to_v1.timeseries.states:v', units='kn')[-1, 0] +v1 = sim_case.get_val('traj.br_to_v1.timeseries.v', units='kn')[-1, 0] tf_rto = sim_case.get_val('traj.rto.timeseries.time', units='s')[-1, 0] -rf_rto = sim_case.get_val('traj.rto.timeseries.states:r', units='ft')[-1, 0] +rf_rto = sim_case.get_val('traj.rto.timeseries.r', units='ft')[-1, 0] axes[0].annotate(f'field length = {r[-1, 0]:5.1f} ft', xy=(t[-1, 0], r[-1, 0]), xycoords='data', xytext=(0.7, 0.5), diff --git a/examples/brachistochrone/brachistochrone.html b/examples/brachistochrone/brachistochrone.html index 933c6d259..8dc43f53e 100644 --- a/examples/brachistochrone/brachistochrone.html +++ b/examples/brachistochrone/brachistochrone.html @@ -537,8 +537,8 @@

State variables

System dynamics#

From the free-body diagram above, the evolution of the state variables is given by the following ordinary differential equations (ODE).

-
-(13)#\[\begin{align} +
+(13)#\[\begin{align} \frac{d x}{d t} &= v \sin(\theta) \\ \frac{d y}{d t} &= -v \cos(\theta) \\ \frac{d v}{d t} &= g \cos(\theta) @@ -556,8 +556,8 @@

The initial and final conditions -(14)#\[\begin{align} +
+(14)#\[\begin{align} x_0 &= 0 \\ y_0 &= 10 \\ v_0 &= 0 @@ -565,8 +565,8 @@

The initial and final conditions -(15)#\[\begin{align} +
+(15)#\[\begin{align} x_f &= 10 \\ y_f &= 5 \\ v_f &= \mathrm{free} @@ -732,27 +732,27 @@

Testing the ODE
Model viewer data has already been recorded for Driver.
 

-
Full total jacobian was computed 3 times, taking 0.036963 seconds.
+
Full total jacobian was computed 3 times, taking 0.030417 seconds.
 Total jacobian shape: (40, 50) 
 
 
-Jacobian shape: (40, 50)  (18.65% nonzero)
+Jacobian shape: (40, 50)  (18.50% nonzero)
 FWD solves: 13   REV solves: 0
 Total colors vs. total size: 13 vs 50  (74.0% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.036963 sec.
-Time to compute coloring: 0.040171 sec.
+Time to compute sparsity: 0.030417 sec.
+Time to compute coloring: 0.034754 sec.
 Memory to compute coloring: 0.000000 MB.
 
@@ -886,9 +886,9 @@

Solving the problem with Legendre-Gauss-Lobatto collocation in Dymos -
Full total jacobian was computed 3 times, taking 0.019724 seconds.
+
Full total jacobian was computed 3 times, taking 0.017404 seconds.
 Total jacobian shape: (12, 51) 
 
 
-Jacobian shape: (12, 51)  (98.37% nonzero)
+Jacobian shape: (12, 51)  (96.57% nonzero)
 FWD solves: 0   REV solves: 12
 Total colors vs. total size: 12 vs 12  (0.0% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.019724 sec.
-Time to compute coloring: 0.033767 sec.
+Time to compute sparsity: 0.017404 sec.
+Time to compute coloring: 0.029078 sec.
 Memory to compute coloring: 0.000000 MB.
-Full total jacobian was computed 3 times, taking 0.019691 seconds.
+Full total jacobian was computed 3 times, taking 0.017408 seconds.
 Total jacobian shape: (12, 51) 
 
 
-Jacobian shape: (12, 51)  (98.37% nonzero)
+Jacobian shape: (12, 51)  (96.57% nonzero)
 FWD solves: 0   REV solves: 12
 Total colors vs. total size: 12 vs 12  (0.0% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.019691 sec.
-Time to compute coloring: 0.033291 sec.
+Time to compute sparsity: 0.017408 sec.
+Time to compute coloring: 0.028893 sec.
 Memory to compute coloring: 0.000000 MB.
 
@@ -1066,9 +1066,9 @@

Solving the problem with Legendre-Gauss-Lobatto collocation in Dymos
-
plot_results([('traj.phase0.timeseries.states:x', 'traj.phase0.timeseries.states:y',
+
-
Full total jacobian was computed 3 times, taking 0.366153 seconds.
+
Full total jacobian was computed 3 times, taking 0.287595 seconds.
 Total jacobian shape: (223, 287) 
 
-
Jacobian shape: (223, 287)  ( 6.68% nonzero)
-FWD solves: 25   REV solves: 0
-Total colors vs. total size: 25 vs 287  (91.3% improvement)
+
Jacobian shape: (223, 287)  ( 8.83% nonzero)
+FWD solves: 35   REV solves: 0
+Total colors vs. total size: 35 vs 287  (87.8% improvement)
 
 Sparsity computed using tolerance: 1e-25
-Time to compute sparsity: 0.366153 sec.
-Time to compute coloring: 0.364317 sec.
-Memory to compute coloring: 0.000000 MB.
+Time to compute sparsity: 0.287595 sec.
+Time to compute coloring: 0.559144 sec.
+Memory to compute coloring: 8.546875 MB.
 
/usr/share/miniconda/envs/test/lib/python3.10/site-packages/openmdao/visualization/opt_report/opt_report.py:634: UserWarning: Attempting to set identical low and high ylims makes transformation singular; automatically expanding.
@@ -727,12 +727,12 @@ 

Plots# sol_case = om.CaseReader('dymos_solution.db').get_case('final') -sol_x = sol_case.get_val('phase0.timeseries.states:x') -sol_y = sol_case.get_val('phase0.timeseries.states:y') -sol_v = sol_case.get_val('phase0.timeseries.states:v') +sol_x = sol_case.get_val('phase0.timeseries.x') +sol_y = sol_case.get_val('phase0.timeseries.y') +sol_v = sol_case.get_val('phase0.timeseries.v') sol_t0 = sol_case.get_val('phase0.timeseries.time') sol_t1 = sol_case.get_val('phase1.timeseries.time') -sol_s = sol_case.get_val('phase1.timeseries.states:S') +sol_s = sol_case.get_val('phase1.timeseries.S') def add_plot(p, x, y, label, i): circle = p.circle(x.ravel(), y.ravel(), color=c[i], size=5) @@ -1482,10 +1482,10 @@

Plots# -
+