diff --git a/_images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png b/_images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png deleted file mode 100644 index 381063656..000000000 Binary files a/_images/24d366c4d197b5a4cbe8c3b8eed2cde0d3ca4cf1b1e3fd52747ce74ae156ed9a.png and /dev/null differ diff --git a/_images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png b/_images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png new file mode 100644 index 000000000..b530d8871 Binary files /dev/null and b/_images/350eb5f60f2e2a93e70c0eebe77b6abfb3f54e82034b2c42e882f44725a41e67.png differ diff --git a/_images/1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png b/_images/bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png similarity index 99% rename from _images/1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png rename to _images/bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png index fff29cb1d..476b98cca 100644 Binary files a/_images/1101d4b0e6e85c6453f977dad1435479e5bee329b767f9ad4413c39489b7a5c7.png and b/_images/bbd1f0cd9f9977b094573663b12d9d02d2b3bab5e939848e01171e71cb5f99df.png differ diff --git a/_modules/dymos/phase/analytic_phase.html b/_modules/dymos/phase/analytic_phase.html index 7821c5982..a5a595f27 100644 --- a/_modules/dymos/phase/analytic_phase.html +++ b/_modules/dymos/phase/analytic_phase.html @@ -806,6 +806,10 @@

Source 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# -
+