dvode_data_t Derived Type

type, public :: dvode_data_t

Internal variables for DVODE. variables which are communicated between subroutines in the dvode package, or which are to be saved between calls to dvode.


Inherited by

type~~dvode_data_t~~InheritedByGraph type~dvode_data_t dvode_data_t type~dvode_t dvode_t type~dvode_t->type~dvode_data_t dat

Components

Type Visibility Attributes Name Initial
real(kind=wp), private :: acnrm = zero

weighted r.m.s. norm of accumulated correction vectors.

real(kind=wp), private :: ccmxj = zero

threshhold on drc for updating the jacobian. (see drc.)

real(kind=wp), private :: conp = zero

the saved value of tq(5).

real(kind=wp), private :: crate = zero

estimated corrector convergence rate constant.

real(kind=wp), private :: drc = zero

relative change in h*rl1 since last dvjac call.

real(kind=wp), private :: el(13) = zero

real array of integration coefficients. see dvset.

real(kind=wp), private :: eta = zero

saved tentative ratio of new to old h.

real(kind=wp), private :: etamax = zero

saved maximum value of eta to be allowed.

real(kind=wp), private :: h = zero

the step size.

real(kind=wp), private :: hmin = zero

the minimum absolute value of the step size h to be used.

real(kind=wp), private :: hmxi = zero

inverse of the maximum absolute value of h to be used. hmxi = 0.0 is allowed and corresponds to an infinite hmax.

real(kind=wp), private :: hnew = zero

the step size to be attempted on the next step.

real(kind=wp), private :: hscal = zero

step size h used in scaling of nordsieck array yh in dvjust. (if iord = +1, dvjust assumes that hscal = tau(1).) see references 1 and 2 for details.

real(kind=wp), private :: prl1 = zero

the saved value of rl1.

real(kind=wp), private :: rc = zero

ratio of current h*rl1 to value on last dvjac call.

real(kind=wp), private :: rl1 = zero

the reciprocal of the coefficient el(1).

real(kind=wp), private :: tau(13) = zero

real vector of past nq step sizes, length 13.

real(kind=wp), private :: tq(5) = zero

a real vector of length 5 in which dvset stores constants used for the convergence test, the error test, and the selection of h at a new order.

real(kind=wp), private :: tn = zero

the independent variable, updated on each step taken.

real(kind=wp), private :: uround = zero

the machine unit roundoff. the smallest positive real number such that 1.0 + uround /= 1.0

integer, private :: icf = 0

integer flag for convergence failure in dvnlsd:

  • 0 means no failures.
  • 1 means convergence failure with out of date jacobian (recoverable error).
  • 2 means convergence failure with current jacobian or singular matrix (unrecoverable error).
integer, private :: init = 0

saved integer flag indicating whether initialization of the problem has been done (init = 1) or not.

integer, private :: ipup = 0

saved flag to signal updating of newton matrix.

In dvnlsd: own variable flag with values and meanings as follows:

  • 0, do not update the newton matrix.
  • miter /= 0, update newton matrix, because it is the initial step, order was changed, the error test failed, or an update is indicated by the scalar rc or step counter nst.
integer, private :: jcur = 0

output flag from dvjac showing jacobian status:

  • jcur = 0 means j is not current.
  • jcur = 1 means j is current.
integer, private :: jstart = 0

integer flag used as input to dvstep:

  • 0 means perform the first step.
  • 1 means take a new step continuing from the last.
  • -1 means take the next step with a new value of maxord, hmin, hmxi, n, meth, miter, and/or matrix parameters.

on return, dvstep sets jstart = 1.

integer, private :: jsv = 0

integer flag for jacobian saving, = sign(mf).

integer, private :: kflag = 0

a completion code from dvstep with the following meanings:

  • 0 the step was succesful.
  • -1 the requested error could not be achieved.
  • -2 corrector convergence could not be achieved.
  • -3, -4 fatal error in vnls (can not occur here).
integer, private :: kuth = 0

input flag to dvstep showing whether h was reduced by the driver. kuth = 1 if h was reduced, = 0 otherwise.

integer, private :: l = 0

integer variable, nq + 1, current order plus one.

integer, private :: lmax = 0

maxord + 1 (used for dimensioning).

integer, private :: lyh = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: lewt = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: lacor = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: lsavf = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: lwm = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: liwm = 0

saved integer pointers to segments of rwork and iwork.

integer, private :: locjs = 0

a pointer to the saved jacobian, whose storage starts at wm(locjs), if jsv = 1.

integer, private :: maxord = 0

the maximum order of integration method to be allowed.

integer, private :: meth = 0

the method flags. see mf.

integer, private :: miter = 0

the method flags. see mf.

integer, private :: msbj = 0

the maximum number of steps between j evaluations, = 50.

integer, private :: mxhnil = 0

saved value of optional input mxhnil.

integer, private :: mxstep = 0

saved value of optional input mxstep.

integer, private :: n = 0

the number of first-order odes, = neq.

integer, private :: newh = 0

saved integer to flag change of h.

integer, private :: newq = 0

the method order to be used on the next step.

integer, private :: nhnil = 0

saved counter for occurrences of t + h = t.

integer, private :: nq = 0

integer variable, the current integration method order.

integer, private :: nqnyh = 0

saved value of nq*nyh.

integer, private :: nqwait = 0

a counter controlling the frequency of order changes. an order change is about to be considered if nqwait = 1.

integer, private :: nslj = 0

the number of steps taken as of the last jacobian update.

integer, private :: nslp = 0

saved value of nst as of last newton matrix update.

integer, private :: nyh = 0

saved value of the initial value of neq.

real(kind=wp), private :: hu = zero

the step size in t last used.

integer, private :: ncfn = 0

number of nonlinear convergence failures so far.

integer, private :: netf = 0

the number of error test failures of the integrator so far.

integer, private :: nfe = 0

the number of f evaluations for the problem so far.

integer, private :: nje = 0

the number of jacobian evaluations so far.

integer, private :: nlu = 0

the number of matrix lu decompositions so far.

integer, private :: nni = 0

number of nonlinear iterations so far.

integer, private :: nqu = 0

the method order last used.

integer, private :: nst = 0

the number of steps taken for the problem so far.


Source Code

   type,public :: dvode_data_t

      !! Internal variables for DVODE.
      !! variables which are communicated between subroutines in the
      !! dvode package, or which are to be saved between calls to dvode.

      private

      ! type declarations formerly in common block dvod01
      real(wp) :: acnrm   = zero !! weighted r.m.s. norm of accumulated correction vectors.
      real(wp) :: ccmxj   = zero !! threshhold on drc for updating the jacobian. (see drc.)
      real(wp) :: conp    = zero !! the saved value of tq(5).
      real(wp) :: crate   = zero !! estimated corrector convergence rate constant.
      real(wp) :: drc     = zero !! relative change in h*rl1 since last dvjac call.
      real(wp) :: el(13)  = zero !! real array of integration coefficients.  see dvset.
      real(wp) :: eta     = zero !! saved tentative ratio of new to old h.
      real(wp) :: etamax  = zero !! saved maximum value of eta to be allowed.
      real(wp) :: h       = zero !! the step size.
      real(wp) :: hmin    = zero !! the minimum absolute value of the step size h to be used.
      real(wp) :: hmxi    = zero !! inverse of the maximum absolute value of h to be used.
                                 !! hmxi = 0.0 is allowed and corresponds to an infinite hmax.
      real(wp) :: hnew    = zero !! the step size to be attempted on the next step.
      real(wp) :: hscal   = zero !! step size `h` used in scaling of nordsieck array `yh` in [[dvjust]].
                                 !! (if `iord = +1`, [[dvjust]] assumes that `hscal = tau(1)`.)
                                 !! see references 1 and 2 for details.
      real(wp) :: prl1    = zero !! the saved value of rl1.
      real(wp) :: rc      = zero !! ratio of current h*rl1 to value on last dvjac call.
      real(wp) :: rl1     = zero !! the reciprocal of the coefficient el(1).
      real(wp) :: tau(13) = zero !! real vector of past nq step sizes, length 13.
      real(wp) :: tq(5)   = zero !! a real vector of length 5 in which dvset stores constants
                                 !! used for the convergence test, the error test, and the
                                 !! selection of h at a new order.
      real(wp) :: tn      = zero !! the independent variable, updated on each step taken.
      real(wp) :: uround  = zero !! the machine unit roundoff.  the smallest positive real number
                                 !! such that  1.0 + uround /= 1.0
      integer :: icf      = 0 !! integer flag for convergence failure in dvnlsd:
                              !!
                              !!  * 0 means no failures.
                              !!  * 1 means convergence failure with out of date jacobian
                              !!    (recoverable error).
                              !!  * 2 means convergence failure with current jacobian or
                              !!    singular matrix (unrecoverable error).
      integer :: init     = 0 !! saved integer flag indicating whether initialization of the
                              !! problem has been done (init = 1) or not.
      integer :: ipup     = 0 !! saved flag to signal updating of newton matrix.
                              !!
                              !! In [[dvnlsd]]: own variable flag with values and meanings as follows:
                              !!
                              !!  * 0, do not update the newton matrix.
                              !!  * `miter /= 0`, update newton matrix, because it is the
                              !!    initial step, order was changed, the error
                              !!    test failed, or an update is indicated by
                              !!    the scalar `rc` or step counter `nst`.
      integer :: jcur     = 0 !! output flag from [[dvjac]] showing jacobian status:
                              !!
                              !!  * jcur = 0 means j is not current.
                              !!  * jcur = 1 means j is current.
      integer :: jstart   = 0 !! integer flag used as input to dvstep:
                              !!
                              !!  * 0  means perform the first step.
                              !!  * 1  means take a new step continuing from the last.
                              !!  * -1 means take the next step with a new value of maxord,
                              !!    hmin, hmxi, n, meth, miter, and/or matrix parameters.
                              !!
                              !! on return, dvstep sets jstart = 1.
      integer :: jsv      = 0 !! integer flag for jacobian saving, = sign(mf).
      integer :: kflag    = 0 !! a completion code from dvstep with the following meanings:
                              !!
                              !!  *  0      the step was succesful.
                              !!  * -1      the requested error could not be achieved.
                              !!  * -2      corrector convergence could not be achieved.
                              !!  * -3, -4  fatal error in vnls (can not occur here).
      integer :: kuth     = 0 !! input flag to dvstep showing whether h was reduced by the
                              !! driver.  kuth = 1 if h was reduced, = 0 otherwise.
      integer :: l        = 0 !! integer variable, nq + 1, current order plus one.
      integer :: lmax     = 0 !! maxord + 1 (used for dimensioning).
      integer :: lyh      = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: lewt     = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: lacor    = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: lsavf    = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: lwm      = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: liwm     = 0 !! saved integer pointers to segments of rwork and iwork.
      integer :: locjs    = 0 !! a pointer to the saved jacobian, whose storage starts at
                              !! wm(locjs), if jsv = 1.
      integer :: maxord   = 0 !! the maximum order of integration method to be allowed.
      integer :: meth     = 0 !! the method flags.  see mf.
      integer :: miter    = 0 !! the method flags.  see mf.
      integer :: msbj     = 0 !! the maximum number of steps between j evaluations, = 50.
      integer :: mxhnil   = 0 !! saved value of optional input mxhnil.
      integer :: mxstep   = 0 !! saved value of optional input mxstep.
      integer :: n        = 0 !! the number of first-order odes, = neq.
      integer :: newh     = 0 !! saved integer to flag change of h.
      integer :: newq     = 0 !! the method order to be used on the next step.
      integer :: nhnil    = 0 !! saved counter for occurrences of t + h = t.
      integer :: nq       = 0 !! integer variable, the current integration method order.
      integer :: nqnyh    = 0 !! saved value of nq*nyh.
      integer :: nqwait   = 0 !! a counter controlling the frequency of order changes.
                              !! an order change is about to be considered if nqwait = 1.
      integer :: nslj     = 0 !! the number of steps taken as of the last jacobian update.
      integer :: nslp     = 0 !! saved value of nst as of last newton matrix update.
      integer :: nyh      = 0 !! saved value of the initial value of neq.

      ! type declarations formerly in common block dvod02
      real(wp) :: hu  = zero !! the step size in t last used.
      integer :: ncfn = 0 !! number of nonlinear convergence failures so far.
      integer :: netf = 0 !! the number of error test failures of the integrator so far.
      integer :: nfe  = 0 !! the number of f evaluations for the problem so far.
      integer :: nje  = 0 !! the number of jacobian evaluations so far.
      integer :: nlu  = 0 !! the number of matrix lu decompositions so far.
      integer :: nni  = 0 !! number of nonlinear iterations so far.
      integer :: nqu  = 0 !! the method order last used.
      integer :: nst  = 0 !! the number of steps taken for the problem so far.

   end type  dvode_data_t