dop853_module Module

Modern Fortran Edition of the DOP853 ODE Solver.

See also

History

  • Jacob Williams : December 2015 : Created module from the DOP853 Fortran 77 code.
  • Development continues at GitHub.


Uses

  • module~~dop853_module~~UsesGraph module~dop853_module dop853_module iso_fortran_env iso_fortran_env module~dop853_module->iso_fortran_env

Contents


Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: dop853_wp = real64

real kind used by this module [8 bytes]

integer, private, parameter :: wp = dop853_wp

local copy of dop853_wp with a shorter name

real(kind=wp), private, parameter :: uround = epsilon(1.0_wp)

machine

real(kind=wp), private, parameter :: c2 = 0.526001519587677318785587544488e-01_wp
real(kind=wp), private, parameter :: c3 = 0.789002279381515978178381316732e-01_wp
real(kind=wp), private, parameter :: c4 = 0.118350341907227396726757197510_wp
real(kind=wp), private, parameter :: c5 = 0.281649658092772603273242802490_wp
real(kind=wp), private, parameter :: c6 = 0.333333333333333333333333333333_wp
real(kind=wp), private, parameter :: c7 = 0.25_wp
real(kind=wp), private, parameter :: c8 = 0.307692307692307692307692307692_wp
real(kind=wp), private, parameter :: c9 = 0.651282051282051282051282051282_wp
real(kind=wp), private, parameter :: c10 = 0.6_wp
real(kind=wp), private, parameter :: c11 = 0.857142857142857142857142857142_wp
real(kind=wp), private, parameter :: c14 = 0.1_wp
real(kind=wp), private, parameter :: c15 = 0.2_wp
real(kind=wp), private, parameter :: c16 = 0.777777777777777777777777777778_wp
real(kind=wp), private, parameter :: b1 = 5.42937341165687622380535766363e-2_wp
real(kind=wp), private, parameter :: b6 = 4.45031289275240888144113950566_wp
real(kind=wp), private, parameter :: b7 = 1.89151789931450038304281599044_wp
real(kind=wp), private, parameter :: b8 = -5.8012039600105847814672114227_wp
real(kind=wp), private, parameter :: b9 = 3.1116436695781989440891606237e-1_wp
real(kind=wp), private, parameter :: b10 = -1.52160949662516078556178806805e-1_wp
real(kind=wp), private, parameter :: b11 = 2.01365400804030348374776537501e-1_wp
real(kind=wp), private, parameter :: b12 = 4.47106157277725905176885569043e-2_wp
real(kind=wp), private, parameter :: bhh1 = 0.244094488188976377952755905512_wp
real(kind=wp), private, parameter :: bhh2 = 0.733846688281611857341361741547_wp
real(kind=wp), private, parameter :: bhh3 = 0.220588235294117647058823529412e-1_wp
real(kind=wp), private, parameter :: er1 = 0.1312004499419488073250102996e-01_wp
real(kind=wp), private, parameter :: er6 = -0.1225156446376204440720569753e+01_wp
real(kind=wp), private, parameter :: er7 = -0.4957589496572501915214079952_wp
real(kind=wp), private, parameter :: er8 = 0.1664377182454986536961530415e+01_wp
real(kind=wp), private, parameter :: er9 = -0.3503288487499736816886487290_wp
real(kind=wp), private, parameter :: er10 = 0.3341791187130174790297318841_wp
real(kind=wp), private, parameter :: er11 = 0.8192320648511571246570742613e-01_wp
real(kind=wp), private, parameter :: er12 = -0.2235530786388629525884427845e-01_wp
real(kind=wp), private, parameter :: a21 = 5.26001519587677318785587544488e-2_wp
real(kind=wp), private, parameter :: a31 = 1.97250569845378994544595329183e-2_wp
real(kind=wp), private, parameter :: a32 = 5.91751709536136983633785987549e-2_wp
real(kind=wp), private, parameter :: a41 = 2.95875854768068491816892993775e-2_wp
real(kind=wp), private, parameter :: a43 = 8.87627564304205475450678981324e-2_wp
real(kind=wp), private, parameter :: a51 = 2.41365134159266685502369798665e-1_wp
real(kind=wp), private, parameter :: a53 = -8.84549479328286085344864962717e-1_wp
real(kind=wp), private, parameter :: a54 = 9.24834003261792003115737966543e-1_wp
real(kind=wp), private, parameter :: a61 = 3.7037037037037037037037037037e-2_wp
real(kind=wp), private, parameter :: a64 = 1.70828608729473871279604482173e-1_wp
real(kind=wp), private, parameter :: a65 = 1.25467687566822425016691814123e-1_wp
real(kind=wp), private, parameter :: a71 = 3.7109375e-2_wp
real(kind=wp), private, parameter :: a74 = 1.70252211019544039314978060272e-1_wp
real(kind=wp), private, parameter :: a75 = 6.02165389804559606850219397283e-2_wp
real(kind=wp), private, parameter :: a76 = -1.7578125e-2_wp
real(kind=wp), private, parameter :: a81 = 3.70920001185047927108779319836e-2_wp
real(kind=wp), private, parameter :: a84 = 1.70383925712239993810214054705e-1_wp
real(kind=wp), private, parameter :: a85 = 1.07262030446373284651809199168e-1_wp
real(kind=wp), private, parameter :: a86 = -1.53194377486244017527936158236e-2_wp
real(kind=wp), private, parameter :: a87 = 8.27378916381402288758473766002e-3_wp
real(kind=wp), private, parameter :: a91 = 6.24110958716075717114429577812e-1_wp
real(kind=wp), private, parameter :: a94 = -3.36089262944694129406857109825_wp
real(kind=wp), private, parameter :: a95 = -8.68219346841726006818189891453e-1_wp
real(kind=wp), private, parameter :: a96 = 2.75920996994467083049415600797e+1_wp
real(kind=wp), private, parameter :: a97 = 2.01540675504778934086186788979e+1_wp
real(kind=wp), private, parameter :: a98 = -4.34898841810699588477366255144e+1_wp
real(kind=wp), private, parameter :: a101 = 4.77662536438264365890433908527e-1_wp
real(kind=wp), private, parameter :: a104 = -2.48811461997166764192642586468_wp
real(kind=wp), private, parameter :: a105 = -5.90290826836842996371446475743e-1_wp
real(kind=wp), private, parameter :: a106 = 2.12300514481811942347288949897e+1_wp
real(kind=wp), private, parameter :: a107 = 1.52792336328824235832596922938e+1_wp
real(kind=wp), private, parameter :: a108 = -3.32882109689848629194453265587e+1_wp
real(kind=wp), private, parameter :: a109 = -2.03312017085086261358222928593e-2_wp
real(kind=wp), private, parameter :: a111 = -9.3714243008598732571704021658e-1_wp
real(kind=wp), private, parameter :: a114 = 5.18637242884406370830023853209_wp
real(kind=wp), private, parameter :: a115 = 1.09143734899672957818500254654_wp
real(kind=wp), private, parameter :: a116 = -8.14978701074692612513997267357_wp
real(kind=wp), private, parameter :: a117 = -1.85200656599969598641566180701e+1_wp
real(kind=wp), private, parameter :: a118 = 2.27394870993505042818970056734e+1_wp
real(kind=wp), private, parameter :: a119 = 2.49360555267965238987089396762_wp
real(kind=wp), private, parameter :: a1110 = -3.0467644718982195003823669022_wp
real(kind=wp), private, parameter :: a121 = 2.27331014751653820792359768449_wp
real(kind=wp), private, parameter :: a124 = -1.05344954667372501984066689879e+1_wp
real(kind=wp), private, parameter :: a125 = -2.00087205822486249909675718444_wp
real(kind=wp), private, parameter :: a126 = -1.79589318631187989172765950534e+1_wp
real(kind=wp), private, parameter :: a127 = 2.79488845294199600508499808837e+1_wp
real(kind=wp), private, parameter :: a128 = -2.85899827713502369474065508674_wp
real(kind=wp), private, parameter :: a129 = -8.87285693353062954433549289258_wp
real(kind=wp), private, parameter :: a1210 = 1.23605671757943030647266201528e+1_wp
real(kind=wp), private, parameter :: a1211 = 6.43392746015763530355970484046e-1_wp
real(kind=wp), private, parameter :: a141 = 5.61675022830479523392909219681e-2_wp
real(kind=wp), private, parameter :: a147 = 2.53500210216624811088794765333e-1_wp
real(kind=wp), private, parameter :: a148 = -2.46239037470802489917441475441e-1_wp
real(kind=wp), private, parameter :: a149 = -1.24191423263816360469010140626e-1_wp
real(kind=wp), private, parameter :: a1410 = 1.5329179827876569731206322685e-1_wp
real(kind=wp), private, parameter :: a1411 = 8.20105229563468988491666602057e-3_wp
real(kind=wp), private, parameter :: a1412 = 7.56789766054569976138603589584e-3_wp
real(kind=wp), private, parameter :: a1413 = -8.298e-3_wp
real(kind=wp), private, parameter :: a151 = 3.18346481635021405060768473261e-2_wp
real(kind=wp), private, parameter :: a156 = 2.83009096723667755288322961402e-2_wp
real(kind=wp), private, parameter :: a157 = 5.35419883074385676223797384372e-2_wp
real(kind=wp), private, parameter :: a158 = -5.49237485713909884646569340306e-2_wp
real(kind=wp), private, parameter :: a1511 = -1.08347328697249322858509316994e-4_wp
real(kind=wp), private, parameter :: a1512 = 3.82571090835658412954920192323e-4_wp
real(kind=wp), private, parameter :: a1513 = -3.40465008687404560802977114492e-4_wp
real(kind=wp), private, parameter :: a1514 = 1.41312443674632500278074618366e-1_wp
real(kind=wp), private, parameter :: a161 = -4.28896301583791923408573538692e-1_wp
real(kind=wp), private, parameter :: a166 = -4.69762141536116384314449447206_wp
real(kind=wp), private, parameter :: a167 = 7.68342119606259904184240953878_wp
real(kind=wp), private, parameter :: a168 = 4.06898981839711007970213554331_wp
real(kind=wp), private, parameter :: a169 = 3.56727187455281109270669543021e-1_wp
real(kind=wp), private, parameter :: a1613 = -1.39902416515901462129418009734e-3_wp
real(kind=wp), private, parameter :: a1614 = 2.9475147891527723389556272149_wp
real(kind=wp), private, parameter :: a1615 = -9.15095847217987001081870187138_wp
real(kind=wp), private, parameter :: d41 = -0.84289382761090128651353491142e+01_wp
real(kind=wp), private, parameter :: d46 = 0.56671495351937776962531783590_wp
real(kind=wp), private, parameter :: d47 = -0.30689499459498916912797304727e+01_wp
real(kind=wp), private, parameter :: d48 = 0.23846676565120698287728149680e+01_wp
real(kind=wp), private, parameter :: d49 = 0.21170345824450282767155149946e+01_wp
real(kind=wp), private, parameter :: d410 = -0.87139158377797299206789907490_wp
real(kind=wp), private, parameter :: d411 = 0.22404374302607882758541771650e+01_wp
real(kind=wp), private, parameter :: d412 = 0.63157877876946881815570249290_wp
real(kind=wp), private, parameter :: d413 = -0.88990336451333310820698117400e-01_wp
real(kind=wp), private, parameter :: d414 = 0.18148505520854727256656404962e+02_wp
real(kind=wp), private, parameter :: d415 = -0.91946323924783554000451984436e+01_wp
real(kind=wp), private, parameter :: d416 = -0.44360363875948939664310572000e+01_wp
real(kind=wp), private, parameter :: d51 = 0.10427508642579134603413151009e+02_wp
real(kind=wp), private, parameter :: d56 = 0.24228349177525818288430175319e+03_wp
real(kind=wp), private, parameter :: d57 = 0.16520045171727028198505394887e+03_wp
real(kind=wp), private, parameter :: d58 = -0.37454675472269020279518312152e+03_wp
real(kind=wp), private, parameter :: d59 = -0.22113666853125306036270938578e+02_wp
real(kind=wp), private, parameter :: d510 = 0.77334326684722638389603898808e+01_wp
real(kind=wp), private, parameter :: d511 = -0.30674084731089398182061213626e+02_wp
real(kind=wp), private, parameter :: d512 = -0.93321305264302278729567221706e+01_wp
real(kind=wp), private, parameter :: d513 = 0.15697238121770843886131091075e+02_wp
real(kind=wp), private, parameter :: d514 = -0.31139403219565177677282850411e+02_wp
real(kind=wp), private, parameter :: d515 = -0.93529243588444783865713862664e+01_wp
real(kind=wp), private, parameter :: d516 = 0.35816841486394083752465898540e+02_wp
real(kind=wp), private, parameter :: d61 = 0.19985053242002433820987653617e+02_wp
real(kind=wp), private, parameter :: d66 = -0.38703730874935176555105901742e+03_wp
real(kind=wp), private, parameter :: d67 = -0.18917813819516756882830838328e+03_wp
real(kind=wp), private, parameter :: d68 = 0.52780815920542364900561016686e+03_wp
real(kind=wp), private, parameter :: d69 = -0.11573902539959630126141871134e+02_wp
real(kind=wp), private, parameter :: d610 = 0.68812326946963000169666922661e+01_wp
real(kind=wp), private, parameter :: d611 = -0.10006050966910838403183860980e+01_wp
real(kind=wp), private, parameter :: d612 = 0.77771377980534432092869265740_wp
real(kind=wp), private, parameter :: d613 = -0.27782057523535084065932004339e+01_wp
real(kind=wp), private, parameter :: d614 = -0.60196695231264120758267380846e+02_wp
real(kind=wp), private, parameter :: d615 = 0.84320405506677161018159903784e+02_wp
real(kind=wp), private, parameter :: d616 = 0.11992291136182789328035130030e+02_wp
real(kind=wp), private, parameter :: d71 = -0.25693933462703749003312586129e+02_wp
real(kind=wp), private, parameter :: d76 = -0.15418974869023643374053993627e+03_wp
real(kind=wp), private, parameter :: d77 = -0.23152937917604549567536039109e+03_wp
real(kind=wp), private, parameter :: d78 = 0.35763911791061412378285349910e+03_wp
real(kind=wp), private, parameter :: d79 = 0.93405324183624310003907691704e+02_wp
real(kind=wp), private, parameter :: d710 = -0.37458323136451633156875139351e+02_wp
real(kind=wp), private, parameter :: d711 = 0.10409964950896230045147246184e+03_wp
real(kind=wp), private, parameter :: d712 = 0.29840293426660503123344363579e+02_wp
real(kind=wp), private, parameter :: d713 = -0.43533456590011143754432175058e+02_wp
real(kind=wp), private, parameter :: d714 = 0.96324553959188282948394950600e+02_wp
real(kind=wp), private, parameter :: d715 = -0.39177261675615439165231486172e+02_wp
real(kind=wp), private, parameter :: d716 = -0.14972683625798562581422125276e+03_wp

Abstract Interfaces

abstract interface

  • private subroutine deriv_func(me, x, y, f)

    subroutine computing the value of

    Arguments

    Type IntentOptional Attributes Name
    class(dop853_class), intent(inout) :: me
    real(kind=wp), intent(in) :: x

    independent variable

    real(kind=wp), intent(in), dimension(:) :: y

    state vector [size n]

    real(kind=wp), intent(out), dimension(:) :: f

    derivative vector [size n]

abstract interface

  • private subroutine solout_func(me, nr, xold, x, y, irtrn, xout)

    solout furnishes the solution y at the nr-th grid-point x (thereby the initial value is the first grid-point).

    Arguments

    Type IntentOptional Attributes Name
    class(dop853_class), intent(inout) :: me
    integer, intent(in) :: nr

    grid point (0,1,...)

    real(kind=wp), intent(in) :: xold

    the preceding grid point

    real(kind=wp), intent(in) :: x

    current grid point

    real(kind=wp), intent(in), dimension(:) :: y

    state vector [size n]

    integer, intent(inout) :: irtrn

    serves to interrupt the integration. if irtrn is set <0, dop853 will return to the calling program. if the numerical solution is altered in solout, set irtrn = 2.

    real(kind=wp), intent(out) :: xout

    xout can be used for efficient intermediate output if one puts iout=3. when nr=1 define the first output point xout in solout. the subroutine solout will be called only when xout is in the interval [xold,x]; during this call a new value for xout can be defined, etc.


Derived Types

type, public ::  dop853_class

Components

Type Visibility Attributes Name Initial
integer, private :: n = 0

the dimension of the system

integer, private :: nfcn = 0

number of function evaluations

integer, private :: nstep = 0

number of computed steps

integer, private :: naccpt = 0

number of accepted steps

integer, private :: nrejct = 0

number of rejected steps (due to error test), (step rejections in the first step are not counted)

integer, private :: nrdens = 0

number of components, for which dense output is required. for 0 < nrdens < n the components (for which dense output is required) have to be specified in icomp(1),...,icomp(nrdens).

real(kind=wp), private :: h = 0.0_wp

predicted step size of the last accepted step

integer, private :: iprint = output_unit

switch for printing error messages if iprint==0 no messages are being printed if iprint/=0 messages are printed with write (iprint,*) ...

integer, private :: nmax = 100000

the maximal number of allowed steps.

integer, private :: nstiff = 1000

test for stiffness is activated after step number j*nstiff (j integer), provided nstiff>0. for negative nstiff the stiffness test is never activated.

real(kind=wp), private :: hinitial = 0.0_wp

initial step size, for hinitial=0 an initial guess is computed with help of the function hinit.

real(kind=wp), private :: hmax = 0.0_wp

maximal step size, defaults to xend-x if hmax=0.

real(kind=wp), private :: safe = 0.9_wp

safety factor in step size prediction

real(kind=wp), private :: fac1 = 0.333_wp

parameter for step size selection. the new step size is chosen subject to the restriction fac1 <= hnew/hold <= fac2

real(kind=wp), private :: fac2 = 6.0_wp

parameter for step size selection. the new step size is chosen subject to the restriction fac1 <= hnew/hold <= fac2

real(kind=wp), private :: beta = 0.0_wp

is the beta for stabilized step size control (see section iv.2). positive values of beta ( <= 0.04 ) make the step size control more stable.

integer, private, dimension(:), allocatable :: icomp

dimension(nrdens) the components for which dense output is required

real(kind=wp), private, dimension(:), allocatable :: cont

dimension(8*nrdens)

integer, private :: iout = 0

copy of iout input to dop853

real(kind=wp), private :: xold = 0.0_wp
real(kind=wp), private :: hout = 0.0_wp
procedure(deriv_func), private, pointer :: fcn => null()

subroutine computing the value of f(x,y)

procedure(solout_func), private, pointer :: solout => null()

subroutine providing the numerical solution during integration. if iout>=1, it is called during integration.

Type-Bound Procedures

procedure , public :: initialize => set_parameters Subroutine

initialization routine.

procedure , public :: integrate => dop853 Subroutine

main integration routine.

procedure , public :: destroy => destroy_dop853 Subroutine

destructor.

procedure , public :: info => get_dop853_info Subroutine

to get info after a run.

procedure , private :: dp86co Subroutine
procedure , private :: hinit Function
procedure , public :: contd8 Function

can be called in user's solout_func for dense output.


Functions

private function hinit(me, x, y, posneg, f0, iord, hmax, atol, rtol, itol)

computation of an initial step size guess

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(inout) :: me
real(kind=wp), intent(in) :: x
real(kind=wp), intent(in), dimension(:) :: y

dimension(n)

real(kind=wp), intent(in) :: posneg
real(kind=wp), intent(in), dimension(:) :: f0

dimension(n)

integer, intent(in) :: iord
real(kind=wp), intent(in) :: hmax
real(kind=wp), intent(in), dimension(:) :: atol
real(kind=wp), intent(in), dimension(:) :: rtol
integer, intent(in) :: itol

Return Value real(kind=wp)

private function contd8(me, ii, x) result(y)

this function can be used for continuous output in connection with the output-subroutine for dop853. it provides an approximation to the ii-th component of the solution at x.

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(in) :: me
integer, intent(in) :: ii
real(kind=wp), intent(in) :: x

Return Value real(kind=wp)


Subroutines

private subroutine get_dop853_info(me, n, nfcn, nstep, naccpt, nrejct, h, iout)

Get info from a dop853_class.

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(in) :: me
integer, intent(out), optional :: n

dimension of the system

integer, intent(out), optional :: nfcn

number of function evaluations

integer, intent(out), optional :: nstep

number of computed steps

integer, intent(out), optional :: naccpt

number of accepted steps

integer, intent(out), optional :: nrejct

number of rejected steps (due to error test), (step rejections in the first step are not counted)

real(kind=wp), intent(out), optional :: h

predicted step size of the last accepted step

integer, intent(out), optional :: iout

iout flag passed into dop853, used to specify how solout is called during integration.

private subroutine destroy_dop853(me)

Destructor for dop853_class.

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(out) :: me

private subroutine set_parameters(me, n, fcn, solout, iprint, nstiff, nmax, hinitial, hmax, safe, fac1, fac2, beta, icomp, status_ok)

Set the optional inputs for dop853.

Read more…

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(inout) :: me
integer, intent(in) :: n

the dimension of the system (size of and vectors)

procedure(deriv_func) :: fcn

subroutine computing the value of

procedure(solout_func), optional :: solout

subroutine providing the numerical solution during integration. if iout>=1, it is called during integration. supply a dummy subroutine if iout=0.

integer, intent(in), optional :: iprint

switch for printing error messages if iprint==0 no messages are being printed if iprint/=0 messages are printed with write (iprint,*) ...

integer, intent(in), optional :: nstiff

test for stiffness is activated after step number j*nstiff (j integer), provided nstiff>0. for negative nstiff the stiffness test is never activated.

integer, intent(in), optional :: nmax

the maximal number of allowed steps.

real(kind=wp), intent(in), optional :: hinitial

initial step size, for hinitial=0 an initial guess is computed with help of the function hinit.

real(kind=wp), intent(in), optional :: hmax

maximal step size, defaults to xend-x if hmax=0.

real(kind=wp), intent(in), optional :: safe

safety factor in step size prediction

real(kind=wp), intent(in), optional :: fac1

parameter for step size selection. the new step size is chosen subject to the restriction fac1 <= hnew/hold <= fac2

real(kind=wp), intent(in), optional :: fac2

parameter for step size selection. the new step size is chosen subject to the restriction fac1 <= hnew/hold <= fac2

real(kind=wp), intent(in), optional :: beta

is the beta for stabilized step size control (see section iv.2). positive values of beta ( <= 0.04 ) make the step size control more stable.

integer, intent(in), optional, dimension(:) :: icomp

the components for which dense output is required (size from 0 to n).

logical, intent(out) :: status_ok

will be false for invalid inputs.

private subroutine dop853(me, x, y, xend, rtol, atol, iout, idid)

Numerical solution of a system of first order ordinary differential equations . This is an explicit Runge-Kutta method of order 8(5,3) due to Dormand & Prince (with stepsize control and dense output).

Read more…

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(inout) :: me
real(kind=wp), intent(inout) :: x

input: initial value of independent variable. output: x for which the solution has been computed (after successful return x=xend).

real(kind=wp), intent(inout), dimension(:) :: y

input: initial values for y. [size n]

Read more…
real(kind=wp), intent(in) :: xend

final x-value (xend-x may be positive or negative)

real(kind=wp), intent(in), dimension(:) :: rtol

relative error tolerance. rtol and atol can be both scalars or else both vectors of length n.

real(kind=wp), intent(in), dimension(:) :: atol

absolute error tolerance. rtol and atol can be both scalars or else both vectors of length n. atol should be strictly positive (possibly very small)

integer, intent(in) :: iout

switch for calling the subroutine solout:

Read more…
integer, intent(out) :: idid

reports on successfulness upon return:

Read more…

private subroutine dp86co(me, x, y, xend, hmax, h, rtol, atol, itol, iprint, iout, idid, nmax, nstiff, safe, beta, fac1, fac2, nfcn, nstep, naccpt, nrejct)

Core integrator for dop853. parameters same as in dop853 with workspace added.

Arguments

Type IntentOptional Attributes Name
class(dop853_class), intent(inout) :: me
real(kind=wp), intent(inout) :: x
real(kind=wp), intent(inout), dimension(:) :: y
real(kind=wp), intent(in) :: xend
real(kind=wp), intent(inout) :: hmax
real(kind=wp), intent(inout) :: h
real(kind=wp), intent(in), dimension(:) :: rtol
real(kind=wp), intent(in), dimension(:) :: atol
integer, intent(in) :: itol
integer, intent(in) :: iprint
integer, intent(in) :: iout
integer, intent(out) :: idid
integer, intent(in) :: nmax
integer, intent(in) :: nstiff
real(kind=wp), intent(in) :: safe
real(kind=wp), intent(in) :: beta
real(kind=wp), intent(in) :: fac1
real(kind=wp), intent(in) :: fac2
integer, intent(inout) :: nfcn
integer, intent(inout) :: nstep
integer, intent(inout) :: naccpt
integer, intent(inout) :: nrejct