texlive[45057] Master/texmf-dist: pst-ode (17aug17)

commits+karl at tug.org commits+karl at tug.org
Thu Aug 17 23:17:38 CEST 2017


Revision: 45057
          http://tug.org/svn/texlive?view=revision&revision=45057
Author:   karl
Date:     2017-08-17 23:17:38 +0200 (Thu, 17 Aug 2017)
Log Message:
-----------
pst-ode (17aug17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/pst-ode/ChangeLog
    trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.pdf
    trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.tex
    trunk/Master/texmf-dist/dvips/pst-ode/pst-ode.pro
    trunk/Master/texmf-dist/tex/generic/pst-ode/pst-ode.tex

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/pst-ode/README.md
    trunk/Master/texmf-dist/doc/generic/pst-ode/examples/
    trunk/Master/texmf-dist/doc/generic/pst-ode/examples/lorenz.tex
    trunk/Master/texmf-dist/doc/generic/pst-ode/examples/ode.tex
    trunk/Master/texmf-dist/doc/generic/pst-ode/examples/particle.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/generic/pst-ode/README

Modified: trunk/Master/texmf-dist/doc/generic/pst-ode/ChangeLog
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/ChangeLog	2017-08-17 21:17:10 UTC (rev 45056)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/ChangeLog	2017-08-17 21:17:38 UTC (rev 45057)
@@ -1,3 +1,9 @@
+2017-08-15
+	* version 0.11
+	* fix: imprecise t_out calculation
+	* new: option `dt0' and user command \pstODErestoreState added
+	* change: user command \pstODEsetOrRestoreState removed
+
 2017-06-16
 	* version 0.10
 	* more diagnostic terminal output for stepsize underflow

Deleted: trunk/Master/texmf-dist/doc/generic/pst-ode/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/README	2017-08-17 21:17:10 UTC (rev 45056)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/README	2017-08-17 21:17:38 UTC (rev 45057)
@@ -1,15 +0,0 @@
-==========================
- pst-ode PSTricks package
-==========================
-
-Alexander Grahn, (c) 2012--today
-
-
-`pst-ode' defines \pstODEsolve for solving initial value problems for sets
-of Ordinary Differential Equations (ODE) using the Runge-Kutta-Fehlberg
-(RKF45) method with automatic step size adjustment.
-
-
-This material is subject to the LaTeX Project Public License. See
-  http://mirror.ctan.org/help/Catalogue/licenses.lppl.html
-for the details of that license.

Added: trunk/Master/texmf-dist/doc/generic/pst-ode/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/README.md	2017-08-17 21:17:38 UTC (rev 45057)
@@ -0,0 +1,17 @@
+# The `pst-ode` PSTricks package
+
+© 2012--`\today` Alexander Grahn
+
+https://github.com/agrahn/pst-ode
+
+This package defines `\pstODEsolve` for solving initial value problems for sets of Ordinary Differential Equations (ODE) using the Runge-Kutta-Fehlberg (**`RKF45`**) method with automatic step size adjustment.
+
+`\pstODEsolve[<options>]{<result>}{<output format>}{`*t*<sub>0</sub>`}{`*t*<sub>e</sub>`}{`*N*`}{`**x**<sub>0</sub>`}{`**f**`(`*t*`, `**x**`)}`
+
+The state vectors **x** found at *N* equally spaced output points between *t*<sub>0</sub> and *t*<sub>e</sub>  are stored in the PostScript object `<result>`,  formatted according to the second argument `<output format>`, as a long list of values. `<output format>` lists the quantities to be stored in `<result>`. The user can select from the elements of **x** and the integration parameter *t*.
+
+The initial condition vector **x**<sub>0</sub> and the right-hand side **f**`(`*t*`, `**x**`)` of the ODE system can be input in algebraic notation, if desired. RPN (Postfix) notation of PostScript can as well be used.
+
+`<result>` can be directly used as the `<data>` argument of `\listplot{<data>}` (package `pst-plot`) or `\listplotThreeD{<data>}` (package `pst-3dplot`).
+
+This material is subject to the [LaTeX Project Public License](http://mirrors.ctan.org/tex-archive/macros/latex/base/lppl.txt).


Property changes on: trunk/Master/texmf-dist/doc/generic/pst-ode/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/lorenz.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/examples/lorenz.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/examples/lorenz.tex	2017-08-17 21:17:38 UTC (rev 45057)
@@ -0,0 +1,50 @@
+\documentclass{article}
+\usepackage{pst-ode,pst-3dplot}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}%
+
+\begin{document}
+\begin{center}
+\pstVerb{
+  /alpha 10 def
+  /beta 28 def
+  /gamma 8 3 div def
+}%
+\pstODEsolve[
+  algebraic,
+%  saveData % enabling this writes table of results in file lorenzXYZ.data
+            % requires ps2pdf -dNOSAFER
+]{lorenzXYZ}{0 1 2}{0}{25}{2501}{10 10 30}{
+  alpha*(x[1]-x[0]) |
+  x[0]*(beta-x[2]) - x[1] |
+  x[0]*x[1] - gamma*x[2]
+}
+\fbox{\begin{pspicture}(-6,-2)(6,10)
+\psset{unit=0.17cm,Alpha=45,Beta=15}
+\listplotThreeD{lorenzXYZ}
+\psset{unit=0.425cm,linestyle=dashed}
+\pstThreeDNode(0,0,0){O}
+\pstThreeDNode(0,0,5){Z}
+\pstThreeDNode(5,0,0){X}
+\pstThreeDNode(0,5,0){Y}
+\pstThreeDNode(-10,-10,0){A}
+\pstThreeDNode(-10,-10,20){B}
+\pstThreeDNode(-10,10,20){C}
+\pstThreeDNode(-10,10,0){D}
+\pstThreeDNode(10,-10,0){E}
+\pstThreeDNode(10,-10,20){F}
+\pstThreeDNode(10,10,20){G}
+\pstThreeDNode(10,10,0){H}
+\pspolygon(A)(B)(C)(D)
+\pspolygon(E)(F)(G)(H)
+\psline(A)(E)
+\psline(B)(F)
+\psline(D)(H)
+\psline(C)(G)
+\psset{linestyle=solid,linecolor=red}
+\psline{->}(O)(X)
+\psline{->}(O)(Y)
+\psline{->}(O)(Z)
+\end{pspicture}}
+\end{center}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/lorenz.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/ode.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/examples/ode.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/examples/ode.tex	2017-08-17 21:17:38 UTC (rev 45057)
@@ -0,0 +1,18 @@
+\documentclass{article}
+\usepackage{pst-ode,pst-plot}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}%
+
+\begin{document}
+\begin{center}
+\psset{unit=3cm}
+\begin{pspicture}(-0.3,-0.4)(.2,1)
+  \psset{xAxisLabel=$t$,xAxisLabelPos={c,-6ex},yAxisLabelPos={-3ex,c}}
+  \begin{psgraph}[axesstyle=frame,Ox=-1,](0,0)(0,0)(4,1){10cm}{2.5cm}
+  \rput(1,0){\psplot[algebraic]{-1}{3}{Euler^(-x^2)}}
+  \pstODEsolve[algebraicIC,algebraic]{TY}{(t) 0}{-1}{3}{5}{1/Euler}{-2*t*y[0]}
+  \rput(1,0){\listplot[plotstyle=dots,dotsize=0.05,linecolor=red]{TY}}
+  \end{psgraph}
+\end{pspicture}
+\end{center}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/ode.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/particle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/examples/particle.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/examples/particle.tex	2017-08-17 21:17:38 UTC (rev 45057)
@@ -0,0 +1,55 @@
+\documentclass{article}
+\usepackage{pst-ode,pst-3dplot}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}%
+
+\begin{document}
+\begin{center}
+\psset{unit=0.74cm,Alpha=40,Beta=20}
+\begin{pspicture}(-10,-2)(6,13)
+\newpsstyle{vecteurA}{arrowinset=0.1,arrowsize=0.15,linecolor={[rgb]{0 0.5 1}}}
+\pstVerb{
+  /wc 5 def
+  /tau 5 def
+  /vx 20 def
+  /vz 2 def
+}
+\pstODEsolve[algebraic]{particleXYZ}{0 1 2}{0}{25}{1000}{0 0 0 vx 0 vz}{
+  y[3] | y[4] | y[5] | wc*y[4] - y[3]/tau | -wc*y[3] - y[4]/tau | -y[5]/tau
+}
+\listplotThreeD{particleXYZ}
+\pstThreeDNode(0,0,0){O}
+\pstThreeDNode(0,0,1){Z}
+\pstThreeDNode(1,0,0){X}
+\pstThreeDNode(0,1,0){Y}
+\pstThreeDNode(-5,-9,0){A}
+\pstThreeDNode(-5,-9,10){B}
+\pstThreeDNode(-5,2,10){C}
+\pstThreeDNode(-5,2,0){D}
+\pstThreeDNode(5,-9,0){E}
+\pstThreeDNode(5,-9,10){F}
+\pstThreeDNode(5,2,10){G}
+\pstThreeDNode(5,2,0){H}
+\pstThreeDNode(0,0,0){M0}
+\pstThreeDNode(vx 5 div,0,vz 5 div){V}
+\pstThreeDNode(vx 5 div,0,0){Vx}
+{\psset{linestyle=dashed}
+\pspolygon(A)(B)(C)(D)
+\pspolygon(E)(F)(G)(H)
+\psline(A)(E)
+\psline(B)(F)
+\psline(D)(H)
+\psline(C)(G)}%
+\psline[linecolor=red]{->}(M0)(V)
+\psline[linecolor=cyan]{->}(M0)(Vx)
+\uput{0.1}[l](V){\red$\overrightarrow{v}_0$}
+{\psset{linestyle=solid,linecolor=red}
+\psline[style=vecteurA]{->}(O)(X)
+\psline[style=vecteurA]{->}(O)(Y)
+\psline[style=vecteurA]{->}(O)(Z)}%
+\uput[u](Z){$z$}
+\uput[dl](X){$x$}
+\uput[r](Y){$y$}
+\end{pspicture}
+\end{center}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/generic/pst-ode/examples/particle.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.tex	2017-08-17 21:17:10 UTC (rev 45056)
+++ trunk/Master/texmf-dist/doc/generic/pst-ode/pst-ode-doc.tex	2017-08-17 21:17:38 UTC (rev 45057)
@@ -1,19 +1,19 @@
 \documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
-    headexclude,footexclude,oneside,dvips]{pst-doc}
-\usepackage[UKenglish]{babel}
+    headexclude,footexclude,oneside,dvips,UKenglish]{pst-doc}
 \usepackage[T1]{fontenc}
 %\usepackage{lmodern}
   \usepackage[tt=false]{libertine} %override beramono (doesn't look like tt font)
-  \usepackage[libertine]{newtxmath}
+  \usepackage{libertinust1math}
   %\usepackage[scaled=0.83]{luximono} %override beramono (doesn't look like tt font)
 \usepackage{attachfile2}
 \attachfilesetup{date={},color=1 0 0}
-\usepackage[latin1]{inputenc}
+\usepackage[utf8]{inputenc}
 \usepackage{amsmath}
 \usepackage{pst-3dplot}
 \usepackage{pst-plot}
 \usepackage{pstricks-add}
 \usepackage{pst-ode}
+\usepackage[ocgcolorlinks]{ocgx2}
 \let\pstFV\fileversion
 \let\belowcaptionskip\abovecaptionskip
 
@@ -28,7 +28,7 @@
   /beta 28 def
   /gamma 8 3 div def
 }%
-\pstODEsolve[algebraic]{lorenzXYZ}{0 1 2}{0}{25}{2501}{10 10 30}{
+\pstODEsolve[algebraic,dt0=0.05]{lorenzXYZ}{0 1 2}{0}{25}{2501}{10 10 30}{
   alpha*(x[1]-x[0]) |
   x[0]*(beta-x[2]) - x[1] |
   x[0]*x[1] - gamma*x[2]
@@ -67,42 +67,45 @@
 \let\verbI\texttt
 
 
-\def\parsedate#1/#2/#3\relax{ 
-  \def\year{#1} 
-  \def\month{#2} 
-  \def\day{#3} 
-} 
+\def\parsedate#1/#2/#3\relax{
+  \def\year{#1}
+  \def\month{#2}
+  \def\day{#3}
+}
 
 \begin{document}
+%\author{Alexander Grahn}
 \author{Alexander Grahn}
 \expandafter\parsedate\filedate\relax %set current date to package date
-\title{pst-ode}
-\subtitle{A PSTricks package for solving initial value problems for sets of Ordinary Differential Equations (ODE),  v\pstFV}
+\title{pst-ode\\[4ex]}
+\subtitle{A PSTricks package for solving initial value problems for sets of Ordinary Differential Equations (ODE),  v\pstFV\\[2ex]\url{https://github.com/agrahn/pst-ode}}
 \maketitle
 
-\tableofcontents
-
 %\clearpage
 \begin{abstract}
-	\noindent The \LPack{pstricks-add} package already provides \Lcs{psplotDiffEqn} for solving ODEs. However, as its name suggests, the macro always produces a plot of the computed result. While any number of coupled differential equations can be integrated simultaneously, only two-dimensional plots are supported. The user has to select the two components of the computed state vectors to be used in the plot. Package \LPack{pst-ode} separates solving the equations from plotting the result. The result is stored as a \PS{} object and can be plotted later using macros from other PSTricks packages, such as \Lcs{listplot} (\LPack{pst-plot}) and \Lcs{listplotThreeD} (\LPack{pst-3dplot}), or be further processed by user-defined \PS{} procedures. Optionally, the computed state vectors can be written as a table to a text file.
+\noindent The \LPack{pstricks-add} package already provides \Lcs{psplotDiffEqn} for solving ODEs. However, as its name suggests, the macro always produces a plot of the computed result. While any number of coupled differential equations can be integrated simultaneously, only two-dimensional plots are supported. The user has to select the two components of the computed state vectors to be used in the plot.
 
+Package \LPack{pst-ode} separates solving the equations from plotting the result. The result is stored as a \PS{} object and can be plotted later using macros from other PSTricks packages, such as \Lcs{listplot} (\LPack{pst-plot}) and \Lcs{listplotThreeD} (\LPack{pst-3dplot}), or be further processed by user-defined \PS{} procedures. Optionally, the computed state vectors can be written as a table to a text file.
+
 Package \LPack{pst-ode} uses the Runge-Kutta-Fehlberg (RKF45) method with automatic step size control for integrating the differential equations. Thus, the precision of the result does not depend on the number of plot points specified, as it would be the case with the classical Runge-Kutta (RK4) method.
 \end{abstract}
 
+\tableofcontents
+
 \section{Introduction}
 An initial value problem involves finding the solution $\mathbf{x}(t)$ of a set of first order differential equations
 \begin{equation}
-	\frac{\mathrm{d}\mathbf{x}}{\mathrm{d}t}=\mathbf{f}(t,\mathbf{x})
+    \frac{\mathrm{d}\mathbf{x}}{\mathrm{d}t}=\mathbf{f}(t,\mathbf{x})
 \end{equation}
 by integrating them with respect to the independent variable $t$ starting at $t_0$ up to $t_\mathrm{e}$. If the set consists of $n$ differential equations,
 a vector of initial conditions
 \begin{equation}
-	\mathbf{x}(t_0)=\mathbf{x}_0
+    \mathbf{x}(t_0)=\mathbf{x}_0
 \end{equation}
 of the same length $n$ is required. For $n=1$ the initial value problem is one-dimensional:
 \begin{gather}
-	\frac{\mathrm{d}x}{\mathrm{d}t}=f(t,x)\quad\text{for}\ t \in [t_0, t_\mathrm{e}]\text{, where}\label{eq:1dode}\\
-	x(t_0) = x_0.\label{eq:1ini}
+    \frac{\mathrm{d}x}{\mathrm{d}t}=f(t,x)\quad\text{for}\ t \in [t_0, t_\mathrm{e}]\text{, where}\label{eq:1dode}\\
+    x(t_0) = x_0.\label{eq:1ini}
 \end{gather}
 
 Instead of producing analytical expressions of the solution functions $\mathbf{x}(t)$, the numerical method gives only approximate values $\mathbf{x}_i$ at $N$ discrete points $t_i$ of the integration interval $I=[t_0, t_\mathrm{e}]$:
@@ -113,11 +116,11 @@
 
 \section{Commands}
 \begin{BDef}
-	\Lcs{pstODEsolve}\OptArgs\Largb{result}\Largb{output format}\Largb{$t_0$}\Largb{$t_\mathrm{e}$}\Largb{$N$}\Largb{$\mathbf{x}_0$}\Largb{$\mathbf{f}(t,\mathbf{x})$}
+    \Lcs{pstODEsolve}\OptArgs\Largb{result}\Largb{output format}\Largb{$t_0$}\Largb{$t_\mathrm{e}$}\Largb{$N$}\Largb{$\mathbf{x}_0$}\Largb{$\mathbf{f}(t,\mathbf{x})$}
 \end{BDef}
 is the main user command for solving initial value problems.
 
-The first mandatory argument \Larg{result} is a simple identifier composed of letters and possibly numbers. It is used to create a \PS{} object of the same name, which takes the computed state vectors $\mathbf{x}_i$, formatted according to the second argument \Larg{output format}, as a long list of values. \Larg{result} can be directly used as the \Larg{data} argument of \Lcs{listplot}\Largb{data} (package \LPack{pst-plot}) or \Lcs{listplotThreeD}\Largb{data} (package \LPack{pst-3dplot}). When put on the \PS{} operand stack, \Larg{result} is immediately executed, that is, the list of values contained in \Larg{result} is pushed onto the operand stack. The scope of \Larg{result} is global and thus its content survives page breaks.
+The first mandatory argument \Larg{result} is a simple identifier composed of letters and possibly numbers. It is the name of a \PS{} object that takes the computed state vectors $\mathbf{x}_i$, formatted according to the second argument \Larg{output format}, as a long list of values. \Larg{result} can be directly used as the \Larg{data} argument of \Lcs{listplot}\Largb{data} (package \LPack{pst-plot}) or \Lcs{listplotThreeD}\Largb{data} (package \LPack{pst-3dplot}). When put on the \PS{} operand stack, \Larg{result} is immediately executed, that is, the list of values contained in \Larg{result} is pushed onto the operand stack. The scope of \Larg{result} is global and thus its content survives page breaks.
 
 The second argument \Larg{output format} determines which of the components of the state vectors $\mathbf{x}_i$ and possibly the independent variable $t$ are stored into \Larg{result}. \Larg{output format} can be specified in two different formats, depending on the setting of the command option \Lkeyword{algebraicOutputFormat}.
 If \Lkeyword{algebraicOutputFormat} is set, calculations can be made on the components of the computed state vectors before writing them to \Larg{result}. Without option \Lkeyword{algebraicOutputFormat} the following applies: The keyword \Lkeyword{(t)} (parentheses required) inserts the integration parameter value $t_i$ into the result list; numbers (\Lkeyword{0}, \Lkeyword{1}, \Lkeyword{2}, \dots, $n-1$) in arbitrary order specify the components of vector $\mathbf{x}_i$ to be inserted, as well as their order of insertion. The elements of \Larg{output format} are to be separated by spaces. If option \Lkeyword{algebraicOutputFormat} is set, \Larg{output format} is a \Lkeyword{|}-separated list of algebraic expressions (infix notation) according to which the components of the output vector are to be calculated. In these algebraic expressions, the $n$ current state vector components can be referred to as \Lkeyword{x[0]}, \Lkeyword{x[1]}, \dots, \Lkeyword{x[}$n-1$\Lkeyword{]} or \Lkeyword{y[0]}, \Lkeyword{y[1]}, \dots, \Lkeyword{y[}$n-1$\Lkeyword{]}, and the current independent variable value as `\Lkeyword{t}'. In either case, there is no upper limit of the output vector length. It must have at least one element though.
@@ -126,44 +129,57 @@
 
 $N$ is the number of \emph{equally} spaced output points, including $t_0$ and $t_\mathrm{e}$; it must be $\ge 2$. In order to divide the interval of integration into $K$ output steps, $N$ must be set to $K+1$. Note that the precision of the solution does \emph{not} depend on $N$; internal integration steps are automatically inserted and resized according to the changes in the solution.
 
-$\mathbf{x}_0$ is a list of $n$ space separated initial values, one for each differential equation. Alternatively, $\mathbf{x}_0$ can be given as a \PS{} procedure pushing the initial values on the stack, or as an algebraic expression in infix notation where the elements are separated by `\Lkeyword{|}'. Infix notation requires option \Lkeyword{algebraicIC}. This argument can be left empty. In that case, the last computed state vector of a preceding \Lcs{pstODEsolve} call or a state vector that was set using the \Lcs{pstODEsetOrRestoreState} macro is used as initial condition. Of course, the number of equations $n$ must be the same as in the preceding calculation.
+$\mathbf{x}_0$ is a list of $n$ space separated initial values, one for each differential equation. Alternatively, $\mathbf{x}_0$ can be given as a \PS{} procedure pushing the initial values on the stack, or as an algebraic expression in infix notation where the elements are separated by `\Lkeyword{|}'. Infix notation requires option \Lkeyword{algebraicIC}. This argument can be left empty. In that case, the last computed state vector of a preceding \Lcs{pstODEsolve} call. Of course, the number of equations $n$ must be the same as in the preceding calculation.
 
-$\mathbf{f}(t,\mathbf{x})$ is the right-hand side of the differential equations. Equations can be entered in either infix or \PS{} (postfix, reverse polish) notation. Infix notation requires option \Lkeyword{algebraic}, and equations have to be separated by `\Lkeyword{|}'. The $n$ current state vector components can be referred to as \Lkeyword{x[0]}, \Lkeyword{x[1]}, \dots, \Lkeyword{x[}$n-1$\Lkeyword{]} or \Lkeyword{y[0]}, \Lkeyword{y[1]}, \dots, \Lkeyword{y[}$n-1$\Lkeyword{]}, and the current independent variable value as `\Lkeyword{t}'. If given in \PS{} notation, the provided procedure must first pop the current state vector components in reverse order(!) from the operand stack and then push the first derivatives in regular order back to it. Again, the independent variable value can be accessed using `\Lkeyword{t}'.\\[1ex]
-\Lcs{pstODEsolve} accepts a few \OptArgs: \Lkeyword{append}, \Lkeyword{saveData}, \Lkeyword{algebraicOutputFormat}, \Lkeyword{algebraicT}, \Lkeyword{algebraicIC}, \Lkeyword{algebraic}, \Lkeyword{algebraicAll}, \Lkeyword{silent} and \Lkeyword{varsteptol}.
+$\mathbf{f}(t,\mathbf{x})$ is the right-hand side of the differential equations. Equations can be entered in either infix or \PS{} (postfix, reverse polish) notation. Infix notation requires option \Lkeyword{algebraic}, and equations have to be separated by `\Lkeyword{|}'. The $n$ current state vector components can be referred to as \Lkeyword{x[0]}, \Lkeyword{x[1]}, \dots, \Lkeyword{x[}$n-1$\Lkeyword{]} or \Lkeyword{y[0]}, \Lkeyword{y[1]}, \dots, \Lkeyword{y[}$n-1$\Lkeyword{]}, and the current independent variable value as `\Lkeyword{t}'. If given in \PS{} notation, the provided procedure must first pop the current state vector components in reverse order(!) from the operand stack and then push the first derivatives in regular order back to it. Again, the independent variable value can be accessed using `\Lkeyword{t}'.%\\
 
-With \Lkeyword{append}, the computed result is appended to \Larg{result} which must already exist, e.\, g. from a previous use of \Lcs{pstODEsolve}. Usually, the initial condition vector argument is left empty in order to continue integration from the last computed or from a restored state (see \Lcs{pstODEsetOrRestoreState}).
+\newpage
+\noindent\Lcs{pstODEsolve} accepts a few \OptArgs:\\% \Lkeyword{dt0}, \Lkeyword{append}, \Lkeyword{saveData}, \Lkeyword{algebraicOutputFormat}, \Lkeyword{algebraicT}, \Lkeyword{algebraicIC}, \Lkeyword{algebraic}, \Lkeyword{algebraicAll}, \Lkeyword{silent} and \Lkeyword{varsteptol}.\\
 
-If option \Lkeyword{saveData} is set, the formatted state vectors are written as a table to a textfile named `\Larg{result}\Lkeyword{.dat}'. Note that \Lkeyword{ps2pdf} must be called with option \Lkeyword{-dNOSAFER} to enable writing of external files.
+\noindent\OptArg*{dt0=<number>}\\
+\noindent By default, the output step $(t_\mathrm{e}-t_\mathrm{0})/(N-1)$ is used as the intitial, tentative integration step size. A large initial step may cause the integration to crash early by numerical overflow, in particular if the right-hand side evaluates to large values. With option \Lkeyword{dt0}, an arbitrary value of the initial step size can be specified.\\
 
-With \Lkeyword{algebraicOutputFormat}, the command argument \Larg{output format} is a \Lkeyword{|}-separated list of algebraic expressions in infix notation, according to which the output vector components are to be assembled before storing them into \Larg{result}. Default is to not use algebraic infix expressions. For details, see the description of \Larg{output format} above.
+\noindent\OptArg*{append}\\
+If the initial condition argument $\mathbf{x}_0$ of \Lcs{pstODEsolve} is left empty, integration of an ODE continues from an already existing state, which was obtained by the most recent use of \Lcs{pstODEsolve} or which was re-instated from a previously saved state (\Lcs{pstODEsaveState}) by calling \Lcs{pstODErestoreState}. Keyword \Lkeyword{append} tells \Lcs{pstODEsolve} to append the computed result to \Larg{result} which must already exist.\\
 
-With \Lkeyword{algebraicT}, the integration interval limits $t_0$ and $t_\mathrm{e}$ can be entered as algebraic expressions in infix notation, otherwise \PS{} (postfix, reverse polish) notation must be used. Of course, single rational numbers for  $t_0$ and $t_\mathrm{e}$ always work.
+\noindent\OptArg*{saveData}\\
+If option \Lkeyword{saveData} is set, the formatted state vectors are written as a table to a textfile named `\Larg{result}\Lkeyword{.dat}'. Note that \Lkeyword{ps2pdf} must be called with option \Lkeyword{-dNOSAFER} to enable writing of external files.\\
 
-With \Lkeyword{algebraicIC}, the initial condition vector $\mathbf{x}_0$ can be given in algebraic infix notation. Vector components have to be separated by `\Lkeyword{|}'. Default is \PS{} notation, i.\,e. space separated postfix expressions or rational numbers.
+\noindent\OptArg*{algebraicOutputFormat}\\
+With \Lkeyword{algebraicOutputFormat}, the command argument \Larg{output format} is a \Lkeyword{|}-separated list of algebraic expressions in infix notation, according to which the output vector components are to be assembled before storing them into \Larg{result}. Default is to  \emph{not} use algebraic infix expressions. For details, see the description of \Larg{output format} above.\\
 
-With \Lkeyword{algebraic}, the right-hand side of differential equations $\mathbf{f}(t,\mathbf{x})$ can be given in infix notation. Algebraic infix expressions are to be separated by `\Lkeyword{|}'. Default is \PS{} notation.
+\noindent\OptArg*{algebraicT}\\
+With \Lkeyword{algebraicT}, the integration interval limits $t_0$ and $t_\mathrm{e}$ can be entered as algebraic expressions in infix notation, otherwise \PS{} (postfix, reverse polish) notation must be used. Of course, single rational numbers for  $t_0$ and $t_\mathrm{e}$ always work.\\
 
-Option \Lkeyword{algebraicAll} is equivalent to setting all of \Lkeyword{algebraicOutputFormat}, \Lkeyword{algebraicT}, \Lkeyword{algebraicIC}, \Lkeyword{algebraic}.
+\noindent\OptArg*{algebraicIC}\\
+With \Lkeyword{algebraicIC}, the initial condition vector $\mathbf{x}_0$ can be given in algebraic infix notation. Vector components have to be separated by `\Lkeyword{|}'. Default is \PS{} notation, i.\,e. space separated postfix expressions or rational numbers.\\
 
-Option \Lkeyword{silent} suppresses the terminal output of stepping information.
+\noindent\OptArg*{algebraic}\\
+With \Lkeyword{algebraic}, the right-hand side of differential equations $\mathbf{f}(t,\mathbf{x})$ can be given in infix notation. Algebraic infix expressions are to be separated by `\Lkeyword{|}'. Default is \PS{} notation.\\
 
-The tolerance for the automatic integration step size calculation can be set with \Lkeyword{varsteptol} \Lkeyword{=}\Larg{value}. The default value is \Lkeyword{1e-6}.
+\noindent\OptArg*{algebraicAll}\\
+Option \Lkeyword{algebraicAll} is equivalent to setting all of \Lkeyword{algebraicOutputFormat}, \Lkeyword{algebraicT}, \Lkeyword{algebraicIC}, \Lkeyword{algebraic}.\\
 
-In the case of integration step size underflow, which  is indicated by writing `\Lkeyword{!}' to the terminal during PS to PDF conversion, the computation stops prematurely before reaching $t_\mathrm{e}$. The current value of $t$ and the current state vector $\mathbf{x}$ are written to the terminal. Step size underflow may happen for stiff ODEs at some point along the integration interval $[t_0, t_\mathrm{e}]$.\\[1ex]
-%It may be necessary to enlarge it using this option in cases that fail with `\Lkeyword{error: step size underflow in ODEINT}'.\\[1ex]
+\noindent\OptArg*{silent}\\
+Option \Lkeyword{silent} suppresses the terminal output of stepping information.\\
 
+\noindent\OptArg*{varsteptol=<number>}\\
+The tolerance for automatic calculation of the integration step size can be set with \Lkeyword{varsteptol}. The default value is \Lkeyword{1e-6}. Sometimes, it may be helpful to relax this value in order to cope with situations where integration stops with step size underflow. The occurence of step size underflow is indicated by writing `\Lkeyword{!}' to the terminal and integration stops prematurely before reaching $t_\mathrm{e}$. The current value of $t$ and the current state vector $\mathbf{x}$ are written to the terminal. Step size underflow may happen for stiff ODEs at some point along the integration interval $[t_0, t_\mathrm{e}]$.\\[1ex]
+
 \begin{BDef}
 \Lcs{pstODEsaveState}\Largb{state}
 \end{BDef}
-is a user command to save the last computed state vector into a \PS{} object with global scope. \Larg{state} is an identifier composed of letters and possibly numbers which is used to create the \PS{} object of the same name. The object is executable, that is, it expands to the saved values of the state vector components. It can be used as the initial condition argument $\mathbf{x}_0$ of a later \Lcs{pstODEsolve} invocation, or to restore the state vector by means of \Lcs{pstODEsetOrRestoreState}.\\[1ex] 
+is a user command to save the state of an integration at the end of a \Lcs{pstODEsolve} call. The saved state can be restored later, using \Lcs{pstODErestoreState}\Largb{state}, in order to continue the integration of an ODE. \Larg{state} is an identifier composed of letters and possibly numbers.\\[1ex]
 
 \begin{BDef}
-\Lcs{pstODEsetOrRestoreState}\Largb{state}
+\Lcs{pstODErestoreState}\Largb{state}
 \end{BDef}
-is a user command to set the current state vector from a user provided list of space separated values, or to restore a previously saved state. In the latter case, \Larg{state} is a \PS{} object previously created with \Lcs{pstODEsaveState}. After setting or restoring a state, \Lcs{pstODEsolve} can be called with an empty initial condition argument. Of course, the number of differential equations and the length of the set or restored state vector must match.
+is a user command to restore a previously saved state (\Lcs{pstODEsaveState}\Largb{state}). After restoring a state, \Lcs{pstODEsolve} can be called with an empty initial condition argument in order to continue integration of the ODE. Of course, the number of differential equations of the current and of the saved \Lcs{pstODEsolve} calls must be the same.
 
 \section{Examples}
-\subsection[Lorenz Attractor]{Lorenz Attractor (\textattachfile{lorenz.tex}{lorenz.tex})}
+Complete and compilable example files are located in the \Verb+{TEXMFDIST}/doc/generic/pst-ode/examples+ directory.
+
+\subsection[Lorenz Attractor]{Lorenz Attractor \textattachfile{examples/lorenz.tex}{($\nearrow$lorenz.tex)}}
 The Lorenz Attractor depicted on the title page is governed by
 \begin{align*}
   \frac{\mathrm{d}x}{\mathrm{d}t}& = \alpha (y-x)\\
@@ -187,19 +203,19 @@
 \end{verbatim}
 As the plot is three-dimensional, all three components of the state vectors are stored in the \PS{} variable \Lkeyword{lorenzXYZ} by setting the \Larg{output format} argument to `\Lkeyword{0 1 2}'.
 
-\subsection[Charged particle movement in a vertical electrical field]{Charged particle movement in a vertical electrical field (\textattachfile{particle.tex}{particle.tex})}
+\subsection[Charged particle movement in a vertical electrical field]{Charged particle movement in a vertical electrical field \textattachfile{examples/particle.tex}{($\nearrow$particle.tex)}}
 The trajectory $\mathbf{x}(t)$ of the particle shown below is governed by a set of three second order differential equations:
-\begin{subequations}	
+\begin{subequations}
 \begin{align}
 \ddot{x} &= \omega\dot{y}-\dfrac{\dot{x}}{\tau}\\
 \ddot{y} &= -\omega\dot{x}-\dfrac{\dot{y}}{\tau}\\
 \ddot{z} &= -\dfrac{\dot{z}}{\tau},
 \end{align}
-\end{subequations}	
-where $\omega$ and $\tau$ are constants. An initial value problem of this type needs $3\times2=6$ initial conditions. These are given as the initial position $\mathbf{x}_0=(x_0, y_0, z_0)$ and the initial velocity $\mathbf{\dot{x}}_0=(\dot{x}_0, \dot{y}_0, \dot{z}_0)=(u_0, v_0, w_0) = \mathbf{v}_0$ of the particle.
+\end{subequations}
+where $\omega$ and $\tau$ are constants. An initial value problem of this type needs $3\times2=6$ initial conditions. These are given as the initial position $\mathbf{x}_0=(x_0, y_0, z_0)$ and the initial velocity $\dot{\mathbf{x}}_0=(\dot{x}_0, \dot{y}_0, \dot{z}_0)=(u_0, v_0, w_0) = \mathbf{v}_0$ of the particle.
 
 In order to solve the equations above numerically, they have to be rewritten as a set of six first order differential equations:
-\begin{subequations}	
+\begin{subequations}
 \begin{align}
 \dot{x} &= u\\
 \dot{y} &= v\\
@@ -223,7 +239,7 @@
 \end{verbatim}
 Since we are interested in plotting the particle positions, only the first three components of the state vectors are stored in \Lkeyword{particleXYZ}.
 \begin{center}
-\psset{unit=0.8cm,Alpha=40,Beta=20}
+\psset{unit=0.75cm,Alpha=40,Beta=20}
 \begin{pspicture}(-10,-2)(6,13)
 \newpsstyle{vecteurA}{arrowinset=0.1,arrowsize=0.15,linecolor={[rgb]{0 0.5 1}}}
 \pstVerb{
@@ -271,26 +287,31 @@
 \end{pspicture}
 \end{center}
 
-\subsection[One more first order differential equation]{One more first order differential equation (\textattachfile{ode.tex}{ode.tex})}
-The aim of the last example is to demonstrate that precision does not depend on the number of output steps. We set only five output steps and plot the analytical solution against the numerical one for comparison. In this example, the integration parameter $t$ appears on the right-hand side of the ODE as well as in the output format description, since the solution $y$ shall be plotted against $t$.
+\subsection[One more first order differential equation]{One more first order differential equation \textattachfile{examples/ode.tex}{($\nearrow$ode.tex)}}
+The aim of the last example is to demonstrate that precision does not depend on the number of output points. We set only five output points and plot the analytical solution against the numerical one for comparison.
 
-The equation to be solved here reads
+The ODE to be solved reads
 \begin{equation}
-y'=-2xy.
+  y'=-2y t.\label{eq:ode}
 \end{equation}
-With the initial condition $y(-1)=1/e$ the analytical solution is
+It should be noted that the right-hand side also depends the integration parameter $t$. % as well as in the output format description, since the solution $y$ shall be plotted against $t$.
+With the initial condition
 \begin{equation}
-y(x)=e^{-x^2}.
+  y(-1)=1/e\label{eq:initcond}
 \end{equation}
+the analytical solution of Eq.~\eqref{eq:ode} is
+\begin{equation}
+y(t)=e^{-t^2}.
+\end{equation}
 \begin{verbatim}
 \pstODEsolve[algebraicIC,algebraic]{TY}{(t) 0}{-1}{3}{5}{1/Euler}{-2*t*y[0]}
 \listplot[plotstyle=dots]{TY}
 \end{verbatim}
-The integration parameter must be referred to as `\Lkeyword{t}' when writing the right-hand side of the differential equation, because `\Lkeyword{x[..]}' is already defined as the state vector and can be used instead of `\Lkeyword{y[..]}'. The initial condition is given as an algebraic expression, which requires option \Lkeyword{algebraicIC}; in \PS{} notation it would read `\Lkeyword{1 Euler div}'. The integration parameter and the one available state vector component are stored into the \PS{} object `\Lkeyword{TY}' by setting \Larg{output format} to `\Lkeyword{(t) 0}'.
+Note that in \Lcs{pstODEsolve}, `\Lkeyword{x[..]}' and `\Lkeyword{y[..]}' can be used interchangeably for representing the state vector in algebraic notation. The initial condition~\eqref{eq:initcond} is given as an algebraic expression, which requires option \Lkeyword{algebraicIC}; in \PS{} notation it would read `\Lkeyword{1 Euler div}'. The integration parameter and the one available state vector component are stored into the \PS{} object `\Lkeyword{TY}' by setting \Larg{output format} to `\Lkeyword{(t) 0}'.
 \begin{center}
 \psset{unit=3cm}
 \begin{pspicture}(-0.3,-0.4)(.2,1)%\psgrid
-  \psset{xAxisLabelPos={c,-5ex},yAxisLabelPos={-3ex,c}}
+  \psset{xAxisLabel=$t$,xAxisLabelPos={c,-6ex},yAxisLabelPos={-3ex,c}}
   \begin{psgraph}[axesstyle=frame,Ox=-1,](0,0)(0,0)(4,1){10cm}{2.5cm}
   \rput(1,0){\psplot[algebraic]{-1}{3}{Euler^(-x^2)}}
   \pstODEsolve[algebraicIC,algebraic]{TY}{(t) 0}{-1}{3}{5}{1/Euler}{-2*t*y[0]}
@@ -302,4 +323,10 @@
 
 \section{Acknowledgements}
 I'd like to thank Manuel Luque for the inspiring examples on his site \url{http://pstricks.blogspot.fr}, some of which I used as a basis for this documentation.
+
+\section{License}
+This package can be redistributed and/or modified under the terms
+of the \LaTeX Project Public License Distributed from CTAN archives:
+\url{http://mirrors.ctan.org/tex-archive/macros/latex/base/lppl.txt}
+
 \end{document}

Modified: trunk/Master/texmf-dist/dvips/pst-ode/pst-ode.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/pst-ode/pst-ode.pro	2017-08-17 21:17:10 UTC (rev 45056)
+++ trunk/Master/texmf-dist/dvips/pst-ode/pst-ode.pro	2017-08-17 21:17:38 UTC (rev 45057)
@@ -1,13 +1,13 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % PostScript prologue for pst-ode.tex.
-% Version 0.10, 2017/06/16
+% Version 0.11, 2017/08/15
 %
 % Alexander Grahn (C) 2012--today
 %
 % This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN archives
-% in directory macros/latex/base/lppl.txt.
+% of the LaTeX Project Public License Distributed from CTAN archives:
+% http://mirrors.ctan.org/tex-archive/macros/latex/base/lppl.txt
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 /tx at odeDict 1 dict def
@@ -117,8 +117,7 @@
     %scaling vector for step size adjustment (Numerical Recipies)
     eabsvect k1 eabsvect addvect {1e-30 add} forall xlength array astore
     % => [x(t)] [x(t+ddt) by RKF4] [err] [xscale]
-    /errmax 1e-30 def %maximum rel. error
-    edivvect {abs dup errmax gt {/errmax exch def}{pop} ifelse} forall errmax
+    edivvect eabsvect 1e-30 exch {max} forall %maximum rel. error
     % => [x(t)] [x(t+ddt) by RKF4] errmax
   end
 } bind def
@@ -126,8 +125,7 @@
           % [ state vector x(t) ] ODEINT => [ state vector x(t+dt) ]
   %decrease overshooting step size
   ode at dict
-    tcur ddt add tout sub tcur ddt add tout sub dt add mul 0 gt
-    {/ddt tout tcur sub def} if
+    tout tcur sub dup abs ddt abs lt {/ddt exch def}{pop} ifelse
   end
   RKF45
   ode at tol div dup 1 gt {
@@ -138,7 +136,8 @@
         % error: step size underflow in ODEINT
         (! t=) odeprint tcur odeprint
         % print & remove previous state vector
-        (, x=[ ) odeprint {odeprint ( ) odeprint} forall (]) odeprint
+        (, x=[) odeprint /ode at spc () def
+        {ode at spc odeprint /ode at spc ( ) def odeprint} forall (]) odeprint
         true
       }{
         (-) odeprint
@@ -154,11 +153,15 @@
     ode at dict
       /tcur tcur ddt add def
       dup 0 ne {pgrow exp 5 min sfty mul ddt mul /ddt exch def}{pop} ifelse
-      %output step completed?
-      tcur tout sub dt mul
+      tcur tout sub %output step completed?
     end
     0 ge {
-      (o) odeprint ode at dict /tcur tout def /tout tout dt add def end
+      (o) odeprint
+      ode at dict
+        /tcur tout def
+        /outStepCnt outStepCnt 1 add def
+        /tout tStart dt outStepCnt mul add def
+      end
     }{
       (+) odeprint ODEINT %continue integration
     } ifelse

Modified: trunk/Master/texmf-dist/tex/generic/pst-ode/pst-ode.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pst-ode/pst-ode.tex	2017-08-17 21:17:10 UTC (rev 45056)
+++ trunk/Master/texmf-dist/tex/generic/pst-ode/pst-ode.tex	2017-08-17 21:17:38 UTC (rev 45057)
@@ -4,15 +4,15 @@
 %% Alexander Grahn, (C) 2012--today
 %%
 %% This program can be redistributed and/or modified under the terms
-%% of the LaTeX Project Public License Distributed from CTAN archives
-%% in directory macros/latex/base/lppl.txt.
+%% of the LaTeX Project Public License Distributed from CTAN archives:
+%% http://mirrors.ctan.org/tex-archive/macros/latex/base/lppl.txt
 %%
 %% `pst-ode' defines \pstODEsolve for integrating systems of first order
 %% ODEs using the Runge-Kutta-Fehlberg (RKF45) method with automatic
 %% step size adjustment
 %%
-\def\fileversion{0.10}
-\def\filedate{2017/06/16}
+\def\fileversion{0.11}
+\def\filedate{2017/08/15}
 
 \csname PSTODELoaded\endcsname
 \let\PSTODELoaded\endinput
@@ -60,6 +60,8 @@
 %                  in infix notation
 %   * silent       suppress output of stepping information
 %   * varsteptol   relative tolerance for step size adjustment
+%   * dt0          first tentative integration step size, overrides output step
+%                  size (#4-#3)/(#5-1) used as default value
 %
 % arguments:
 %
@@ -89,6 +91,7 @@
 \define at boolkey[psset]{pst-ode}[PstODE@]{algebraicAll}[true]{}%
 \define at boolkey[psset]{pst-ode}[PstODE@]{silent}[true]{}%
 \define at key[psset]{pst-ode}{varsteptol}{\def\ode at varsteptol{#1}}%
+\define at key[psset]{pst-ode}{dt0}{\def\ode at dtInit{#1}}%
 \def\pstODEsolve{\def\pst at par{}\pst at object{pstODEsolve}}%
 \def\pstODEsolve at i#1#2#3#4#5#6#7{%
   \pst at killglue%
@@ -129,7 +132,7 @@
       tx at Dict begin 1 dict begin #4 end end ode at dict /tEnd   exch def end
     \fi
     ode at dict /dt tEnd tStart sub #5\space 1 sub div def end % output step size
-    \ifx\@empty#6\@empty\else
+    \ifx\@empty\ode at init\@empty\else
       \ifPstODE at algebraicIC
         true setglobal globaldict /ode at laststate [
           tx at Dict begin (\ode at init) AlgParser cvx
@@ -164,11 +167,21 @@
     \else /formatoutput {[#2] assembleresult} def \fi%
     %perform ode integration
     (\string\n pstODEsolve (RKF45),\string\n) odeprint
-    (-/+ failed/successful step; "o" output step; "!" step size underflow (stop):\string\n) odeprint
+    (-/+ failed/successful step, "o" output step, "!" step size underflow (stop):\string\n) odeprint
     ode at dict
       /tcur tStart def % current parameter t value
+      /outStepCnt 1 def % output step counter
       /tout tStart dt add def % next output t
-      /ddt dt def % initial integration step size
+      %initial integration step size `ddt': either same as first output step
+      % size `dt' or last from previous solution (empty initial condition) or
+      % user provided (option `dt0')
+      \ifx\@empty\ode at init\@empty
+        \ode at dtInit\space 0 eq
+          {/ddt ode at ddt def}{/ddt \ode at dtInit\space def} ifelse
+      \else
+        \ode at dtInit\space 0 eq
+          {/ddt dt def}{/ddt \ode at dtInit\space def} ifelse
+      \fi
     end
     \ifPstODE at append\else
       [
@@ -191,6 +204,10 @@
         true setglobal
       ]
       globaldict exch /#1 exch cvx put
+      globaldict /ode at dt ode at dict dt end put
+      globaldict /ode at ddt ode at dict ddt end put
+      globaldict /ode at tcur ode at dict tcur end put
+      globaldict /ode at tout ode at dict tout end put
       false setglobal
     } repeat (\string\n) odeprint
     \ifPstODE at saveData statefile closefile \fi
@@ -205,27 +222,34 @@
   \ifx\@empty#2\@empty\else\ode at zapspace#2\@nil\fi%
 }
 
-%macro for saving last state vector into PS object
+%macro for saving last state
 \def\pstODEsaveState#1{% #1: identifier
   \pstVerb{
     true setglobal
-    globaldict /#1 [ode at laststate cvx exec] cvx put
+    globaldict /#1 at ode@laststate [ode at laststate cvx exec] cvx put
+    globaldict /#1 at ode@dt   ode at dt   put
+    globaldict /#1 at ode@ddt  ode at ddt  put
+    globaldict /#1 at ode@tcur ode at tcur put
+    globaldict /#1 at ode@tout ode at tout put
     false setglobal
   }%
 }
 
-%macro for restoring state vector from PS object or setting it from
-%literal vector
-\def\pstODEsetOrRestoreState#1{% #1: identifier or
-  \pstVerb{                  %       space separated list of numbers
+%macro for restoring state
+\def\pstODERestoreState#1{% #1: identifier
+  \pstVerb{
     true setglobal
-    globaldict /ode at laststate [#1] put
+    globaldict /ode at laststate [#1 at ode@laststate] put
+    globaldict /ode at dt   #1 at ode@dt   put
+    globaldict /ode at ddt  #1 at ode@ddt  put
+    globaldict /ode at tcur #1 at ode@tcur put
+    globaldict /ode at tout #1 at ode@tout put
     false setglobal
   }%
 }
 
 \psset[pst-ode]{append=false,saveData=false,algebraicIC=false,algebraicT=false,
-  silent=false,varsteptol=1e-6,algebraicOutputFormat=false,algebraicAll=false
+  silent=false,varsteptol=1e-6,algebraicOutputFormat=false,algebraicAll=false,dt0=0
 }
 \psset{algebraic=false}
 \catcode`\@=\PstAtCode\relax



More information about the tex-live-commits mailing list