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
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.