High-level overview of CVODE stepping
In attempting to take a successful integration step, CVODE performs the following operations (function CVStep in cvode.c)
- 1. Predict solution at the next step using the current step size
- 2. Solve the nonlinear system to find the correction (this is where the LMM is actually used)
- 3. Test convergence of the NLS
- 3.1. If the NLS was successful, proceed to error test (goto 4)
- 3.2. Otherwise
- 3.2.1. Undo the prediction
- 3.2.2. If an unrecoverable error occurred (in the linear solver for Newton, or if too many repeated failures occurred), stop
- 3.2.3. If a recoverable failure occurred in the NLS, reduce the step size and reattempt the step (goto 1)
- 4. Perform error test
- 4.1. Test $C ||correction||_{WRMS} \le 1$ where $correction$ is the cumulative correction in step 2 and $C$ is a known constant for the given LMM. This is equivalent to $||LTE||_{WRMS} \le 1$
- 4.2. If the test is satisfied, proceed to completing the step (goto 5)
- 4.3. Otherwise
-
- 4.3.1. If too many repeated error test failures ($maxnef$) occurred, stop
- 4.3.2. If a given number of repeated failures ($mxnef1 < maxnef$) occurred, force an order reduction.
- 4.3.3. Reduce the step size, undo the prediction, and reattempt the step (goto 1)
-
- 5. Complete the step (apply correction to the Nordsieck history array, update counters, record some saved values, etc)
- 6. Prepare next step
- 6.1. Estimate what the step size for the next step should be at the current method order ($q$)
- 6.2. Consider an order change by testing if a method of order $q-1$ or $q+1$ would permit a significantly enough larger step size on the next step.
- 6.3. Set the method order and step size to be used on the next step
page revision: 10, last edited: 11 Apr 2007 21:28