From fa35fbfdbf2c8547cd97c68c25d2292cc30e2e63 Mon Sep 17 00:00:00 2001 From: jacobwilliams Date: Mon, 9 Oct 2023 14:09:51 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20jacobwil?= =?UTF-8?q?liams/rklib@5462fe34c7185de41b564c16d7cec03653004601=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sourcefile/rklib_module.f90.html | 12 +-- src/rklib_module.F90 | 12 +-- tipuesearch/tipuesearch_content.js | 2 +- type/rk_class.html | 148 +++++++++++++------------- type/rk_fixed_step_class.html | 52 ++++----- type/rk_variable_step_class.html | 96 ++++++++--------- type/rk_variable_step_fsal_class.html | 18 ++-- type/stepsize_class.html | 96 ++++++++--------- 8 files changed, 218 insertions(+), 218 deletions(-) diff --git a/sourcefile/rklib_module.f90.html b/sourcefile/rklib_module.f90.html index 10d8a985..770ecc00 100644 --- a/sourcefile/rklib_module.f90.html +++ b/sourcefile/rklib_module.f90.html @@ -604,8 +604,8 @@

Source Code

procedure,public :: set_fsal_cache end type rk_variable_step_fsal_class -#include "rklib_fixed_classes.i90" -#include "rklib_variable_classes.i90" +#include "rklib_fixed_classes.inc" +#include "rklib_variable_classes.inc" abstract interface @@ -688,10 +688,10 @@

Source Code

! submodule procedures: interface -#include "rklib_fixed_step_interfaces.i90" -#include "rklib_variable_step_interfaces.i90" -#include "rklib_fixed_property_interfaces.i90" -#include "rklib_variable_property_interfaces.i90" +#include "rklib_fixed_step_interfaces.inc" +#include "rklib_variable_step_interfaces.inc" +#include "rklib_fixed_property_interfaces.inc" +#include "rklib_variable_property_interfaces.inc" end interface ! public routines: diff --git a/src/rklib_module.F90 b/src/rklib_module.F90 index 79905ce7..6d6abd54 100644 --- a/src/rklib_module.F90 +++ b/src/rklib_module.F90 @@ -234,8 +234,8 @@ module rklib_module procedure,public :: set_fsal_cache end type rk_variable_step_fsal_class -#include "rklib_fixed_classes.i90" -#include "rklib_variable_classes.i90" +#include "rklib_fixed_classes.inc" +#include "rklib_variable_classes.inc" abstract interface @@ -318,10 +318,10 @@ end function properties_func ! submodule procedures: interface -#include "rklib_fixed_step_interfaces.i90" -#include "rklib_variable_step_interfaces.i90" -#include "rklib_fixed_property_interfaces.i90" -#include "rklib_variable_property_interfaces.i90" +#include "rklib_fixed_step_interfaces.inc" +#include "rklib_variable_step_interfaces.inc" +#include "rklib_fixed_property_interfaces.inc" +#include "rklib_variable_property_interfaces.inc" end interface ! public routines: diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index 74d4686d..fbe575db 100644 --- a/tipuesearch/tipuesearch_content.js +++ b/tipuesearch/tipuesearch_content.js @@ -1 +1 @@ -var tipuesearch = {"pages":[{"title":" rklib ","text":"rklib rklib : A modern Fortran library of fixed and variable-step Runge-Kutta solvers. Description This is a work in progress! The focus of this library is single-step, explicit Runge-Kutta solvers for 1st order differential equations. Novel features: The library includes a wide range of both fixed and variable-step Runge-Kutta methods, from very low to very high order. It is object-oriented and written in modern Fortran. It allows for defining a variable-step size integrator with a custom-tuned step size selection method. See stepsize_class in the code. The real kind is selectable via a compiler directive ( REAL32 , REAL64 , or REAL128 ). Integration to an event is also supported. The root-finding method is also selectable (via the roots-fortran library). Available Runge-Kutta methods: Number of fixed-step methods: 27 Number of variable-step methods: 48 Total number of methods: 75 Fixed-step methods: Name Description Properties Order Stages Registers CFL Reference euler Euler 1 1 1 1.0 Euler (1768) midpoint Midpoint 2 2 2 ? heun Heun 2 2 2 ? rkssp22 2-stage, 2nd order TVD Runge-Kutta Shu-Osher SSP 2 2 1 1.0 Shu & Oscher (1988) rk3 3th order Runge-Kutta 3 3 3 ? rkssp33 3-stage, 3rd order TVD Runge-Kutta Shu-Osher SSP 3 3 1 1.0 Shu & Oscher (1988) rkssp53 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth SSP 3 5 2 2.65 Ruuth (2006) rk4 Classic 4th order Runge-Kutta 4 4 4 Kutta (1901) rks4 4th order Runge-Kutta Shanks 4 4 4 Shanks (1965) rkr4 4th order Runge-Kutta Ralston 4 4 4 Ralston (1962) rkls44 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu LS 4 4 2 Jiang and Shu (1988) rkls54 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy LS 4 5 2 0.32 Carpenter & Kennedy (1994) rkssp54 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth SSP 4 5 4 1.51 Ruuth (2006) rks5 5th order Runge-Kutta Shanks 5 5 5 Shanks (1965) rk5 5th order Runge-Kutta 5 6 6 ? rkc5 5th order Runge-Kutta Cassity 5 6 6 Cassity (1966) rkl5 5th order Runge-Kutta Lawson 5 6 6 Lawson (1966) rklk5a 5th order Runge-Kutta Luther-Konen 1 5 6 6 Luther & Konen (1965) rklk5b 5th order Runge-Kutta Luther-Konen 2 5 6 6 Luther & Konen (1965) rkb6 6th order Runge-Kutta Butcher 6 7 7 Butcher (1963) rk7 7th order Runge-Kutta Shanks 7 9 9 Shanks (1965) rk8_10 10-stage, 8th order Runge-Kutta Shanks 8 10 10 Shanks (1965) rkcv8 11-stage, 8th order Runge-Kutta Cooper-Verner 8 11 11 Cooper & Verner (1972) rk8_12 12-stage, 8th order Runge-Kutta Shanks 8 12 12 Shanks (1965) rkz10 10th order Runge-Kutta Zhang 10 16 16 Zhang (2019) rko10 10th order Runge-Kutta Ono 10 17 17 Ono (2003) rkh10 10th order Runge-Kutta Hairer 10 17 17 Hairer (1978) Variable-step methods: Name Description Properties Order Stages Registers CFL Reference rkbs32 Bogacki & Shampine 3(2) FSAL 3 4 4 Bogacki & Shampine (1989) rkssp43 4-stage, 3rd order SSP SSP, LS 3 4 2 2.0 Kraaijevanger (1991) , Conde et al. (2018) rkf45 Fehlberg 4(5) 4 6 6 Fehlberg (1969) rkck54 Cash & Karp 5(4) 5 6 6 Cash & Karp (1990) rkdp54 Dormand-Prince 5(4) FSAL 5 7 7 Dormand & Prince (1980) rkt54 Tsitouras 5(4) FSAL 5 7 7 Tsitouras (2011) rks54 Stepanov 5(4) FSAL 5 7 7 Stepanov (2022) rkpp54 Papakostas-PapaGeorgiou 5(4) FSAL 5 7 7 Papakostas & Papageorgiou (1996) rkpp54b Papakostas-PapaGeorgiou 5(4) b FSAL 5 7 7 Papakostas & Papageorgiou (1996) rkbs54 Bogacki & Shampine 5(4) 5 8 8 Bogacki & Shampine (1996) rkss54 Sharp & Smart 5(4) 5 7 7 Sharp & Smart (1993) rkdp65 Dormand-Prince 6(5) 6 8 8 Dormand & Prince (1981) rkc65 Calvo 6(5) 6 9 9 Calvo (1990) rktp64 Tsitouras & Papakostas NEW6(4) 6 7 7 Tsitouras & Papakostas (1999) rkv65e Verner efficient (9,6(5)) FSAL 6 9 9 Verner (1994) rkv65r Verner robust (9,6(5)) FSAL 6 9 9 Verner (1994) rkv65 Verner 6(5) 6 8 8 Verner (2006) dverk65 Verner 6(5) \"DVERK\" 6 8 8 Verner (?) rktf65 Tsitouras & Famelis 6(5) FSAL 6 9 9 Tsitouras & Famelis (2006) rktp75 Tsitouras & Papakostas NEW7(5) 7 9 9 Tsitouras & Papakostas (1999) rktmy7 7th order Tanaka-Muramatsu-Yamashita 7 10 10 Tanaka, Muramatsu & Yamashita (1992) rktmy7s 7th order Stable Tanaka-Muramatsu-Yamashita 7 10 10 Tanaka, Muramatsu & Yamashita (1992) rkv76e Verner efficient (10:7(6)) 7 10 10 Verner (1978) rkv76r Verner robust (10:7(6)) 7 10 10 Verner (1978) rkss76 Sharp & Smart 7(6) 7 11 11 Sharp & Smart (1993) rkf78 Fehlberg 7(8) 7 13 13 Fehlberg (1968) rkv78 Verner 7(8) 7 13 13 Verner (1978) dverk78 Verner \"Maple\" 7(8) 7 13 13 Verner (?) rkdp85 Dormand-Prince 8(5) 8 12 12 Hairer (1993) rktp86 Tsitouras & Papakostas NEW8(6) 8 12 12 Tsitouras & Papakostas (1999) rkdp87 Dormand & Prince RK8(7)13M 8 13 13 Prince & Dormand (1981) rkv87e Verner efficient (8)7 8 13 13 Verner (1978) rkv87r Verner robust (8)7 8 13 13 Verner (1978) rkev87 Enright-Verner (8)7 8 13 13 Enright (1993) rkk87 Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) 8 13 13 Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras (2022) rkf89 Fehlberg 8(9) 8 17 17 Fehlberg (1968) rkv89 Verner 8(9) 8 16 16 Verner (1978) rkt98a Tsitouras 9(8) A 9 16 16 Tsitouras (2001) rkv98e Verner efficient (16:9(8)) 9 16 16 Verner (1978) rkv98r Verner robust (16:9(8)) 9 16 16 Verner (1978) rks98 Sharp 9(8) 9 16 16 Sharp (2000) rkf108 Feagin 8(10) 10 17 17 Feagin (2006) rkc108 Curtis 10(8) 10 21 21 Curtis (1975) rkb109 Baker 10(9) 10 21 21 Baker (?) rks1110a Stone 11(10) 11 26 26 Stone (2015) rkf1210 Feagin 12(10) 12 25 25 Feagin (2006) rko129 Ono 12(9) 12 29 29 Ono (2006) rkf1412 Feagin 14(12) 14 35 35 Feagin (2006) Properties key: LS = Low storage SSP = Strong stability preserving FSAL = First same as last CFL = Courant-Friedrichs-Lewy Example use case Basic use of the library is shown here (this uses the rktp86 method): program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example The result is: Success\ntf = 100.00\nxf = -0.1360372426E+01 0.1325538438E+01 Example performance comparison Running the unit tests will generate some performance plots. The following is for the variable-step methods compiled with quadruple precision (e.g, fpm test rk_test_variable_step --compiler ifort --flag \"-DREAL128\" ): Compiling A Fortran Package Manager manifest file is included, so that the library and test cases can be compiled with FPM. For example: fpm build --profile release\nfpm test --profile release To use rklib within your FPM project, add the following to your fpm.toml file: [dependencies] rklib = { git = \"https://github.com/jacobwilliams/rklib.git\" } By default, the library is built with double precision ( real64 ) real values. Explicitly specifying the real kind can be done using the following processor flags: Preprocessor flag Kind Number of bytes REAL32 real(kind=real32) 4 REAL64 real(kind=real64) 8 REAL128 real(kind=real128) 16 For example, to build a single precision version of the library, use: fpm build --profile release --flag \"-DREAL32\" To generate the documentation using FORD , run: ford ford.md 3rd Party Dependencies The library requires roots-fortran . The unit tests require pyplot-fortran , to generate the performance plots. The coefficients app (not required to use the library, but used to generate some of the code) requires the mpfun2020-var1 arbitrary precision library. All of these will be automatically downloaded by FPM. Documentation The latest API documentation for the master branch can be found here . This was generated from the source code using FORD . Notes The original version of this code was split off from the Fortran Astrodynamics Toolkit in September 2022. For developers To add a new method to this library: Update the tables (either the fixed or variable one in scripts/generate_files.py ) Run python scripts/generate_files.py to update all the include files. This script will generate all the boilerplate code for all the methods. It will also this README file. Add a step function (either in rklib_fixed_steps.f90 or rklib_variable_steps.f90 ). Note that you can generate a template of an RK step function using the scripts/generate_rk_code.py script. The two command line arguments are the number of function evaluations required and the method name (e.g., 'rk4' ). Edit the template accordingly (note at the FSAL ones have a slightly different format). Update the unit tests. License The rklib source code and related files and documentation are distributed under a permissive free software license (BSD-3). References E. B. Shanks, \" Higher Order Approximations of Runge-Kutta Type \", NASA Technical Note, NASA TN D-2920, Sept. 1965. E. B. Shanks, \" Solutions of Differential Equations by Evaluations of Functions \" Math. Comp. 20 (1966). E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 , 1968. E. Fehlberg, \" Low-order classical Runge-Kutta formulas with stepsize control and their application to some heat transfer problems \", NASA Technical Report R-315, July 1, 1969. J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", SIAM Journal on Numerical Analysis, 15(4), 772-790, 1978. T. Feagin, \" High-Order Explicit Runge-Kutta Methods \" J. C. Butcher, \" A history of Runge-Kutta methods \", Applied Numerical Mathematics, Volume 20, Issue 3, March 1996, Pages 247-260 J. C. Butcher, \" On Runge-Kutta Processes of High Order \", Oct. 28, 1963. G. E. Müllges & F. Uhlig, \"Numerical Algorithms with Fortran\", Springer, 1996. K. Fox, \" Numerical Integration of the Equations of Motion of Celestial Mechanics \", Celestial Mechanics 33, p 127-142, 1984. Mathematics Source Library Maple worksheets on the derivation of Runge-Kutta schemes Index of numerical integrators J. Williams, Fehlberg's Runge-Kutta Methods , Feb. 10, 2018. C.-W. Shu, S. Osher, \" Efficient implementation of essentially non-oscillatory shock-capturing schemes \", Journal of Computational Physics, 77(2), 439-471, 1988. S. Ruuth, \" Global optimization of explicit strong-stability-preserving Runge-Kutta methods. \" Mathematics of Computation 75.253 (2006): 183-207. Jiang, Guang-Shan, and Chi-Wang Shu. \" Efficient implementation of weighted ENO schemes. \" Journal of computational physics 126.1 (1996): 202-228. See also FOODIE FLINT DDEABM DOP853 DVODE ODEPACK libode Developer Info Jacob Williams","tags":"home","loc":"index.html"},{"title":"rklib_properties – rklib ","text":"type, public :: rklib_properties Properties of an RK method. Contents Variables order number_of_stages fsal low_storage strong_stability_preserving number_of_registers cfl short_name long_name Source Code rklib_properties Components Type Visibility Attributes Name Initial integer, public :: order = 0 order of the method integer, public :: number_of_stages = 0 number of stages logical, public :: fsal = .false. if it is a FSAL method logical, public :: low_storage = .false. if it is a LS method logical, public :: strong_stability_preserving = .false. if it is a SSP method integer, public :: number_of_registers = 0 number of f vectors used real(kind=wp), public :: cfl = zero Courant-Friedrichs-Lewy number character(len=:), public, allocatable :: short_name short version of the method name character(len=:), public, allocatable :: long_name longer description of the method Source Code type , public :: rklib_properties !! Properties of an RK method. integer :: order = 0 !! order of the method integer :: number_of_stages = 0 !! number of stages logical :: fsal = . false . !! if it is a FSAL method logical :: low_storage = . false . !! if it is a LS method logical :: strong_stability_preserving = . false . !! if it is a SSP method integer :: number_of_registers = 0 !! number of `f` vectors used real ( wp ) :: cfl = zero !! Courant-Friedrichs-Lewy number character ( len = :), allocatable :: short_name !! short version of the method name character ( len = :), allocatable :: long_name !! longer description of the method end type rklib_properties","tags":"","loc":"type/rklib_properties.html"},{"title":"stepsize_class – rklib ","text":"type, public :: stepsize_class Algorithms for adjusting the step size for variable-step\nRunge-Kutta integrators. Inherited by type~~stepsize_class~~InheritedByGraph type~stepsize_class stepsize_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_class->type~stepsize_class stepsize_method type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables fixed_step_mode hmax hmin hfactor_reject hfactor_accept accept_mode max_attempts relative_err safety_factor p_exponent_offset norm Type-Bound Procedures initialize compute_stepsize destroy Source Code stepsize_class Components Type Visibility Attributes Name Initial logical, private :: fixed_step_mode = .false. if true, then the method runs in\nfixed step mode with not error estimation real(kind=wp), private :: hmax = 1.0e+6_wp maximum allowed step size real(kind=wp), private :: hmin = 1.0e-6_wp minimum allowed step size real(kind=wp), private :: hfactor_reject = 0.5_wp minimum allowed factor for decreasing step size after rejected step real(kind=wp), private :: hfactor_accept = 2.0_wp maximum allowed factor for increasing step size after accepted step integer, private :: accept_mode = 2 method to determine if step is accepted [1,2] integer, private :: max_attempts = 10000 maximum number of attempts to decrease step size before giving up logical, private :: relative_err = .false. to use tol*h in the hfactor equation real(kind=wp), private :: safety_factor = 0.9_wp for hfactor equation (>0) integer, private :: p_exponent_offset = 1 p + this value in the exponent (0 or 1) procedure( norm_func ), private, nopass, pointer :: norm => maxval_func routine for computing the norm of the state Type-Bound Procedures procedure, public :: initialize => stepsize_class_constructor private pure subroutine stepsize_class_constructor (me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. procedure, public :: compute_stepsize private subroutine compute_stepsize (me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted procedure, public :: destroy => destroy_stepsize_class private subroutine destroy_stepsize_class (me) Destructor for stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me Source Code type , public :: stepsize_class !! Algorithms for adjusting the step size for variable-step !! Runge-Kutta integrators. private logical :: fixed_step_mode = . false . !! if true, then the method runs in !! fixed step mode with not error estimation real ( wp ) :: hmax = 1.0e+6_wp !! maximum allowed step size real ( wp ) :: hmin = 1.0e-6_wp !! minimum allowed step size real ( wp ) :: hfactor_reject = 0.5_wp !! minimum allowed factor for decreasing step size after rejected step real ( wp ) :: hfactor_accept = 2.0_wp !! maximum allowed factor for increasing step size after accepted step integer :: accept_mode = 2 !! method to determine if step is accepted [1,2] integer :: max_attempts = 10000 !! maximum number of attempts to decrease step size before giving up ! for the `hfactor` equation: logical :: relative_err = . false . !! to use `tol*h` in the `hfactor` equation real ( wp ) :: safety_factor = 0.9_wp !! for `hfactor` equation (>0) integer :: p_exponent_offset = 1 !! `p` + this value in the exponent (0 or 1) procedure ( norm_func ), nopass , pointer :: norm => maxval_func !! routine for computing the norm of the state contains private procedure , public :: initialize => stepsize_class_constructor procedure , public :: compute_stepsize procedure , public :: destroy => destroy_stepsize_class end type stepsize_class","tags":"","loc":"type/stepsize_class.html"},{"title":"rk_class – rklib ","text":"type, public, abstract :: rk_class main integration class Inherits type~~rk_class~~InheritsGraph type~rk_class rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_class~~InheritedByGraph type~rk_class rk_class type~rk_fixed_step_class rk_fixed_step_class type~rk_fixed_step_class->type~rk_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_class->type~rk_class type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~euler_class euler_class type~euler_class->type~rk_fixed_step_class type~heun_class heun_class type~heun_class->type~rk_fixed_step_class type~midpoint_class midpoint_class type~midpoint_class->type~rk_fixed_step_class type~rk3_class rk3_class type~rk3_class->type~rk_fixed_step_class type~rk4_class rk4_class type~rk4_class->type~rk_fixed_step_class type~rk5_class rk5_class type~rk5_class->type~rk_fixed_step_class type~rk7_class rk7_class type~rk7_class->type~rk_fixed_step_class type~rk8_10_class rk8_10_class type~rk8_10_class->type~rk_fixed_step_class type~rk8_12_class rk8_12_class type~rk8_12_class->type~rk_fixed_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkb6_class rkb6_class type~rkb6_class->type~rk_fixed_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc5_class rkc5_class type~rkc5_class->type~rk_fixed_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkcv8_class rkcv8_class type~rkcv8_class->type~rk_fixed_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkh10_class rkh10_class type~rkh10_class->type~rk_fixed_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rkl5_class rkl5_class type~rkl5_class->type~rk_fixed_step_class type~rklk5a_class rklk5a_class type~rklk5a_class->type~rk_fixed_step_class type~rklk5b_class rklk5b_class type~rklk5b_class->type~rk_fixed_step_class type~rkls44_class rkls44_class type~rkls44_class->type~rk_fixed_step_class type~rkls54_class rkls54_class type~rkls54_class->type~rk_fixed_step_class type~rko10_class rko10_class type~rko10_class->type~rk_fixed_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rkr4_class rkr4_class type~rkr4_class->type~rk_fixed_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks4_class rks4_class type~rks4_class->type~rk_fixed_step_class type~rks5_class rks5_class type~rks5_class->type~rk_fixed_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp22_class rkssp22_class type~rkssp22_class->type~rk_fixed_step_class type~rkssp33_class rkssp33_class type~rkssp33_class->type~rk_fixed_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkssp53_class rkssp53_class type~rkssp53_class->type~rk_fixed_step_class type~rkssp54_class rkssp54_class type~rkssp54_class->type~rk_fixed_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkz10_class rkz10_class type~rkz10_class->type~rk_fixed_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables istatus stopped num_steps max_number_of_steps report_rate stop_on_errors n f report g solver funcs Type-Bound Procedures destroy stop status failed init begin raise_exception clear_exception export_point begin_integration properties Source Code rk_class Components Type Visibility Attributes Name Initial integer, private :: istatus = 0 status code logical, private :: stopped = .false. if user has stopped the integration in f or report . integer, private :: num_steps = 0 number of accepted steps taken integer, private :: max_number_of_steps = huge(1) maximum number of steps to take integer, private :: report_rate = 1 how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. logical, private :: stop_on_errors = .false. if true, then errors will stop the program integer, private :: n = 0 user specified number of variables procedure( deriv_func ), private, pointer :: f => null() user-specified derivative function procedure( report_func ), private, pointer :: report => null() user-specified report function procedure( event_func ), private, pointer :: g => null() event function (stop when this is zero) type(root_method), private :: solver = root_method_brent the root solver method to use for even finding real(kind=wp), private, dimension(:,:), allocatable :: funcs matrix to store the function\nevalutaions in the step function.\nthis will be size ( n x number_of_registers ) Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, private, :: init => initialize_rk_class private subroutine initialize_rk_class (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, private, :: begin => begin_integration_rk_class private subroutine begin_integration_rk_class (me) Begin an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, private, :: raise_exception private subroutine raise_exception (me, error_code) Raise an exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise procedure, private, :: clear_exception private subroutine clear_exception (me) Clear any exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, private, :: export_point private subroutine export_point (me, t, x, first_or_last) Wrapper for exporting points during integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) procedure( begin_func ), private, deferred :: begin_integration subroutine begin_func(me) Prototype routine called before integration begins\nto set up internal variables. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Source Code type , abstract , public :: rk_class !! main integration class private integer :: istatus = 0 !! status code logical :: stopped = . false . !! if user has stopped the integration in `f` or `report`. integer :: num_steps = 0 !! number of accepted steps taken integer :: max_number_of_steps = huge ( 1 ) !! maximum number of steps to take integer :: report_rate = 1 !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. logical :: stop_on_errors = . false . !! if true, then errors will stop the program integer :: n = 0 !! user specified number of variables procedure ( deriv_func ), pointer :: f => null () !! user-specified derivative function procedure ( report_func ), pointer :: report => null () !! user-specified report function procedure ( event_func ), pointer :: g => null () !! event function (stop when this is zero) type ( root_method ) :: solver = root_method_brent !! the root solver method to use for even finding real ( wp ), dimension (:,:), allocatable :: funcs !! matrix to store the function !! evalutaions in the step function. !! this will be size (`n` x `number_of_registers`) contains private procedure , public :: destroy !! destructor procedure , public :: stop => rk_class_stop !! user-callable method to stop the integration procedure , public :: status => rk_class_status !! get status code and message procedure , public :: failed procedure :: init => initialize_rk_class procedure :: begin => begin_integration_rk_class procedure :: raise_exception procedure :: clear_exception procedure :: export_point procedure ( begin_func ), deferred :: begin_integration procedure ( properties_func ), deferred , public :: properties end type rk_class","tags":"","loc":"type/rk_class.html"},{"title":"rk_fixed_step_class – rklib ","text":"type, public, abstract, extends( rk_class ) :: rk_fixed_step_class fixed step size class Inherits type~~rk_fixed_step_class~~InheritsGraph type~rk_fixed_step_class rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_fixed_step_class~~InheritedByGraph type~rk_fixed_step_class rk_fixed_step_class type~euler_class euler_class type~euler_class->type~rk_fixed_step_class type~heun_class heun_class type~heun_class->type~rk_fixed_step_class type~midpoint_class midpoint_class type~midpoint_class->type~rk_fixed_step_class type~rk3_class rk3_class type~rk3_class->type~rk_fixed_step_class type~rk4_class rk4_class type~rk4_class->type~rk_fixed_step_class type~rk5_class rk5_class type~rk5_class->type~rk_fixed_step_class type~rk7_class rk7_class type~rk7_class->type~rk_fixed_step_class type~rk8_10_class rk8_10_class type~rk8_10_class->type~rk_fixed_step_class type~rk8_12_class rk8_12_class type~rk8_12_class->type~rk_fixed_step_class type~rkb6_class rkb6_class type~rkb6_class->type~rk_fixed_step_class type~rkc5_class rkc5_class type~rkc5_class->type~rk_fixed_step_class type~rkcv8_class rkcv8_class type~rkcv8_class->type~rk_fixed_step_class type~rkh10_class rkh10_class type~rkh10_class->type~rk_fixed_step_class type~rkl5_class rkl5_class type~rkl5_class->type~rk_fixed_step_class type~rklk5a_class rklk5a_class type~rklk5a_class->type~rk_fixed_step_class type~rklk5b_class rklk5b_class type~rklk5b_class->type~rk_fixed_step_class type~rkls44_class rkls44_class type~rkls44_class->type~rk_fixed_step_class type~rkls54_class rkls54_class type~rkls54_class->type~rk_fixed_step_class type~rko10_class rko10_class type~rko10_class->type~rk_fixed_step_class type~rkr4_class rkr4_class type~rkr4_class->type~rk_fixed_step_class type~rks4_class rks4_class type~rks4_class->type~rk_fixed_step_class type~rks5_class rks5_class type~rks5_class->type~rk_fixed_step_class type~rkssp22_class rkssp22_class type~rkssp22_class->type~rk_fixed_step_class type~rkssp33_class rkssp33_class type~rkssp33_class->type~rk_fixed_step_class type~rkssp53_class rkssp53_class type~rkssp53_class->type~rk_fixed_step_class type~rkssp54_class rkssp54_class type~rkssp54_class->type~rk_fixed_step_class type~rkz10_class rkz10_class type~rkz10_class->type~rk_fixed_step_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed properties step initialize integrate integrate_to_event begin_integration Source Code rk_fixed_step_class Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure( step_func_fixed ), private, deferred :: step the step routine for the rk method subroutine step_func_fixed(me, t, x, h, xf) Prototype rk step function for the fixed-step methods. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, private, :: begin_integration => begin_integration_rk_fixed_step_class private subroutine begin_integration_rk_fixed_step_class (me) Begin a rk_fixed_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me Source Code type , extends ( rk_class ), abstract , public :: rk_fixed_step_class !! fixed step size class private contains private procedure ( step_func_fixed ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_fixed_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_fixed_step procedure , public :: integrate_to_event => integrate_to_event_fixed_step procedure :: begin_integration => begin_integration_rk_fixed_step_class end type rk_fixed_step_class","tags":"","loc":"type/rk_fixed_step_class.html"},{"title":"rk_variable_step_class – rklib ","text":"type, public, abstract, extends( rk_class ) :: rk_variable_step_class Main integration class for variable step size Runge-Kutta methods Inherits type~~rk_variable_step_class~~InheritsGraph type~rk_variable_step_class rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_variable_step_class~~InheritedByGraph type~rk_variable_step_class rk_variable_step_class type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables stepsize_method rtol atol hinit_method num_rejected_steps last_accepted_step_size Type-Bound Procedures destroy stop status failed properties step initialize integrate integrate_to_event info hstart hinit begin_integration compute_initial_step order Source Code rk_variable_step_class Components Type Visibility Attributes Name Initial type( stepsize_class ), private :: stepsize_method the method for varying the step size real(kind=wp), private, dimension(:), allocatable :: rtol relative tolerance ( size(n) ) real(kind=wp), private, dimension(:), allocatable :: atol absolute tolerance ( size(n) ) integer, private :: hinit_method = 1 if automatically computing the inital step size, which\nmethod to use. 1 = hstart , 2 = hinit . integer, private :: num_rejected_steps = 0 number of rejected steps real(kind=wp), private :: last_accepted_step_size = zero the last accepted step size dt from the integration\n(positive or negative) Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure( step_func_variable ), private, deferred :: step the step routine for the rk method subroutine step_func_variable(me, t, x, h, xf, xerr) Prototype rk step function for the variable-step methods. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, private, :: hstart for automatically computing the initial step size [this is from DDEABM] private subroutine hstart (me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. It is based on an estimate of the local lipschitz constant for the\n differential equation (lower bound on a norm of the jacobian) ,\n a bound on the differential equation (first derivative), and\n a bound on the partial derivative of the equation with respect to\n the independent variable. (all approximated near the initial point a) Note Subroutine hstart also uses the me%stepsize_method%norm function for computing vector norms Note This routine is from DDEABM . History 820301 date written -- watts, h. a., (snla) 890531 changed all specific intrinsics to generic. (wrb) 890831 modified array declarations. (wrb) 890911 removed unnecessary intrinsics. (wrb) 891024 changed references from dvnorm to dhvnrm. (wrb) 891214 prologue converted to version 4.0 format. (bab) 900328 added type section. (wrb) 910722 updated author section. (als) December, 2015 : Refactored this routine (jw) April 2016 : Some modifications for the variable-step RK module (jw) Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method. procedure, private, :: hinit for automatically computing the initial step size [this is from DOP853] private function hinit (me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Note This routine is from dop853. It was modified for this module. Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) procedure, private, :: begin_integration => begin_integration_rk_variable_step_class private subroutine begin_integration_rk_variable_step_class (me) Begin a rk_variable_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me procedure, private, :: compute_initial_step private function compute_initial_step (me, t0, tf, x0, h0) result(dt) Compute the initial step size. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use procedure, private, :: order returns p , the order of the method private pure function order (me) result(p) Returns the order of the RK method Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method Source Code type , extends ( rk_class ), abstract , public :: rk_variable_step_class !! Main integration class for variable step size Runge-Kutta methods private type ( stepsize_class ) :: stepsize_method !! the method for varying the step size real ( wp ), dimension (:), allocatable :: rtol !! relative tolerance (`size(n)`) real ( wp ), dimension (:), allocatable :: atol !! absolute tolerance (`size(n)`) integer :: hinit_method = 1 !! if automatically computing the inital step size, which !! method to use. 1 = `hstart`, 2 = `hinit`. integer :: num_rejected_steps = 0 !! number of rejected steps real ( wp ) :: last_accepted_step_size = zero !! the last accepted step size `dt` from the integration !! (positive or negative) contains private procedure ( step_func_variable ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_variable_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_variable_step procedure , public :: integrate_to_event => integrate_to_event_variable_step procedure , public :: info => info_variable_step procedure :: hstart !! for automatically computing the initial step size [this is from DDEABM] procedure :: hinit !! for automatically computing the initial step size [this is from DOP853] procedure :: begin_integration => begin_integration_rk_variable_step_class procedure :: compute_initial_step procedure :: order !! returns `p`, the order of the method end type rk_variable_step_class","tags":"","loc":"type/rk_variable_step_class.html"},{"title":"rk_variable_step_fsal_class – rklib ","text":"type, public, abstract, extends( rk_variable_step_class ) :: rk_variable_step_fsal_class a variable step method with the \"first same as last\" (FSAL) property.\nCache the last f and x vectors to use for the next step. The assumption is that the nature of the\nfunction has not changed since the last step.\nIf it has, the user would need to manually call destroy_fsal_cache so that the previous point was not reused. Inherits type~~rk_variable_step_fsal_class~~InheritsGraph type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_variable_step_fsal_class~~InheritedByGraph type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables t_saved x_saved f_saved Type-Bound Procedures destroy stop status failed properties initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache Source Code rk_variable_step_fsal_class Components Type Visibility Attributes Name Initial real(kind=wp), private, allocatable :: t_saved cached t real(kind=wp), private, dimension(:), allocatable :: x_saved cached x real(kind=wp), private, dimension(:), allocatable :: f_saved cached f Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Source Code type , extends ( rk_variable_step_class ), abstract , public :: rk_variable_step_fsal_class !! a variable step method with the \"first same as last\" (FSAL) property. !! Cache the last `f` and `x` vectors to use for the next step. !! !! The assumption is that the nature of the !! function has not changed since the last step. !! If it has, the user would need to manually call [[destroy_fsal_cache]] !! so that the previous point was not reused. private real ( wp ), allocatable :: t_saved !! cached `t` real ( wp ), dimension (:), allocatable :: x_saved !! cached `x` real ( wp ), dimension (:), allocatable :: f_saved !! cached `f` contains private procedure , public :: destroy_fsal_cache procedure , public :: check_fsal_cache procedure , public :: set_fsal_cache end type rk_variable_step_fsal_class","tags":"","loc":"type/rk_variable_step_fsal_class.html"},{"title":"euler_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: euler_class Euler Inherits type~~euler_class~~InheritsGraph type~euler_class euler_class type~rk_fixed_step_class rk_fixed_step_class type~euler_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => euler interface private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => euler_properties interface private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/euler_class.html"},{"title":"midpoint_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: midpoint_class Midpoint Inherits type~~midpoint_class~~InheritsGraph type~midpoint_class midpoint_class type~rk_fixed_step_class rk_fixed_step_class type~midpoint_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => midpoint interface private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => midpoint_properties interface private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/midpoint_class.html"},{"title":"heun_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: heun_class Heun Inherits type~~heun_class~~InheritsGraph type~heun_class heun_class type~rk_fixed_step_class rk_fixed_step_class type~heun_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => heun interface private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => heun_properties interface private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/heun_class.html"},{"title":"rkssp22_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp22_class 2-stage, 2nd order TVD Runge-Kutta Shu-Osher Inherits type~~rkssp22_class~~InheritsGraph type~rkssp22_class rkssp22_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp22_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp22 interface private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp22_properties interface private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp22_class.html"},{"title":"rk3_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk3_class 3th order Runge-Kutta Inherits type~~rk3_class~~InheritsGraph type~rk3_class rk3_class type~rk_fixed_step_class rk_fixed_step_class type~rk3_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk3 interface private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk3_properties interface private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk3_class.html"},{"title":"rkssp33_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp33_class 3-stage, 3rd order TVD Runge-Kutta Shu-Osher Inherits type~~rkssp33_class~~InheritsGraph type~rkssp33_class rkssp33_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp33_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp33 interface private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp33_properties interface private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp33_class.html"},{"title":"rkssp53_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp53_class 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth Inherits type~~rkssp53_class~~InheritsGraph type~rkssp53_class rkssp53_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp53_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp53 interface private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp53_properties interface private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp53_class.html"},{"title":"rk4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk4_class Classic 4th order Runge-Kutta Inherits type~~rk4_class~~InheritsGraph type~rk4_class rk4_class type~rk_fixed_step_class rk_fixed_step_class type~rk4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk4 interface private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk4_properties interface private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk4_class.html"},{"title":"rks4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rks4_class 4th order Runge-Kutta Shanks Inherits type~~rks4_class~~InheritsGraph type~rks4_class rks4_class type~rk_fixed_step_class rk_fixed_step_class type~rks4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rks4 interface private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rks4_properties interface private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks4_class.html"},{"title":"rkr4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkr4_class 4th order Runge-Kutta Ralston Inherits type~~rkr4_class~~InheritsGraph type~rkr4_class rkr4_class type~rk_fixed_step_class rk_fixed_step_class type~rkr4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkr4 interface private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkr4_properties interface private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkr4_class.html"},{"title":"rkls44_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkls44_class 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu Inherits type~~rkls44_class~~InheritsGraph type~rkls44_class rkls44_class type~rk_fixed_step_class rk_fixed_step_class type~rkls44_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkls44 interface private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkls44_properties interface private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkls44_class.html"},{"title":"rkls54_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkls54_class 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy Inherits type~~rkls54_class~~InheritsGraph type~rkls54_class rkls54_class type~rk_fixed_step_class rk_fixed_step_class type~rkls54_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkls54 interface private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkls54_properties interface private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkls54_class.html"},{"title":"rkssp54_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp54_class 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth Inherits type~~rkssp54_class~~InheritsGraph type~rkssp54_class rkssp54_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp54_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp54 interface private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp54_properties interface private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp54_class.html"},{"title":"rks5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rks5_class 5th order Runge-Kutta Shanks Inherits type~~rks5_class~~InheritsGraph type~rks5_class rks5_class type~rk_fixed_step_class rk_fixed_step_class type~rks5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rks5 interface private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rks5_properties interface private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks5_class.html"},{"title":"rk5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk5_class 5th order Runge-Kutta Inherits type~~rk5_class~~InheritsGraph type~rk5_class rk5_class type~rk_fixed_step_class rk_fixed_step_class type~rk5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk5 interface private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk5_properties interface private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk5_class.html"},{"title":"rkc5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkc5_class 5th order Runge-Kutta Cassity Inherits type~~rkc5_class~~InheritsGraph type~rkc5_class rkc5_class type~rk_fixed_step_class rk_fixed_step_class type~rkc5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkc5 interface private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkc5_properties interface private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc5_class.html"},{"title":"rkl5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkl5_class 5th order Runge-Kutta Lawson Inherits type~~rkl5_class~~InheritsGraph type~rkl5_class rkl5_class type~rk_fixed_step_class rk_fixed_step_class type~rkl5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkl5 interface private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkl5_properties interface private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkl5_class.html"},{"title":"rklk5a_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rklk5a_class 5th order Runge-Kutta Luther-Konen 1 Inherits type~~rklk5a_class~~InheritsGraph type~rklk5a_class rklk5a_class type~rk_fixed_step_class rk_fixed_step_class type~rklk5a_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rklk5a interface private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rklk5a_properties interface private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rklk5a_class.html"},{"title":"rklk5b_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rklk5b_class 5th order Runge-Kutta Luther-Konen 2 Inherits type~~rklk5b_class~~InheritsGraph type~rklk5b_class rklk5b_class type~rk_fixed_step_class rk_fixed_step_class type~rklk5b_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rklk5b interface private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rklk5b_properties interface private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rklk5b_class.html"},{"title":"rkb6_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkb6_class 6th order Runge-Kutta Butcher Inherits type~~rkb6_class~~InheritsGraph type~rkb6_class rkb6_class type~rk_fixed_step_class rk_fixed_step_class type~rkb6_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkb6 interface private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkb6_properties interface private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkb6_class.html"},{"title":"rk7_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk7_class 7th order Runge-Kutta Shanks Inherits type~~rk7_class~~InheritsGraph type~rk7_class rk7_class type~rk_fixed_step_class rk_fixed_step_class type~rk7_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk7 interface private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk7_properties interface private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk7_class.html"},{"title":"rk8_10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk8_10_class 10-stage, 8th order Runge-Kutta Shanks Inherits type~~rk8_10_class~~InheritsGraph type~rk8_10_class rk8_10_class type~rk_fixed_step_class rk_fixed_step_class type~rk8_10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk8_10 interface private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk8_10_properties interface private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk8_10_class.html"},{"title":"rkcv8_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkcv8_class 11-stage, 8th order Runge-Kutta Cooper-Verner Inherits type~~rkcv8_class~~InheritsGraph type~rkcv8_class rkcv8_class type~rk_fixed_step_class rk_fixed_step_class type~rkcv8_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkcv8 interface private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkcv8_properties interface private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkcv8_class.html"},{"title":"rk8_12_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk8_12_class 12-stage, 8th order Runge-Kutta Shanks Inherits type~~rk8_12_class~~InheritsGraph type~rk8_12_class rk8_12_class type~rk_fixed_step_class rk_fixed_step_class type~rk8_12_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk8_12 interface private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk8_12_properties interface private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk8_12_class.html"},{"title":"rkz10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkz10_class 10th order Runge-Kutta Zhang Inherits type~~rkz10_class~~InheritsGraph type~rkz10_class rkz10_class type~rk_fixed_step_class rk_fixed_step_class type~rkz10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkz10 interface private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkz10_properties interface private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkz10_class.html"},{"title":"rko10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rko10_class 10th order Runge-Kutta Ono Inherits type~~rko10_class~~InheritsGraph type~rko10_class rko10_class type~rk_fixed_step_class rk_fixed_step_class type~rko10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rko10 interface private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rko10_properties interface private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rko10_class.html"},{"title":"rkh10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkh10_class 10th order Runge-Kutta Hairer Inherits type~~rkh10_class~~InheritsGraph type~rkh10_class rkh10_class type~rk_fixed_step_class rk_fixed_step_class type~rkh10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkh10 interface private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkh10_properties interface private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkh10_class.html"},{"title":"rkbs32_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkbs32_class Bogacki & Shampine 3(2) Inherits type~~rkbs32_class~~InheritsGraph type~rkbs32_class rkbs32_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkbs32 interface private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkbs32_properties interface private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkbs32_class.html"},{"title":"rkssp43_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkssp43_class 4-stage, 3rd order SSP Inherits type~~rkssp43_class~~InheritsGraph type~rkssp43_class rkssp43_class type~rk_variable_step_class rk_variable_step_class type~rkssp43_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkssp43 interface private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkssp43_properties interface private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp43_class.html"},{"title":"rkf45_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf45_class Fehlberg 4(5) Inherits type~~rkf45_class~~InheritsGraph type~rkf45_class rkf45_class type~rk_variable_step_class rk_variable_step_class type~rkf45_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf45 interface private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf45_properties interface private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf45_class.html"},{"title":"rkck54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkck54_class Cash & Karp 5(4) Inherits type~~rkck54_class~~InheritsGraph type~rkck54_class rkck54_class type~rk_variable_step_class rk_variable_step_class type~rkck54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkck54 interface private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkck54_properties interface private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkck54_class.html"},{"title":"rkdp54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkdp54_class Dormand-Prince 5(4) Inherits type~~rkdp54_class~~InheritsGraph type~rkdp54_class rkdp54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkdp54 interface private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp54_properties interface private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp54_class.html"},{"title":"rkt54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkt54_class Tsitouras 5(4) Inherits type~~rkt54_class~~InheritsGraph type~rkt54_class rkt54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkt54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkt54 interface private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkt54_properties interface private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkt54_class.html"},{"title":"rks54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rks54_class Stepanov 5(4) Inherits type~~rks54_class~~InheritsGraph type~rks54_class rks54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rks54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rks54 interface private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks54_properties interface private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks54_class.html"},{"title":"rkpp54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkpp54_class Papakostas-PapaGeorgiou 5(4) Inherits type~~rkpp54_class~~InheritsGraph type~rkpp54_class rkpp54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkpp54 interface private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkpp54_properties interface private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkpp54_class.html"},{"title":"rkpp54b_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkpp54b_class Papakostas-PapaGeorgiou 5(4) b Inherits type~~rkpp54b_class~~InheritsGraph type~rkpp54b_class rkpp54b_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkpp54b interface private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkpp54b_properties interface private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkpp54b_class.html"},{"title":"rkbs54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkbs54_class Bogacki & Shampine 5(4) Inherits type~~rkbs54_class~~InheritsGraph type~rkbs54_class rkbs54_class type~rk_variable_step_class rk_variable_step_class type~rkbs54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkbs54 interface private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkbs54_properties interface private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkbs54_class.html"},{"title":"rkss54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkss54_class Sharp & Smart 5(4) Inherits type~~rkss54_class~~InheritsGraph type~rkss54_class rkss54_class type~rk_variable_step_class rk_variable_step_class type~rkss54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkss54 interface private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkss54_properties interface private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkss54_class.html"},{"title":"rkdp65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp65_class Dormand-Prince 6(5) Inherits type~~rkdp65_class~~InheritsGraph type~rkdp65_class rkdp65_class type~rk_variable_step_class rk_variable_step_class type~rkdp65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp65 interface private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp65_properties interface private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp65_class.html"},{"title":"rkc65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkc65_class Calvo 6(5) Inherits type~~rkc65_class~~InheritsGraph type~rkc65_class rkc65_class type~rk_variable_step_class rk_variable_step_class type~rkc65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkc65 interface private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkc65_properties interface private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc65_class.html"},{"title":"rktp64_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp64_class Tsitouras & Papakostas NEW6(4) Inherits type~~rktp64_class~~InheritsGraph type~rktp64_class rktp64_class type~rk_variable_step_class rk_variable_step_class type~rktp64_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp64 interface private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp64_properties interface private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp64_class.html"},{"title":"rkv65e_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkv65e_class Verner efficient (9,6(5)) Inherits type~~rkv65e_class~~InheritsGraph type~rkv65e_class rkv65e_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkv65e interface private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65e_properties interface private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65e_class.html"},{"title":"rkv65r_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkv65r_class Verner robust (9,6(5)) Inherits type~~rkv65r_class~~InheritsGraph type~rkv65r_class rkv65r_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkv65r_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkv65r interface private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65r_properties interface private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65r_class.html"},{"title":"rkv65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv65_class Verner 6(5) Inherits type~~rkv65_class~~InheritsGraph type~rkv65_class rkv65_class type~rk_variable_step_class rk_variable_step_class type~rkv65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv65 interface private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65_properties interface private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65_class.html"},{"title":"dverk65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: dverk65_class Verner 6(5) \"DVERK\" Inherits type~~dverk65_class~~InheritsGraph type~dverk65_class dverk65_class type~rk_variable_step_class rk_variable_step_class type~dverk65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => dverk65 interface private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => dverk65_properties interface private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/dverk65_class.html"},{"title":"rktf65_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rktf65_class Tsitouras & Famelis 6(5) Inherits type~~rktf65_class~~InheritsGraph type~rktf65_class rktf65_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rktf65_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rktf65 interface private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktf65_properties interface private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktf65_class.html"},{"title":"rktp75_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp75_class Tsitouras & Papakostas NEW7(5) Inherits type~~rktp75_class~~InheritsGraph type~rktp75_class rktp75_class type~rk_variable_step_class rk_variable_step_class type~rktp75_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp75 interface private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp75_properties interface private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp75_class.html"},{"title":"rktmy7_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktmy7_class 7th order Tanaka-Muramatsu-Yamashita Inherits type~~rktmy7_class~~InheritsGraph type~rktmy7_class rktmy7_class type~rk_variable_step_class rk_variable_step_class type~rktmy7_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktmy7 interface private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktmy7_properties interface private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktmy7_class.html"},{"title":"rktmy7s_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktmy7s_class 7th order Stable Tanaka-Muramatsu-Yamashita Inherits type~~rktmy7s_class~~InheritsGraph type~rktmy7s_class rktmy7s_class type~rk_variable_step_class rk_variable_step_class type~rktmy7s_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktmy7s interface private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktmy7s_properties interface private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktmy7s_class.html"},{"title":"rkv76e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv76e_class Verner efficient (10:7(6)) Inherits type~~rkv76e_class~~InheritsGraph type~rkv76e_class rkv76e_class type~rk_variable_step_class rk_variable_step_class type~rkv76e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv76e interface private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv76e_properties interface private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv76e_class.html"},{"title":"rkv76r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv76r_class Verner robust (10:7(6)) Inherits type~~rkv76r_class~~InheritsGraph type~rkv76r_class rkv76r_class type~rk_variable_step_class rk_variable_step_class type~rkv76r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv76r interface private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv76r_properties interface private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv76r_class.html"},{"title":"rkss76_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkss76_class Sharp & Smart 7(6) Inherits type~~rkss76_class~~InheritsGraph type~rkss76_class rkss76_class type~rk_variable_step_class rk_variable_step_class type~rkss76_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkss76 interface private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkss76_properties interface private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkss76_class.html"},{"title":"rkf78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf78_class Fehlberg 7(8) Inherits type~~rkf78_class~~InheritsGraph type~rkf78_class rkf78_class type~rk_variable_step_class rk_variable_step_class type~rkf78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf78 interface private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf78_properties interface private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf78_class.html"},{"title":"rkv78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv78_class Verner 7(8) Inherits type~~rkv78_class~~InheritsGraph type~rkv78_class rkv78_class type~rk_variable_step_class rk_variable_step_class type~rkv78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv78 interface private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv78_properties interface private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv78_class.html"},{"title":"dverk78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: dverk78_class Verner \"Maple\" 7(8) Inherits type~~dverk78_class~~InheritsGraph type~dverk78_class dverk78_class type~rk_variable_step_class rk_variable_step_class type~dverk78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => dverk78 interface private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => dverk78_properties interface private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/dverk78_class.html"},{"title":"rkdp85_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp85_class Dormand-Prince 8(5) Inherits type~~rkdp85_class~~InheritsGraph type~rkdp85_class rkdp85_class type~rk_variable_step_class rk_variable_step_class type~rkdp85_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp85 interface private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp85_properties interface private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp85_class.html"},{"title":"rktp86_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp86_class Tsitouras & Papakostas NEW8(6) Inherits type~~rktp86_class~~InheritsGraph type~rktp86_class rktp86_class type~rk_variable_step_class rk_variable_step_class type~rktp86_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp86 interface private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp86_properties interface private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp86_class.html"},{"title":"rkdp87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp87_class Dormand & Prince RK8(7)13M Inherits type~~rkdp87_class~~InheritsGraph type~rkdp87_class rkdp87_class type~rk_variable_step_class rk_variable_step_class type~rkdp87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp87 interface private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp87_properties interface private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp87_class.html"},{"title":"rkv87e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv87e_class Verner efficient (8)7 Inherits type~~rkv87e_class~~InheritsGraph type~rkv87e_class rkv87e_class type~rk_variable_step_class rk_variable_step_class type~rkv87e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv87e interface private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv87e_properties interface private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv87e_class.html"},{"title":"rkv87r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv87r_class Verner robust (8)7 Inherits type~~rkv87r_class~~InheritsGraph type~rkv87r_class rkv87r_class type~rk_variable_step_class rk_variable_step_class type~rkv87r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv87r interface private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv87r_properties interface private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv87r_class.html"},{"title":"rkev87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkev87_class Enright-Verner (8)7 Inherits type~~rkev87_class~~InheritsGraph type~rkev87_class rkev87_class type~rk_variable_step_class rk_variable_step_class type~rkev87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkev87 interface private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkev87_properties interface private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkev87_class.html"},{"title":"rkk87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkk87_class Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) Inherits type~~rkk87_class~~InheritsGraph type~rkk87_class rkk87_class type~rk_variable_step_class rk_variable_step_class type~rkk87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkk87 interface private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkk87_properties interface private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkk87_class.html"},{"title":"rkf89_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf89_class Fehlberg 8(9) Inherits type~~rkf89_class~~InheritsGraph type~rkf89_class rkf89_class type~rk_variable_step_class rk_variable_step_class type~rkf89_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf89 interface private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf89_properties interface private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf89_class.html"},{"title":"rkv89_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv89_class Verner 8(9) Inherits type~~rkv89_class~~InheritsGraph type~rkv89_class rkv89_class type~rk_variable_step_class rk_variable_step_class type~rkv89_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv89 interface private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv89_properties interface private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv89_class.html"},{"title":"rkt98a_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkt98a_class Tsitouras 9(8) A Inherits type~~rkt98a_class~~InheritsGraph type~rkt98a_class rkt98a_class type~rk_variable_step_class rk_variable_step_class type~rkt98a_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkt98a interface private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkt98a_properties interface private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkt98a_class.html"},{"title":"rkv98e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv98e_class Verner efficient (16:9(8)) Inherits type~~rkv98e_class~~InheritsGraph type~rkv98e_class rkv98e_class type~rk_variable_step_class rk_variable_step_class type~rkv98e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv98e interface private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv98e_properties interface private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv98e_class.html"},{"title":"rkv98r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv98r_class Verner robust (16:9(8)) Inherits type~~rkv98r_class~~InheritsGraph type~rkv98r_class rkv98r_class type~rk_variable_step_class rk_variable_step_class type~rkv98r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv98r interface private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv98r_properties interface private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv98r_class.html"},{"title":"rks98_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rks98_class Sharp 9(8) Inherits type~~rks98_class~~InheritsGraph type~rks98_class rks98_class type~rk_variable_step_class rk_variable_step_class type~rks98_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rks98 interface private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks98_properties interface private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks98_class.html"},{"title":"rkf108_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf108_class Feagin 8(10) Inherits type~~rkf108_class~~InheritsGraph type~rkf108_class rkf108_class type~rk_variable_step_class rk_variable_step_class type~rkf108_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf108 interface private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf108_properties interface private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf108_class.html"},{"title":"rkc108_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkc108_class Curtis 10(8) Inherits type~~rkc108_class~~InheritsGraph type~rkc108_class rkc108_class type~rk_variable_step_class rk_variable_step_class type~rkc108_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkc108 interface private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkc108_properties interface private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc108_class.html"},{"title":"rkb109_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkb109_class Baker 10(9) Inherits type~~rkb109_class~~InheritsGraph type~rkb109_class rkb109_class type~rk_variable_step_class rk_variable_step_class type~rkb109_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkb109 interface private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkb109_properties interface private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkb109_class.html"},{"title":"rks1110a_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rks1110a_class Stone 11(10) Inherits type~~rks1110a_class~~InheritsGraph type~rks1110a_class rks1110a_class type~rk_variable_step_class rk_variable_step_class type~rks1110a_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rks1110a interface private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks1110a_properties interface private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks1110a_class.html"},{"title":"rkf1210_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf1210_class Feagin 12(10) Inherits type~~rkf1210_class~~InheritsGraph type~rkf1210_class rkf1210_class type~rk_variable_step_class rk_variable_step_class type~rkf1210_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf1210 interface private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf1210_properties interface private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf1210_class.html"},{"title":"rko129_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rko129_class Ono 12(9) Inherits type~~rko129_class~~InheritsGraph type~rko129_class rko129_class type~rk_variable_step_class rk_variable_step_class type~rko129_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rko129 interface private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rko129_properties interface private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rko129_class.html"},{"title":"rkf1412_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf1412_class Feagin 14(12) Inherits type~~rkf1412_class~~InheritsGraph type~rkf1412_class rkf1412_class type~rk_variable_step_class rk_variable_step_class type~rkf1412_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf1412 interface private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf1412_properties interface private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf1412_class.html"},{"title":"norm_func – rklib","text":"abstract interface private pure function norm_func(x) result(xmag) Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x a vector Return Value real(kind=wp) the magnitude of the vector Description Vector norm function. Must return a value .","tags":"","loc":"interface/norm_func.html"},{"title":"properties_func – rklib","text":"abstract interface private pure function properties_func(me) result(p) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Description Returns the properties of the method.","tags":"","loc":"interface/properties_func.html"},{"title":"begin_func – rklib","text":"abstract interface private subroutine begin_func(me) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Description routine called before integration begins\nto set up internal variables.","tags":"","loc":"interface/begin_func.html"},{"title":"deriv_func – rklib","text":"abstract interface private subroutine deriv_func(me, t, x, xdot) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out), dimension(:) :: xdot derivative of state vector Description derivative function","tags":"","loc":"interface/deriv_func.html"},{"title":"event_func – rklib","text":"abstract interface private subroutine event_func(me, t, x, g) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out) :: g g(t,x). The goal is to stop the integration when g=0. Description event function","tags":"","loc":"interface/event_func.html"},{"title":"report_func – rklib","text":"abstract interface private subroutine report_func(me, t, x) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector Description report function","tags":"","loc":"interface/report_func.html"},{"title":"step_func_fixed – rklib","text":"abstract interface private subroutine step_func_fixed(me, t, x, h, xf) Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector Description rk step function for the fixed-step methods.","tags":"","loc":"interface/step_func_fixed.html"},{"title":"step_func_variable – rklib","text":"abstract interface private subroutine step_func_variable(me, t, x, h, xf, xerr) Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate Description rk step function for the variable-step methods.","tags":"","loc":"interface/step_func_variable.html"},{"title":"order – rklib","text":"private pure function order(me) result(p) Returns the order of the RK method Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method Called by proc~~order~~CalledByGraph proc~order rklib_module::rk_variable_step_class%order proc~hinit rklib_module::rk_variable_step_class%hinit proc~hinit->proc~order proc~hstart rklib_module::rk_variable_step_class%hstart proc~hstart->proc~order proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~order proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~order proc~integrate_variable_step->proc~compute_initial_step proc~compute_initial_step->proc~hinit proc~compute_initial_step->proc~hstart Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code order Source Code pure function order ( me ) result ( p ) class ( rk_variable_step_class ), intent ( in ) :: me integer :: p !! order of the method type ( rklib_properties ) :: properties properties = me % properties () p = properties % order end function order","tags":"","loc":"proc/order.html"},{"title":"failed – rklib","text":"private function failed(me) Returns true if there was an error.\nCan use rk_class_status to get more info. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical Contents Source Code failed Source Code logical function failed ( me ) class ( rk_class ), intent ( in ) :: me failed = me % istatus < 0 end function failed","tags":"","loc":"proc/failed.html"},{"title":"norm2_func – rklib","text":"public pure function norm2_func(x) result(xmag) Use intrinsic norm2(x) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) Contents Source Code norm2_func Source Code pure function norm2_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = norm2 ( x ) end function norm2_func","tags":"","loc":"proc/norm2_func.html"},{"title":"maxval_func – rklib","text":"public pure function maxval_func(x) result(xmag) Use maxval(abs(x)) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) Contents Source Code maxval_func Source Code pure function maxval_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = maxval ( abs ( x )) end function maxval_func","tags":"","loc":"proc/maxval_func.html"},{"title":"compute_initial_step – rklib","text":"private function compute_initial_step(me, t0, tf, x0, h0) result(dt) Compute the initial step size. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use Calls proc~~compute_initial_step~~CallsGraph proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart proc~hinit->f proc~order rklib_module::rk_variable_step_class%order proc~hinit->proc~order proc~hstart->f proc~hstart->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~compute_initial_step~~CalledByGraph proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code compute_initial_step Source Code function compute_initial_step ( me , t0 , tf , x0 , h0 ) result ( dt ) class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: h0 !! user-input initial step size (if zero, then one is computed) real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), intent ( in ) :: tf !! final time real ( wp ) :: dt !! step size to use real ( wp ), dimension ( me % n ) :: x0 !! initial state real ( wp ), dimension ( me % n ) :: etol !! tolerance vector real ( wp ), dimension ( me % n ) :: f0 !! initial derivative if ( abs ( h0 ) <= zero ) then ! compute an appropriate initial step size: etol = me % rtol * me % stepsize_method % norm ( x0 ) + me % atol call me % f ( t0 , x0 , f0 ) ! get initial dx/dt select case ( me % hinit_method ) ! value was checked in initialize_variable_step case ( 1 ); call me % hstart ( t0 , tf , x0 , f0 , etol , dt ) case ( 2 ); dt = me % hinit ( t0 , x0 , sign ( 1.0_wp , tf - t0 ), f0 ,& me % stepsize_method % hmax ,& me % atol , me % rtol ) end select else ! user-specified initial step size: dt = sign ( h0 , tf - t0 ) ! (correct sign) end if end function compute_initial_step","tags":"","loc":"proc/compute_initial_step.html"},{"title":"hinit – rklib","text":"private function hinit(me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Note This routine is from dop853. It was modified for this module. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) Calls proc~~hinit~~CallsGraph proc~hinit rklib_module::rk_variable_step_class%hinit f f proc~hinit->f proc~order rklib_module::rk_variable_step_class%order proc~hinit->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~hinit~~CalledByGraph proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~compute_initial_step->proc~hinit proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code hinit Source Code function hinit ( me , x , y , posneg , f0 , hmax , atol , rtol ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: x real ( wp ), dimension (:), intent ( in ) :: y !! dimension(n) real ( wp ), intent ( in ) :: posneg !! posneg = sign(1.0_wp,xend-x) real ( wp ), dimension (:), intent ( in ) :: f0 !! dimension(n) real ( wp ), intent ( in ) :: hmax real ( wp ), dimension (:), intent ( in ) :: atol real ( wp ), dimension (:), intent ( in ) :: rtol real ( wp ) :: der12 , der2 , dnf , dny , h , h1 , hinit , sk integer :: i integer :: iord !! order of the method real ( wp ), dimension ( me % n ) :: f1 , y1 iord = me % order () ! compute a first guess for explicit euler as ! h = 0.01 * norm (y0) / norm (f0) ! the increment for explicit euler is small ! compared to the solution dnf = zero dny = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) dnf = dnf + ( f0 ( i ) / sk ) ** 2 dny = dny + ( y ( i ) / sk ) ** 2 end do if ( dnf <= 1.0e-10_wp . or . dny <= 1.0e-10_wp ) then h = 1.0e-6_wp else h = sqrt ( dny / dnf ) * 0.01_wp end if h = min ( h , hmax ) h = sign ( h , posneg ) ! perform an explicit euler step do i = 1 , me % n y1 ( i ) = y ( i ) + h * f0 ( i ) end do call me % f ( x + h , y1 , f1 ) ! estimate the second derivative of the solution der2 = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) der2 = der2 + (( f1 ( i ) - f0 ( i )) / sk ) ** 2 end do der2 = sqrt ( der2 ) / h ! step size is computed such that ! h**iord * max ( norm (f0), norm (der2)) = 0.01 der12 = max ( abs ( der2 ), sqrt ( dnf )) if ( der12 <= 1.0e-15_wp ) then h1 = max ( 1.0e-6_wp , abs ( h ) * 1.0e-3_wp ) else h1 = ( 0.01_wp / der12 ) ** ( 1.0_wp / iord ) end if h = min ( 10 0.0_wp * abs ( h ), h1 , hmax ) hinit = sign ( h , posneg ) end function hinit","tags":"","loc":"proc/hinit.html"},{"title":"clear_exception – rklib","text":"private subroutine clear_exception(me) Clear any exception. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Called by proc~~clear_exception~~CalledByGraph proc~clear_exception rklib_module::rk_class%clear_exception proc~begin_integration_rk_class rklib_module::rk_class%begin_integration_rk_class proc~begin_integration_rk_class->proc~clear_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code clear_exception Source Code subroutine clear_exception ( me ) class ( rk_class ), intent ( inout ) :: me me % istatus = RKLIB_ERROR_NONE end subroutine clear_exception","tags":"","loc":"proc/clear_exception.html"},{"title":"raise_exception – rklib","text":"private subroutine raise_exception(me, error_code) Raise an exception. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise Called by proc~~raise_exception~~CalledByGraph proc~raise_exception rklib_module::rk_class%raise_exception proc~initialize_variable_step rklib_module::rk_variable_step_class%initialize_variable_step proc~initialize_variable_step->proc~raise_exception proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step proc~integrate_fixed_step->proc~raise_exception proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step proc~integrate_to_event_fixed_step->proc~raise_exception proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~raise_exception proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~raise_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code raise_exception Source Code subroutine raise_exception ( me , error_code ) class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: error_code !! the error to raise me % istatus = error_code if ( error_code < 0 . and . me % stop_on_errors ) then error stop trim ( rklib_error_messages ( error_code )) end if end subroutine raise_exception","tags":"","loc":"proc/raise_exception.html"},{"title":"destroy – rklib","text":"private subroutine destroy(me) Destructor for rk_class . Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me Called by proc~~destroy~~CalledByGraph proc~destroy rklib_module::rk_class%destroy proc~initialize_rk_class rklib_module::rk_class%initialize_rk_class proc~initialize_rk_class->proc~destroy Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code destroy Source Code subroutine destroy ( me ) class ( rk_class ), intent ( out ) :: me end subroutine destroy","tags":"","loc":"proc/destroy.html"},{"title":"rk_class_stop – rklib","text":"private subroutine rk_class_stop(me) User-callable method to stop the integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Contents Source Code rk_class_stop Source Code subroutine rk_class_stop ( me ) class ( rk_class ), intent ( inout ) :: me me % stopped = . true . end subroutine rk_class_stop","tags":"","loc":"proc/rk_class_stop.html"},{"title":"rk_class_status – rklib","text":"private subroutine rk_class_status(me, istatus, message) Get the status of an integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message Contents Source Code rk_class_status Source Code subroutine rk_class_status ( me , istatus , message ) class ( rk_class ), intent ( in ) :: me integer , intent ( out ), optional :: istatus !! status code (`<0` means an error) character ( len = :), allocatable , intent ( out ), optional :: message !! status message if ( present ( istatus )) istatus = me % istatus if ( present ( message )) message = trim ( rklib_error_messages ( me % istatus )) end subroutine rk_class_status","tags":"","loc":"proc/rk_class_status.html"},{"title":"export_point – rklib","text":"private subroutine export_point(me, t, x, first_or_last) Wrapper for exporting points during integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) Calls proc~~export_point~~CallsGraph proc~export_point rklib_module::rk_class%export_point report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~export_point~~CalledByGraph proc~export_point rklib_module::rk_class%export_point proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step proc~integrate_fixed_step->proc~export_point proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step proc~integrate_to_event_fixed_step->proc~export_point proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~export_point proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~export_point Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code export_point Source Code subroutine export_point ( me , t , x , first_or_last ) class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x logical , intent ( in ), optional :: first_or_last !! if this is the first or !! last point (always reported) logical :: export !! if the point is to be exported if ( associated ( me % report ) . and . me % report_rate > 0 ) then export = . false . if ( present ( first_or_last )) then ! always report first and last step if ( first_or_last ) export = . true . end if if (. not . export ) then ! report steps at user-specified rate export = modulo ( me % num_steps , me % report_rate ) == 0 end if if ( export ) call me % report ( t , x ) end if end subroutine export_point","tags":"","loc":"proc/export_point.html"},{"title":"destroy_fsal_cache – rklib","text":"private subroutine destroy_fsal_cache(me) Destructor for the FSAL variables. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me Called by proc~~destroy_fsal_cache~~CalledByGraph proc~destroy_fsal_cache rklib_module::rk_variable_step_fsal_class%destroy_fsal_cache proc~begin_integration_rk_variable_step_class rklib_module::rk_variable_step_class%begin_integration_rk_variable_step_class proc~begin_integration_rk_variable_step_class->proc~destroy_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code destroy_fsal_cache Source Code subroutine destroy_fsal_cache ( me ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me if ( allocated ( me % t_saved )) deallocate ( me % t_saved ) if ( allocated ( me % x_saved )) deallocate ( me % x_saved ) if ( allocated ( me % f_saved )) deallocate ( me % f_saved ) end subroutine destroy_fsal_cache","tags":"","loc":"proc/destroy_fsal_cache.html"},{"title":"check_fsal_cache – rklib","text":"private subroutine check_fsal_cache(me, t, x, f) Check the FSAL cache. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Called by proc~~check_fsal_cache~~CalledByGraph proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32 rklib_variable_steps::rkbs32 proc~rkbs32->proc~check_fsal_cache proc~rkdp54 rklib_variable_steps::rkdp54 proc~rkdp54->proc~check_fsal_cache proc~rkpp54 rklib_variable_steps::rkpp54 proc~rkpp54->proc~check_fsal_cache proc~rkpp54b rklib_variable_steps::rkpp54b proc~rkpp54b->proc~check_fsal_cache proc~rks54 rklib_variable_steps::rks54 proc~rks54->proc~check_fsal_cache proc~rkt54 rklib_variable_steps::rkt54 proc~rkt54->proc~check_fsal_cache proc~rktf65 rklib_variable_steps::rktf65 proc~rktf65->proc~check_fsal_cache proc~rkv65e rklib_variable_steps::rkv65e proc~rkv65e->proc~check_fsal_cache proc~rkv65r rklib_variable_steps::rkv65r proc~rkv65r->proc~check_fsal_cache interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code check_fsal_cache Source Code subroutine check_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f logical :: fsal !! if we can avoid a step due to first-same-as-last fsal = . false . if ( allocated ( me % x_saved )) then if ( size ( x ) == size ( me % x_saved )) then fsal = all ( x == me % x_saved ) . and . t == me % t_saved end if end if if ( fsal ) then f = me % f_saved else call me % f ( t , x , f ) end if end subroutine check_fsal_cache","tags":"","loc":"proc/check_fsal_cache.html"},{"title":"set_fsal_cache – rklib","text":"private subroutine set_fsal_cache(me, t, x, f) Compute the function and add it to the FSAL cache. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Called by proc~~set_fsal_cache~~CalledByGraph proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32 rklib_variable_steps::rkbs32 proc~rkbs32->proc~set_fsal_cache proc~rkdp54 rklib_variable_steps::rkdp54 proc~rkdp54->proc~set_fsal_cache proc~rkpp54 rklib_variable_steps::rkpp54 proc~rkpp54->proc~set_fsal_cache proc~rkpp54b rklib_variable_steps::rkpp54b proc~rkpp54b->proc~set_fsal_cache proc~rks54 rklib_variable_steps::rks54 proc~rks54->proc~set_fsal_cache proc~rkt54 rklib_variable_steps::rkt54 proc~rkt54->proc~set_fsal_cache proc~rktf65 rklib_variable_steps::rktf65 proc~rktf65->proc~set_fsal_cache proc~rkv65e rklib_variable_steps::rkv65e proc~rkv65e->proc~set_fsal_cache proc~rkv65r rklib_variable_steps::rkv65r proc~rkv65r->proc~set_fsal_cache interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code set_fsal_cache Source Code subroutine set_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f call me % f ( t , x , f ) me % t_saved = t me % x_saved = x me % f_saved = f end subroutine set_fsal_cache","tags":"","loc":"proc/set_fsal_cache.html"},{"title":"initialize_rk_class – rklib","text":"private subroutine initialize_rk_class(me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_rk_class~~CallsGraph proc~initialize_rk_class rklib_module::rk_class%initialize_rk_class funcs funcs proc~initialize_rk_class->funcs proc~destroy rklib_module::rk_class%destroy proc~initialize_rk_class->proc~destroy Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_rk_class Source Code subroutine initialize_rk_class ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( event_func ), optional :: g !! for stopping at an event procedure ( report_func ), optional :: report !! for reporting the steps logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. type ( rklib_properties ) :: props !! to get the method properties call me % destroy () me % n = n me % f => f if ( present ( report )) me % report => report if ( present ( g )) me % g => g if ( present ( stop_on_errors )) me % stop_on_errors = stop_on_errors if ( present ( max_number_of_steps )) me % max_number_of_steps = abs ( max_number_of_steps ) if ( present ( report_rate )) me % report_rate = abs ( report_rate ) if ( present ( solver )) me % solver = solver ! allocate the registers: props = me % properties () if ( allocated ( me % funcs )) deallocate ( me % funcs ) allocate ( me % funcs ( n , props % number_of_registers )) me % funcs = zero ! reset internal variables: me % num_steps = 0 me % stopped = . false . end subroutine initialize_rk_class","tags":"","loc":"proc/initialize_rk_class.html"},{"title":"begin_integration_rk_class – rklib","text":"private subroutine begin_integration_rk_class(me) Begin an integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Calls proc~~begin_integration_rk_class~~CallsGraph proc~begin_integration_rk_class rklib_module::rk_class%begin_integration_rk_class proc~clear_exception rklib_module::rk_class%clear_exception proc~begin_integration_rk_class->proc~clear_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_class Source Code subroutine begin_integration_rk_class ( me ) class ( rk_class ), intent ( inout ) :: me call me % clear_exception () me % num_steps = 0 me % stopped = . false . end subroutine begin_integration_rk_class","tags":"","loc":"proc/begin_integration_rk_class.html"},{"title":"begin_integration_rk_fixed_step_class – rklib","text":"private subroutine begin_integration_rk_fixed_step_class(me) Begin a rk_fixed_step_class integration. Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me Calls proc~~begin_integration_rk_fixed_step_class~~CallsGraph proc~begin_integration_rk_fixed_step_class rklib_module::rk_fixed_step_class%begin_integration_rk_fixed_step_class begin begin proc~begin_integration_rk_fixed_step_class->begin Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_fixed_step_class Source Code subroutine begin_integration_rk_fixed_step_class ( me ) class ( rk_fixed_step_class ), intent ( inout ) :: me call me % begin () ! all we need is base method here. end subroutine begin_integration_rk_fixed_step_class","tags":"","loc":"proc/begin_integration_rk_fixed_step_class.html"},{"title":"initialize_fixed_step – rklib","text":"private subroutine initialize_fixed_step(me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_fixed_step~~CallsGraph proc~initialize_fixed_step rklib_module::rk_fixed_step_class%initialize_fixed_step init init proc~initialize_fixed_step->init Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_fixed_step Source Code subroutine initialize_fixed_step ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. ! base init all we need here: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) end subroutine initialize_fixed_step","tags":"","loc":"proc/initialize_fixed_step.html"},{"title":"integrate_fixed_step – rklib","text":"private subroutine integrate_fixed_step(me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state Calls proc~~integrate_fixed_step~~CallsGraph proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step begin_integration begin_integration proc~integrate_fixed_step->begin_integration proc~export_point rklib_module::rk_class%export_point proc~integrate_fixed_step->proc~export_point proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_fixed_step->proc~raise_exception step step proc~integrate_fixed_step->step report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_fixed_step Source Code subroutine integrate_fixed_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t !! current time value real ( wp ) :: dt !! time step from `t` to `t2` real ( wp ) :: t2 !! time to step to from `t` real ( wp ), dimension ( me % n ) :: x !! state vector logical :: last !! if it is the last step if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( h ) > zero ) then t = t0 x = x0 dt = sign ( h , tf - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do else xf = x0 end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_fixed_step","tags":"","loc":"proc/integrate_fixed_step.html"},{"title":"integrate_to_event_fixed_step – rklib","text":"private subroutine integrate_to_event_fixed_step(me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf Calls proc~~integrate_to_event_fixed_step~~CallsGraph proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step begin_integration begin_integration proc~integrate_to_event_fixed_step->begin_integration g g proc~integrate_to_event_fixed_step->g proc~export_point rklib_module::rk_class%export_point proc~integrate_to_event_fixed_step->proc~export_point proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_to_event_fixed_step->proc~raise_exception root_scalar root_scalar proc~integrate_to_event_fixed_step->root_scalar step step proc~integrate_to_event_fixed_step->step report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_to_event_fixed_step Source Code subroutine integrate_to_event_fixed_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension (:), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf !local variables: real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum real ( wp ), dimension ( me % n ) :: x !! state vector real ( wp ), dimension ( me % n ) :: g_xf !! state vector from the root finder logical :: first !! it is the first step logical :: last !! it is the last step integer :: iflag !! return flag from `solver` if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t0 , x0 , ga ) !evaluate event function dt = sign ( h , tmax - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . end do end if call me % export_point ( t2 , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g !take a step from t to t+delt and evaluate g function: call me % step ( t , x , delt , g_xf ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_fixed_step","tags":"","loc":"proc/integrate_to_event_fixed_step.html"},{"title":"stepsize_class_constructor – rklib","text":"private pure subroutine stepsize_class_constructor(me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. Contents Source Code stepsize_class_constructor Source Code pure subroutine stepsize_class_constructor ( me , hmin , hmax , hfactor_reject ,& hfactor_accept , norm , accept_mode , relative_err ,& safety_factor , p_exponent_offset , max_attempts ,& fixed_step_mode ) implicit none class ( stepsize_class ), intent ( inout ) :: me real ( wp ), intent ( in ), optional :: hmin !! minimum allowed step size (>0) real ( wp ), intent ( in ), optional :: hmax !! maximum allowed step size (>0) real ( wp ), intent ( in ), optional :: hfactor_reject !! minimum allowed factor for !! decreasing step size after !! rejected step (>0) real ( wp ), intent ( in ), optional :: hfactor_accept !! maximum allowed factor for !! decreasing step size after !! accepted step (>0) procedure ( norm_func ), optional :: norm !! the user-specified ||x|| !! function integer , intent ( in ), optional :: accept_mode !! method to determine if step !! is accepted [1,2] integer , intent ( in ), optional :: max_attempts !! max step size change attempts !! after rejected step logical , intent ( in ), optional :: relative_err !! to use `tol*h` in the `hfactor` equation real ( wp ), intent ( in ), optional :: safety_factor !! for `hfactor` equation (>0) integer , intent ( in ), optional :: p_exponent_offset !! p + this value in the exponent (0 or 1) logical , intent ( in ), optional :: fixed_step_mode !! if true, then the method runs in !! fixed step mode with not error estimation. !! All the other inputs are ignored. Note that !! this requires a `dt /= 0` input for the integrator. if ( present ( hmin )) me % hmin = abs ( hmin ) if ( present ( hmax )) me % hmax = abs ( hmax ) if ( present ( hfactor_reject )) me % hfactor_reject = abs ( hfactor_reject ) if ( present ( hfactor_accept )) me % hfactor_accept = abs ( hfactor_accept ) if ( present ( norm )) me % norm => norm if ( present ( accept_mode )) me % accept_mode = accept_mode if ( present ( max_attempts )) me % max_attempts = max_attempts !if (present(compute_h_factor)) me%compute_h_factor => compute_h_factor if ( present ( relative_err )) me % relative_err = relative_err if ( present ( safety_factor )) me % safety_factor = abs ( safety_factor ) if ( present ( p_exponent_offset )) me % p_exponent_offset = abs ( p_exponent_offset ) if ( present ( fixed_step_mode )) me % fixed_step_mode = fixed_step_mode end subroutine stepsize_class_constructor","tags":"","loc":"proc/stepsize_class_constructor.html"},{"title":"destroy_stepsize_class – rklib","text":"private subroutine destroy_stepsize_class(me) Destructor for stepsize_class . Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me Contents Source Code destroy_stepsize_class Source Code subroutine destroy_stepsize_class ( me ) implicit none class ( stepsize_class ), intent ( out ) :: me end subroutine destroy_stepsize_class","tags":"","loc":"proc/destroy_stepsize_class.html"},{"title":"compute_stepsize – rklib","text":"private subroutine compute_stepsize(me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted Calls proc~~compute_stepsize~~CallsGraph proc~compute_stepsize rklib_module::stepsize_class%compute_stepsize norm norm proc~compute_stepsize->norm Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code compute_stepsize Source Code subroutine compute_stepsize ( me , n , h , tol , err , p , hnew , accept ) implicit none class ( stepsize_class ), intent ( in ) :: me integer , intent ( in ) :: n !! number of variables real ( wp ), intent ( in ) :: h !! current step size (<>0) real ( wp ), dimension ( n ), intent ( in ) :: tol !! abs error tolerance (>0) real ( wp ), dimension ( n ), intent ( in ) :: err !! truncation error estimate (>0) integer , intent ( in ) :: p !! order of the method real ( wp ), intent ( out ) :: hnew !! new step size (<>0) logical , intent ( out ) :: accept !! if the step is accepted real ( wp ) :: e !! exponent real ( wp ) :: hfactor !! step size factor (>0) real ( wp ) :: max_err !! max error for all the elements real ( wp ), parameter :: small = 1 0.0_wp * epsilon ( 1.0_wp ) !! small error value if ( me % fixed_step_mode ) then ! do not adjust the step size accept = . true . hnew = h else if ( all ( err <= small )) then ! the error is extremely small hfactor = me % hfactor_accept accept = . true . else ! compute base factor based on the selected formula: if ( me % relative_err ) then max_err = me % norm ( err / tol * abs ( h )) else max_err = me % norm ( err / tol ) end if e = 1.0_wp / real ( p + me % p_exponent_offset , wp ) hfactor = abs ( me % safety_factor * ( 1.0_wp / max_err ) ** e ) ! if the step is to be accepted: select case ( me % accept_mode ) case ( 1 ) !algorithm 17.12 accept = hfactor >= 1.0_wp case ( 2 ) !algorithm 17.13 accept = me % norm ( err / tol ) <= 1.0_wp end select !...notes: ! see: L. Shampine \"Some Practical Runge-Kutta Formulas\", ! Mathematics of Computation, 46(173), Jan 1986. ! different conditions for satisfying error conditions: ! ||err|| <= tol -- Error per step (EPS) ! ||err|| <= h*tol -- Error per unit step (EPUS) !compute the actual hfactor based on the limits: if ( accept ) then hfactor = min ( me % hfactor_accept , hfactor ) else hfactor = max ( me % hfactor_reject , hfactor ) end if end if ! compute the new step size (enforce min/max bounds & add sign): hnew = sign ( max ( me % hmin , min ( me % hmax , abs ( h ) * hfactor )), h ) end if end subroutine compute_stepsize","tags":"","loc":"proc/compute_stepsize.html"},{"title":"begin_integration_rk_variable_step_class – rklib","text":"private subroutine begin_integration_rk_variable_step_class(me) Begin a rk_variable_step_class integration. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me Calls proc~~begin_integration_rk_variable_step_class~~CallsGraph proc~begin_integration_rk_variable_step_class rklib_module::rk_variable_step_class%begin_integration_rk_variable_step_class begin begin proc~begin_integration_rk_variable_step_class->begin proc~destroy_fsal_cache rklib_module::rk_variable_step_fsal_class%destroy_fsal_cache proc~begin_integration_rk_variable_step_class->proc~destroy_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_variable_step_class Source Code subroutine begin_integration_rk_variable_step_class ( me ) class ( rk_variable_step_class ), intent ( inout ) :: me call me % begin () ! base ! variable step params: me % num_rejected_steps = 0 me % last_accepted_step_size = zero select type ( me ) class is ( rk_variable_step_fsal_class ) call me % destroy_fsal_cache () end select end subroutine begin_integration_rk_variable_step_class","tags":"","loc":"proc/begin_integration_rk_variable_step_class.html"},{"title":"initialize_variable_step – rklib","text":"private subroutine initialize_variable_step(me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_variable_step~~CallsGraph proc~initialize_variable_step rklib_module::rk_variable_step_class%initialize_variable_step init init proc~initialize_variable_step->init proc~raise_exception rklib_module::rk_class%raise_exception proc~initialize_variable_step->proc~raise_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_variable_step Source Code subroutine initialize_variable_step ( me , n , f , rtol , atol , stepsize_method ,& hinit_method , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of equations procedure ( deriv_func ) :: f !! derivative function real ( wp ), dimension (:), intent ( in ), optional :: rtol !! relative tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used real ( wp ), dimension (:), intent ( in ), optional :: atol !! absolute tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used type ( stepsize_class ), intent ( in ), optional :: stepsize_method !! method for varying the step size integer , intent ( in ), optional :: hinit_method !! which method (1 or 2) to use for !! automatic initial step size !! computation. !! 1 = use `hstart`, 2 = use `hinit`. procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. real ( wp ), parameter :: default_tol = 100 * epsilon ( 1.0_wp ) !! if tols not specified ! base init: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) ! variable-step specific inputs: if ( allocated ( me % rtol )) deallocate ( me % rtol ) if ( allocated ( me % atol )) deallocate ( me % atol ) allocate ( me % rtol ( n )) allocate ( me % atol ( n )) if ( present ( rtol )) then if ( size ( rtol ) == 1 ) then me % rtol = abs ( rtol ( 1 )) !use this for all equations else if ( size ( rtol ) == n ) then me % rtol = abs ( rtol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_RTOL_SIZE ) end if else me % rtol = default_tol end if if ( present ( atol )) then if ( size ( atol ) == 1 ) then me % atol = abs ( atol ( 1 )) !use this for all equations else if ( size ( atol ) == n ) then me % atol = abs ( atol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_ATOL_SIZE ) end if else me % atol = default_tol end if if ( present ( hinit_method )) then if ( any ( hinit_method == [ 1 , 2 ])) then me % hinit_method = hinit_method else call me % raise_exception ( RKLIB_ERROR_INVALID_HINIT_METHOD ) return end if end if if ( present ( stepsize_method )) me % stepsize_method = stepsize_method ! reset internal variables: me % num_rejected_steps = 0 me % last_accepted_step_size = zero end subroutine initialize_variable_step","tags":"","loc":"proc/initialize_variable_step.html"},{"title":"info_variable_step – rklib","text":"private subroutine info_variable_step(me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) Contents Source Code info_variable_step Source Code subroutine info_variable_step ( me , num_steps , num_rejected_steps , last_accepted_step_size ) implicit none class ( rk_variable_step_class ), intent ( in ) :: me integer , intent ( out ), optional :: num_steps !! number of steps taken integer , intent ( out ), optional :: num_rejected_steps !! number of rejected steps real ( wp ), intent ( out ), optional :: last_accepted_step_size !! the last accepted step size !! `dt` from the integration !! (positive or negative) if ( present ( num_steps )) num_steps = me % num_steps if ( present ( num_rejected_steps )) num_rejected_steps = me % num_rejected_steps if ( present ( last_accepted_step_size )) last_accepted_step_size = me % last_accepted_step_size end subroutine info_variable_step","tags":"","loc":"proc/info_variable_step.html"},{"title":"integrate_variable_step – rklib","text":"private subroutine integrate_variable_step(me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state Calls proc~~integrate_variable_step~~CallsGraph proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step begin_integration begin_integration proc~integrate_variable_step->begin_integration proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_variable_step->proc~compute_initial_step proc~export_point rklib_module::rk_class%export_point proc~integrate_variable_step->proc~export_point proc~order rklib_module::rk_variable_step_class%order proc~integrate_variable_step->proc~order proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_variable_step->proc~raise_exception step step proc~integrate_variable_step->step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart report report proc~export_point->report proc~hinit->proc~order proc~hinit->f proc~hstart->proc~order proc~hstart->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_variable_step Source Code subroutine integrate_variable_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! initial abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t , dt , t2 , dt_new real ( wp ), dimension ( me % n ) :: x , xerr , tol logical :: last !! it is the last step logical :: accept !! the step is accepted integer :: i !! max step size reduction attempts counter integer :: p !! order of the method if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tf ) <= zero ) then xf = x0 else t = t0 x = x0 dt = me % compute_initial_step ( t0 , tf , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) tol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , tol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tf ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tf )) ! if ( last ) dt = tf - t ! t2 = t + dt end if end do if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_variable_step","tags":"","loc":"proc/integrate_variable_step.html"},{"title":"integrate_to_event_variable_step – rklib","text":"private subroutine integrate_to_event_variable_step(me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf Calls proc~~integrate_to_event_variable_step~~CallsGraph proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step begin_integration begin_integration proc~integrate_to_event_variable_step->begin_integration g g proc~integrate_to_event_variable_step->g proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~export_point rklib_module::rk_class%export_point proc~integrate_to_event_variable_step->proc~export_point proc~order rklib_module::rk_variable_step_class%order proc~integrate_to_event_variable_step->proc~order proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_to_event_variable_step->proc~raise_exception root_scalar root_scalar proc~integrate_to_event_variable_step->root_scalar step step proc~integrate_to_event_variable_step->step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart report report proc~export_point->report proc~hinit->proc~order proc~hinit->f proc~hstart->proc~order proc~hstart->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_to_event_variable_step Source Code subroutine integrate_to_event_variable_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf real ( wp ), dimension ( me % n ) :: x , g_xf real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate real ( wp ), dimension ( me % n ) :: stol integer :: i , p , iflag real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum , dt_new logical :: first , last , accept if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t , x , ga ) !evaluate event function dt = me % compute_initial_step ( t0 , tmax , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) stol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , stol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tmax ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax else t2 = t + dt end if end if end do call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . if ( last ) exit x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate !take a step from t to t+delt and evaluate g function: ! [we don't check the error because we are within a ! step that was already accepted, so it should be ok] call me % step ( t , x , delt , g_xf , xerr ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_variable_step","tags":"","loc":"proc/integrate_to_event_variable_step.html"},{"title":"hstart – rklib","text":"private subroutine hstart(me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. It is based on an estimate of the local lipschitz constant for the\n differential equation (lower bound on a norm of the jacobian) ,\n a bound on the differential equation (first derivative), and\n a bound on the partial derivative of the equation with respect to\n the independent variable. (all approximated near the initial point a) Note Subroutine hstart also uses the me%stepsize_method%norm function for computing vector norms Note This routine is from DDEABM . History 820301 date written -- watts, h. a., (snla) 890531 changed all specific intrinsics to generic. (wrb) 890831 modified array declarations. (wrb) 890911 removed unnecessary intrinsics. (wrb) 891024 changed references from dvnorm to dhvnrm. (wrb) 891214 prologue converted to version 4.0 format. (bab) 900328 added type section. (wrb) 910722 updated author section. (als) December, 2015 : Refactored this routine (jw) April 2016 : Some modifications for the variable-step RK module (jw) Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method. Calls proc~~hstart~~CallsGraph proc~hstart rklib_module::rk_variable_step_class%hstart f f proc~hstart->f proc~order rklib_module::rk_variable_step_class%order proc~hstart->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~hstart~~CalledByGraph proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~compute_initial_step->proc~hstart proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code hstart Source Code subroutine hstart ( me , a , b , y , yprime , etol , h ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: a !! the initial point of integration. real ( wp ), intent ( in ) :: b !! a value of the independent variable used to define !! the direction of integration. a reasonable choice is to !! set `b` to the first point at which a solution is desired. !! you can also use `b`, if necessary, to restrict the length !! of the first integration step because the algorithm will !! not compute a starting step length which is bigger than !! `abs(b-a)`, unless `b` has been chosen too close to `a`. !! (it is presumed that hstart has been called with `b` !! different from `a` on the machine being used. also see the !! discussion about the parameter `small`.) real ( wp ), dimension ( me % n ), intent ( in ) :: y !! the vector of initial values of the `neq` solution !! components at the initial point `a`. real ( wp ), dimension ( me % n ), intent ( in ) :: yprime !! the vector of derivatives of the `neq` !! solution components at the initial point `a`. !! (defined by the differential equations in subroutine `me%f`) real ( wp ), dimension ( me % n ), intent ( in ) :: etol !! the vector of error tolerances corresponding to !! the `neq` solution components. it is assumed that all !! elements are positive. following the first integration !! step, the tolerances are expected to be used by the !! integrator in an error test which roughly requires that !! `abs(local error) <= etol` for each vector component. real ( wp ), intent ( out ) :: h !! appropriate starting step size to be attempted by the !! differential equation method. real ( wp ), dimension ( me % n ) :: spy !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: pv !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: yp !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: sf !! work array which provide the routine with needed storage space. real ( wp ), parameter :: small = epsilon ( 1.0_wp ) real ( wp ), parameter :: big = huge ( 1.0_wp ) real ( wp ), parameter :: relper = small ** 0.375_wp integer :: j , k , lk real ( wp ) :: absdx , da , delf , dely ,& dfdub , dfdxb ,& dx , dy , fbnd ,& srydpb , tolexp , tolmin , tolp , tolsum , ydpb integer :: morder !! the order of the formula which will be used by !! the initial value method for taking the first integration !! step. morder = me % order () dx = b - a absdx = abs ( dx ) ! compute an approximate bound (dfdxb) on the partial ! derivative of the equation with respect to the ! independent variable. protect against an overflow. ! also compute a bound (fbnd) on the first derivative ! locally. da = sign ( max ( min ( relper * abs ( a ), absdx ), 10 0.0_wp * small * abs ( a )), dx ) if ( da == zero ) da = relper * dx call me % f ( a + da , y , sf ) yp = sf - yprime delf = me % stepsize_method % norm ( yp ) dfdxb = big if ( delf < big * abs ( da )) dfdxb = delf / abs ( da ) fbnd = me % stepsize_method % norm ( sf ) ! compute an estimate (dfdub) of the local lipschitz ! constant for the system of differential equations. this ! also represents an estimate of the norm of the jacobian ! locally. three iterations (two when neq=1) are used to ! estimate the lipschitz constant by numerical differences. ! the first perturbation vector is based on the initial ! derivatives and direction of integration. the second ! perturbation vector is formed using another evaluation of ! the differential equation. the third perturbation vector ! is formed using perturbations based only on the initial ! values. components that are zero are always changed to ! non-zero values (except on the first iteration). when ! information is available, care is taken to ensure that ! components of the perturbation vector have signs which are ! consistent with the slopes of local solution curves. ! also choose the largest bound (fbnd) for the first ! derivative. ! ! perturbation vector size is held ! constant for all iterations. compute ! this change from the ! size of the vector of initial ! values. dely = relper * me % stepsize_method % norm ( y ) if ( dely == zero ) dely = relper dely = sign ( dely , dx ) delf = me % stepsize_method % norm ( yprime ) fbnd = max ( fbnd , delf ) if ( delf == zero ) then ! cannot have a null perturbation vector spy = zero yp = 1.0_wp delf = me % stepsize_method % norm ( yp ) else ! use initial derivatives for first perturbation spy = yprime yp = yprime end if dfdub = zero lk = min ( me % n + 1 , 3 ) do k = 1 , lk ! define perturbed vector of initial values pv = y + yp * ( dely / delf ) if ( k == 2 ) then ! use a shifted value of the independent variable ! in computing one estimate call me % f ( a + da , pv , yp ) pv = yp - sf else ! evaluate derivatives associated with perturbed ! vector and compute corresponding differences call me % f ( a , pv , yp ) pv = yp - yprime end if ! choose largest bounds on the first derivative ! and a local lipschitz constant fbnd = max ( fbnd , me % stepsize_method % norm ( yp )) delf = me % stepsize_method % norm ( pv ) if ( delf >= big * abs ( dely )) then ! protect against an overflow dfdub = big exit end if dfdub = max ( dfdub , delf / abs ( dely )) if ( k == lk ) exit ! choose next perturbation vector if ( delf == zero ) delf = 1.0_wp do j = 1 , me % n if ( k == 2 ) then dy = y ( j ) if ( dy == zero ) dy = dely / relper else dy = abs ( pv ( j )) if ( dy == zero ) dy = delf end if if ( spy ( j ) == zero ) spy ( j ) = yp ( j ) if ( spy ( j ) /= zero ) dy = sign ( dy , spy ( j )) yp ( j ) = dy end do delf = me % stepsize_method % norm ( yp ) end do ! compute a bound (ydpb) on the norm of the second derivative ydpb = dfdxb + dfdub * fbnd ! define the tolerance parameter upon which the starting step ! size is to be based. a value in the middle of the error ! tolerance range is selected. tolmin = big tolsum = zero do k = 1 , me % n tolexp = log10 ( etol ( k )) tolmin = min ( tolmin , tolexp ) tolsum = tolsum + tolexp end do tolp = 1 0.0_wp ** ( 0.5_wp * ( tolsum / me % n + tolmin ) / ( morder + 1 )) ! compute a starting step size based on the above first and ! second derivative information ! ! restrict the step length to be not bigger ! than abs(b-a). (unless b is too close to a) h = absdx if ( ydpb == zero . and . fbnd == zero ) then ! both first derivative term (fbnd) and second ! derivative term (ydpb) are zero if ( tolp < 1.0_wp ) h = absdx * tolp elseif ( ydpb == zero ) then ! only second derivative term (ydpb) is zero if ( tolp < fbnd * absdx ) h = tolp / fbnd else ! second derivative term (ydpb) is non-zero srydpb = sqrt ( 0.5_wp * ydpb ) if ( tolp < srydpb * absdx ) h = tolp / srydpb end if ! further restrict the step length to be not bigger than 1/dfdub if ( h * dfdub > 1.0_wp ) h = 1.0_wp / dfdub ! finally, restrict the step length to be not ! smaller than 100*small*abs(a). however, if ! a=0. and the computed h underflowed to zero, ! the algorithm returns small*abs(b) for the step length. h = max ( h , 10 0.0_wp * small * abs ( a )) if ( h == zero ) h = small * abs ( b ) ! now set direction of integration h = sign ( h , dx ) end subroutine hstart","tags":"","loc":"proc/hstart.html"},{"title":"euler_properties – rklib","text":"interface Calls interface~~euler_properties~~CallsGraph interface~euler_properties rklib_module::euler_class%euler_properties proc~euler_properties rklib_fixed_properties::euler_properties interface~euler_properties->proc~euler_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/euler_properties.html"},{"title":"midpoint_properties – rklib","text":"interface Calls interface~~midpoint_properties~~CallsGraph interface~midpoint_properties rklib_module::midpoint_class%midpoint_properties proc~midpoint_properties rklib_fixed_properties::midpoint_properties interface~midpoint_properties->proc~midpoint_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/midpoint_properties.html"},{"title":"heun_properties – rklib","text":"interface Calls interface~~heun_properties~~CallsGraph interface~heun_properties rklib_module::heun_class%heun_properties proc~heun_properties rklib_fixed_properties::heun_properties interface~heun_properties->proc~heun_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/heun_properties.html"},{"title":"rkssp22_properties – rklib","text":"interface Calls interface~~rkssp22_properties~~CallsGraph interface~rkssp22_properties rklib_module::rkssp22_class%rkssp22_properties proc~rkssp22_properties rklib_fixed_properties::rkssp22_properties interface~rkssp22_properties->proc~rkssp22_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp22_properties.html"},{"title":"rk3_properties – rklib","text":"interface Calls interface~~rk3_properties~~CallsGraph interface~rk3_properties rklib_module::rk3_class%rk3_properties proc~rk3_properties rklib_fixed_properties::rk3_properties interface~rk3_properties->proc~rk3_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk3_properties.html"},{"title":"rkssp33_properties – rklib","text":"interface Calls interface~~rkssp33_properties~~CallsGraph interface~rkssp33_properties rklib_module::rkssp33_class%rkssp33_properties proc~rkssp33_properties rklib_fixed_properties::rkssp33_properties interface~rkssp33_properties->proc~rkssp33_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp33_properties.html"},{"title":"rkssp53_properties – rklib","text":"interface Calls interface~~rkssp53_properties~~CallsGraph interface~rkssp53_properties rklib_module::rkssp53_class%rkssp53_properties proc~rkssp53_properties rklib_fixed_properties::rkssp53_properties interface~rkssp53_properties->proc~rkssp53_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp53_properties.html"},{"title":"rk4_properties – rklib","text":"interface Calls interface~~rk4_properties~~CallsGraph interface~rk4_properties rklib_module::rk4_class%rk4_properties proc~rk4_properties rklib_fixed_properties::rk4_properties interface~rk4_properties->proc~rk4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk4_properties.html"},{"title":"rks4_properties – rklib","text":"interface Calls interface~~rks4_properties~~CallsGraph interface~rks4_properties rklib_module::rks4_class%rks4_properties proc~rks4_properties rklib_fixed_properties::rks4_properties interface~rks4_properties->proc~rks4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks4_properties.html"},{"title":"rkr4_properties – rklib","text":"interface Calls interface~~rkr4_properties~~CallsGraph interface~rkr4_properties rklib_module::rkr4_class%rkr4_properties proc~rkr4_properties rklib_fixed_properties::rkr4_properties interface~rkr4_properties->proc~rkr4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkr4_properties.html"},{"title":"rkls44_properties – rklib","text":"interface Calls interface~~rkls44_properties~~CallsGraph interface~rkls44_properties rklib_module::rkls44_class%rkls44_properties proc~rkls44_properties rklib_fixed_properties::rkls44_properties interface~rkls44_properties->proc~rkls44_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkls44_properties.html"},{"title":"rkls54_properties – rklib","text":"interface Calls interface~~rkls54_properties~~CallsGraph interface~rkls54_properties rklib_module::rkls54_class%rkls54_properties proc~rkls54_properties rklib_fixed_properties::rkls54_properties interface~rkls54_properties->proc~rkls54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkls54_properties.html"},{"title":"rkssp54_properties – rklib","text":"interface Calls interface~~rkssp54_properties~~CallsGraph interface~rkssp54_properties rklib_module::rkssp54_class%rkssp54_properties proc~rkssp54_properties rklib_fixed_properties::rkssp54_properties interface~rkssp54_properties->proc~rkssp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp54_properties.html"},{"title":"rks5_properties – rklib","text":"interface Calls interface~~rks5_properties~~CallsGraph interface~rks5_properties rklib_module::rks5_class%rks5_properties proc~rks5_properties rklib_fixed_properties::rks5_properties interface~rks5_properties->proc~rks5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks5_properties.html"},{"title":"rk5_properties – rklib","text":"interface Calls interface~~rk5_properties~~CallsGraph interface~rk5_properties rklib_module::rk5_class%rk5_properties proc~rk5_properties rklib_fixed_properties::rk5_properties interface~rk5_properties->proc~rk5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk5_properties.html"},{"title":"rkc5_properties – rklib","text":"interface Calls interface~~rkc5_properties~~CallsGraph interface~rkc5_properties rklib_module::rkc5_class%rkc5_properties proc~rkc5_properties rklib_fixed_properties::rkc5_properties interface~rkc5_properties->proc~rkc5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc5_properties.html"},{"title":"rkl5_properties – rklib","text":"interface Calls interface~~rkl5_properties~~CallsGraph interface~rkl5_properties rklib_module::rkl5_class%rkl5_properties proc~rkl5_properties rklib_fixed_properties::rkl5_properties interface~rkl5_properties->proc~rkl5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkl5_properties.html"},{"title":"rklk5a_properties – rklib","text":"interface Calls interface~~rklk5a_properties~~CallsGraph interface~rklk5a_properties rklib_module::rklk5a_class%rklk5a_properties proc~rklk5a_properties rklib_fixed_properties::rklk5a_properties interface~rklk5a_properties->proc~rklk5a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rklk5a_properties.html"},{"title":"rklk5b_properties – rklib","text":"interface Calls interface~~rklk5b_properties~~CallsGraph interface~rklk5b_properties rklib_module::rklk5b_class%rklk5b_properties proc~rklk5b_properties rklib_fixed_properties::rklk5b_properties interface~rklk5b_properties->proc~rklk5b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rklk5b_properties.html"},{"title":"rkb6_properties – rklib","text":"interface Calls interface~~rkb6_properties~~CallsGraph interface~rkb6_properties rklib_module::rkb6_class%rkb6_properties proc~rkb6_properties rklib_fixed_properties::rkb6_properties interface~rkb6_properties->proc~rkb6_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkb6_properties.html"},{"title":"rk7_properties – rklib","text":"interface Calls interface~~rk7_properties~~CallsGraph interface~rk7_properties rklib_module::rk7_class%rk7_properties proc~rk7_properties rklib_fixed_properties::rk7_properties interface~rk7_properties->proc~rk7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk7_properties.html"},{"title":"rk8_10_properties – rklib","text":"interface Calls interface~~rk8_10_properties~~CallsGraph interface~rk8_10_properties rklib_module::rk8_10_class%rk8_10_properties proc~rk8_10_properties rklib_fixed_properties::rk8_10_properties interface~rk8_10_properties->proc~rk8_10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk8_10_properties.html"},{"title":"rkcv8_properties – rklib","text":"interface Calls interface~~rkcv8_properties~~CallsGraph interface~rkcv8_properties rklib_module::rkcv8_class%rkcv8_properties proc~rkcv8_properties rklib_fixed_properties::rkcv8_properties interface~rkcv8_properties->proc~rkcv8_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkcv8_properties.html"},{"title":"rk8_12_properties – rklib","text":"interface Calls interface~~rk8_12_properties~~CallsGraph interface~rk8_12_properties rklib_module::rk8_12_class%rk8_12_properties proc~rk8_12_properties rklib_fixed_properties::rk8_12_properties interface~rk8_12_properties->proc~rk8_12_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk8_12_properties.html"},{"title":"rkz10_properties – rklib","text":"interface Calls interface~~rkz10_properties~~CallsGraph interface~rkz10_properties rklib_module::rkz10_class%rkz10_properties proc~rkz10_properties rklib_fixed_properties::rkz10_properties interface~rkz10_properties->proc~rkz10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkz10_properties.html"},{"title":"rko10_properties – rklib","text":"interface Calls interface~~rko10_properties~~CallsGraph interface~rko10_properties rklib_module::rko10_class%rko10_properties proc~rko10_properties rklib_fixed_properties::rko10_properties interface~rko10_properties->proc~rko10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rko10_properties.html"},{"title":"rkh10_properties – rklib","text":"interface Calls interface~~rkh10_properties~~CallsGraph interface~rkh10_properties rklib_module::rkh10_class%rkh10_properties proc~rkh10_properties rklib_fixed_properties::rkh10_properties interface~rkh10_properties->proc~rkh10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkh10_properties.html"},{"title":"rkbs32_properties – rklib","text":"interface Calls interface~~rkbs32_properties~~CallsGraph interface~rkbs32_properties rklib_module::rkbs32_class%rkbs32_properties proc~rkbs32_properties rklib_variable_properties::rkbs32_properties interface~rkbs32_properties->proc~rkbs32_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkbs32_properties.html"},{"title":"rkssp43_properties – rklib","text":"interface Calls interface~~rkssp43_properties~~CallsGraph interface~rkssp43_properties rklib_module::rkssp43_class%rkssp43_properties proc~rkssp43_properties rklib_variable_properties::rkssp43_properties interface~rkssp43_properties->proc~rkssp43_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp43_properties.html"},{"title":"rkf45_properties – rklib","text":"interface Calls interface~~rkf45_properties~~CallsGraph interface~rkf45_properties rklib_module::rkf45_class%rkf45_properties proc~rkf45_properties rklib_variable_properties::rkf45_properties interface~rkf45_properties->proc~rkf45_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf45_properties.html"},{"title":"rkck54_properties – rklib","text":"interface Calls interface~~rkck54_properties~~CallsGraph interface~rkck54_properties rklib_module::rkck54_class%rkck54_properties proc~rkck54_properties rklib_variable_properties::rkck54_properties interface~rkck54_properties->proc~rkck54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkck54_properties.html"},{"title":"rkdp54_properties – rklib","text":"interface Calls interface~~rkdp54_properties~~CallsGraph interface~rkdp54_properties rklib_module::rkdp54_class%rkdp54_properties proc~rkdp54_properties rklib_variable_properties::rkdp54_properties interface~rkdp54_properties->proc~rkdp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp54_properties.html"},{"title":"rkt54_properties – rklib","text":"interface Calls interface~~rkt54_properties~~CallsGraph interface~rkt54_properties rklib_module::rkt54_class%rkt54_properties proc~rkt54_properties rklib_variable_properties::rkt54_properties interface~rkt54_properties->proc~rkt54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkt54_properties.html"},{"title":"rks54_properties – rklib","text":"interface Calls interface~~rks54_properties~~CallsGraph interface~rks54_properties rklib_module::rks54_class%rks54_properties proc~rks54_properties rklib_variable_properties::rks54_properties interface~rks54_properties->proc~rks54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks54_properties.html"},{"title":"rkpp54_properties – rklib","text":"interface Calls interface~~rkpp54_properties~~CallsGraph interface~rkpp54_properties rklib_module::rkpp54_class%rkpp54_properties proc~rkpp54_properties rklib_variable_properties::rkpp54_properties interface~rkpp54_properties->proc~rkpp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkpp54_properties.html"},{"title":"rkpp54b_properties – rklib","text":"interface Calls interface~~rkpp54b_properties~~CallsGraph interface~rkpp54b_properties rklib_module::rkpp54b_class%rkpp54b_properties proc~rkpp54b_properties rklib_variable_properties::rkpp54b_properties interface~rkpp54b_properties->proc~rkpp54b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkpp54b_properties.html"},{"title":"rkbs54_properties – rklib","text":"interface Calls interface~~rkbs54_properties~~CallsGraph interface~rkbs54_properties rklib_module::rkbs54_class%rkbs54_properties proc~rkbs54_properties rklib_variable_properties::rkbs54_properties interface~rkbs54_properties->proc~rkbs54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkbs54_properties.html"},{"title":"rkss54_properties – rklib","text":"interface Calls interface~~rkss54_properties~~CallsGraph interface~rkss54_properties rklib_module::rkss54_class%rkss54_properties proc~rkss54_properties rklib_variable_properties::rkss54_properties interface~rkss54_properties->proc~rkss54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkss54_properties.html"},{"title":"rkdp65_properties – rklib","text":"interface Calls interface~~rkdp65_properties~~CallsGraph interface~rkdp65_properties rklib_module::rkdp65_class%rkdp65_properties proc~rkdp65_properties rklib_variable_properties::rkdp65_properties interface~rkdp65_properties->proc~rkdp65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp65_properties.html"},{"title":"rkc65_properties – rklib","text":"interface Calls interface~~rkc65_properties~~CallsGraph interface~rkc65_properties rklib_module::rkc65_class%rkc65_properties proc~rkc65_properties rklib_variable_properties::rkc65_properties interface~rkc65_properties->proc~rkc65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc65_properties.html"},{"title":"rktp64_properties – rklib","text":"interface Calls interface~~rktp64_properties~~CallsGraph interface~rktp64_properties rklib_module::rktp64_class%rktp64_properties proc~rktp64_properties rklib_variable_properties::rktp64_properties interface~rktp64_properties->proc~rktp64_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp64_properties.html"},{"title":"rkv65e_properties – rklib","text":"interface Calls interface~~rkv65e_properties~~CallsGraph interface~rkv65e_properties rklib_module::rkv65e_class%rkv65e_properties proc~rkv65e_properties rklib_variable_properties::rkv65e_properties interface~rkv65e_properties->proc~rkv65e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65e_properties.html"},{"title":"rkv65r_properties – rklib","text":"interface Calls interface~~rkv65r_properties~~CallsGraph interface~rkv65r_properties rklib_module::rkv65r_class%rkv65r_properties proc~rkv65r_properties rklib_variable_properties::rkv65r_properties interface~rkv65r_properties->proc~rkv65r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65r_properties.html"},{"title":"rkv65_properties – rklib","text":"interface Calls interface~~rkv65_properties~~CallsGraph interface~rkv65_properties rklib_module::rkv65_class%rkv65_properties proc~rkv65_properties rklib_variable_properties::rkv65_properties interface~rkv65_properties->proc~rkv65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65_properties.html"},{"title":"dverk65_properties – rklib","text":"interface Calls interface~~dverk65_properties~~CallsGraph interface~dverk65_properties rklib_module::dverk65_class%dverk65_properties proc~dverk65_properties rklib_variable_properties::dverk65_properties interface~dverk65_properties->proc~dverk65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/dverk65_properties.html"},{"title":"rktf65_properties – rklib","text":"interface Calls interface~~rktf65_properties~~CallsGraph interface~rktf65_properties rklib_module::rktf65_class%rktf65_properties proc~rktf65_properties rklib_variable_properties::rktf65_properties interface~rktf65_properties->proc~rktf65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktf65_properties.html"},{"title":"rktp75_properties – rklib","text":"interface Calls interface~~rktp75_properties~~CallsGraph interface~rktp75_properties rklib_module::rktp75_class%rktp75_properties proc~rktp75_properties rklib_variable_properties::rktp75_properties interface~rktp75_properties->proc~rktp75_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp75_properties.html"},{"title":"rktmy7_properties – rklib","text":"interface Calls interface~~rktmy7_properties~~CallsGraph interface~rktmy7_properties rklib_module::rktmy7_class%rktmy7_properties proc~rktmy7_properties rklib_variable_properties::rktmy7_properties interface~rktmy7_properties->proc~rktmy7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktmy7_properties.html"},{"title":"rktmy7s_properties – rklib","text":"interface Calls interface~~rktmy7s_properties~~CallsGraph interface~rktmy7s_properties rklib_module::rktmy7s_class%rktmy7s_properties proc~rktmy7s_properties rklib_variable_properties::rktmy7s_properties interface~rktmy7s_properties->proc~rktmy7s_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktmy7s_properties.html"},{"title":"rkv76e_properties – rklib","text":"interface Calls interface~~rkv76e_properties~~CallsGraph interface~rkv76e_properties rklib_module::rkv76e_class%rkv76e_properties proc~rkv76e_properties rklib_variable_properties::rkv76e_properties interface~rkv76e_properties->proc~rkv76e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv76e_properties.html"},{"title":"rkv76r_properties – rklib","text":"interface Calls interface~~rkv76r_properties~~CallsGraph interface~rkv76r_properties rklib_module::rkv76r_class%rkv76r_properties proc~rkv76r_properties rklib_variable_properties::rkv76r_properties interface~rkv76r_properties->proc~rkv76r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv76r_properties.html"},{"title":"rkss76_properties – rklib","text":"interface Calls interface~~rkss76_properties~~CallsGraph interface~rkss76_properties rklib_module::rkss76_class%rkss76_properties proc~rkss76_properties rklib_variable_properties::rkss76_properties interface~rkss76_properties->proc~rkss76_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkss76_properties.html"},{"title":"rkf78_properties – rklib","text":"interface Calls interface~~rkf78_properties~~CallsGraph interface~rkf78_properties rklib_module::rkf78_class%rkf78_properties proc~rkf78_properties rklib_variable_properties::rkf78_properties interface~rkf78_properties->proc~rkf78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf78_properties.html"},{"title":"rkv78_properties – rklib","text":"interface Calls interface~~rkv78_properties~~CallsGraph interface~rkv78_properties rklib_module::rkv78_class%rkv78_properties proc~rkv78_properties rklib_variable_properties::rkv78_properties interface~rkv78_properties->proc~rkv78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv78_properties.html"},{"title":"dverk78_properties – rklib","text":"interface Calls interface~~dverk78_properties~~CallsGraph interface~dverk78_properties rklib_module::dverk78_class%dverk78_properties proc~dverk78_properties rklib_variable_properties::dverk78_properties interface~dverk78_properties->proc~dverk78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/dverk78_properties.html"},{"title":"rkdp85_properties – rklib","text":"interface Calls interface~~rkdp85_properties~~CallsGraph interface~rkdp85_properties rklib_module::rkdp85_class%rkdp85_properties proc~rkdp85_properties rklib_variable_properties::rkdp85_properties interface~rkdp85_properties->proc~rkdp85_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp85_properties.html"},{"title":"rktp86_properties – rklib","text":"interface Calls interface~~rktp86_properties~~CallsGraph interface~rktp86_properties rklib_module::rktp86_class%rktp86_properties proc~rktp86_properties rklib_variable_properties::rktp86_properties interface~rktp86_properties->proc~rktp86_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp86_properties.html"},{"title":"rkdp87_properties – rklib","text":"interface Calls interface~~rkdp87_properties~~CallsGraph interface~rkdp87_properties rklib_module::rkdp87_class%rkdp87_properties proc~rkdp87_properties rklib_variable_properties::rkdp87_properties interface~rkdp87_properties->proc~rkdp87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp87_properties.html"},{"title":"rkv87e_properties – rklib","text":"interface Calls interface~~rkv87e_properties~~CallsGraph interface~rkv87e_properties rklib_module::rkv87e_class%rkv87e_properties proc~rkv87e_properties rklib_variable_properties::rkv87e_properties interface~rkv87e_properties->proc~rkv87e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv87e_properties.html"},{"title":"rkv87r_properties – rklib","text":"interface Calls interface~~rkv87r_properties~~CallsGraph interface~rkv87r_properties rklib_module::rkv87r_class%rkv87r_properties proc~rkv87r_properties rklib_variable_properties::rkv87r_properties interface~rkv87r_properties->proc~rkv87r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv87r_properties.html"},{"title":"rkev87_properties – rklib","text":"interface Calls interface~~rkev87_properties~~CallsGraph interface~rkev87_properties rklib_module::rkev87_class%rkev87_properties proc~rkev87_properties rklib_variable_properties::rkev87_properties interface~rkev87_properties->proc~rkev87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkev87_properties.html"},{"title":"rkk87_properties – rklib","text":"interface Calls interface~~rkk87_properties~~CallsGraph interface~rkk87_properties rklib_module::rkk87_class%rkk87_properties proc~rkk87_properties rklib_variable_properties::rkk87_properties interface~rkk87_properties->proc~rkk87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkk87_properties.html"},{"title":"rkf89_properties – rklib","text":"interface Calls interface~~rkf89_properties~~CallsGraph interface~rkf89_properties rklib_module::rkf89_class%rkf89_properties proc~rkf89_properties rklib_variable_properties::rkf89_properties interface~rkf89_properties->proc~rkf89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf89_properties.html"},{"title":"rkv89_properties – rklib","text":"interface Calls interface~~rkv89_properties~~CallsGraph interface~rkv89_properties rklib_module::rkv89_class%rkv89_properties proc~rkv89_properties rklib_variable_properties::rkv89_properties interface~rkv89_properties->proc~rkv89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv89_properties.html"},{"title":"rkt98a_properties – rklib","text":"interface Calls interface~~rkt98a_properties~~CallsGraph interface~rkt98a_properties rklib_module::rkt98a_class%rkt98a_properties proc~rkt98a_properties rklib_variable_properties::rkt98a_properties interface~rkt98a_properties->proc~rkt98a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkt98a_properties.html"},{"title":"rkv98e_properties – rklib","text":"interface Calls interface~~rkv98e_properties~~CallsGraph interface~rkv98e_properties rklib_module::rkv98e_class%rkv98e_properties proc~rkv98e_properties rklib_variable_properties::rkv98e_properties interface~rkv98e_properties->proc~rkv98e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv98e_properties.html"},{"title":"rkv98r_properties – rklib","text":"interface Calls interface~~rkv98r_properties~~CallsGraph interface~rkv98r_properties rklib_module::rkv98r_class%rkv98r_properties proc~rkv98r_properties rklib_variable_properties::rkv98r_properties interface~rkv98r_properties->proc~rkv98r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv98r_properties.html"},{"title":"rks98_properties – rklib","text":"interface Calls interface~~rks98_properties~~CallsGraph interface~rks98_properties rklib_module::rks98_class%rks98_properties proc~rks98_properties rklib_variable_properties::rks98_properties interface~rks98_properties->proc~rks98_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks98_properties.html"},{"title":"rkf108_properties – rklib","text":"interface Calls interface~~rkf108_properties~~CallsGraph interface~rkf108_properties rklib_module::rkf108_class%rkf108_properties proc~rkf108_properties rklib_variable_properties::rkf108_properties interface~rkf108_properties->proc~rkf108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf108_properties.html"},{"title":"rkc108_properties – rklib","text":"interface Calls interface~~rkc108_properties~~CallsGraph interface~rkc108_properties rklib_module::rkc108_class%rkc108_properties proc~rkc108_properties rklib_variable_properties::rkc108_properties interface~rkc108_properties->proc~rkc108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc108_properties.html"},{"title":"rkb109_properties – rklib","text":"interface Calls interface~~rkb109_properties~~CallsGraph interface~rkb109_properties rklib_module::rkb109_class%rkb109_properties proc~rkb109_properties rklib_variable_properties::rkb109_properties interface~rkb109_properties->proc~rkb109_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkb109_properties.html"},{"title":"rks1110a_properties – rklib","text":"interface Calls interface~~rks1110a_properties~~CallsGraph interface~rks1110a_properties rklib_module::rks1110a_class%rks1110a_properties proc~rks1110a_properties rklib_variable_properties::rks1110a_properties interface~rks1110a_properties->proc~rks1110a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks1110a_properties.html"},{"title":"rkf1210_properties – rklib","text":"interface Calls interface~~rkf1210_properties~~CallsGraph interface~rkf1210_properties rklib_module::rkf1210_class%rkf1210_properties proc~rkf1210_properties rklib_variable_properties::rkf1210_properties interface~rkf1210_properties->proc~rkf1210_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf1210_properties.html"},{"title":"rko129_properties – rklib","text":"interface Calls interface~~rko129_properties~~CallsGraph interface~rko129_properties rklib_module::rko129_class%rko129_properties proc~rko129_properties rklib_variable_properties::rko129_properties interface~rko129_properties->proc~rko129_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rko129_properties.html"},{"title":"rkf1412_properties – rklib","text":"interface Calls interface~~rkf1412_properties~~CallsGraph interface~rkf1412_properties rklib_module::rkf1412_class%rkf1412_properties proc~rkf1412_properties rklib_variable_properties::rkf1412_properties interface~rkf1412_properties->proc~rkf1412_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf1412_properties.html"},{"title":"euler – rklib","text":"interface Calls interface~~euler~~CallsGraph interface~euler rklib_module::euler_class%euler proc~euler rklib_fixed_steps::euler interface~euler->proc~euler f f proc~euler->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/euler.html"},{"title":"midpoint – rklib","text":"interface Calls interface~~midpoint~~CallsGraph interface~midpoint rklib_module::midpoint_class%midpoint proc~midpoint rklib_fixed_steps::midpoint interface~midpoint->proc~midpoint f f proc~midpoint->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/midpoint.html"},{"title":"heun – rklib","text":"interface Calls interface~~heun~~CallsGraph interface~heun rklib_module::heun_class%heun proc~heun rklib_fixed_steps::heun interface~heun->proc~heun f f proc~heun->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/heun.html"},{"title":"rkssp22 – rklib","text":"interface Calls interface~~rkssp22~~CallsGraph interface~rkssp22 rklib_module::rkssp22_class%rkssp22 proc~rkssp22 rklib_fixed_steps::rkssp22 interface~rkssp22->proc~rkssp22 f f proc~rkssp22->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp22.html"},{"title":"rk3 – rklib","text":"interface Calls interface~~rk3~~CallsGraph interface~rk3 rklib_module::rk3_class%rk3 proc~rk3 rklib_fixed_steps::rk3 interface~rk3->proc~rk3 f f proc~rk3->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk3.html"},{"title":"rkssp33 – rklib","text":"interface Calls interface~~rkssp33~~CallsGraph interface~rkssp33 rklib_module::rkssp33_class%rkssp33 proc~rkssp33 rklib_fixed_steps::rkssp33 interface~rkssp33->proc~rkssp33 f f proc~rkssp33->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp33.html"},{"title":"rkssp53 – rklib","text":"interface Calls interface~~rkssp53~~CallsGraph interface~rkssp53 rklib_module::rkssp53_class%rkssp53 proc~rkssp53 rklib_fixed_steps::rkssp53 interface~rkssp53->proc~rkssp53 f f proc~rkssp53->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp53.html"},{"title":"rk4 – rklib","text":"interface Calls interface~~rk4~~CallsGraph interface~rk4 rklib_module::rk4_class%rk4 proc~rk4 rklib_fixed_steps::rk4 interface~rk4->proc~rk4 f f proc~rk4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk4.html"},{"title":"rks4 – rklib","text":"interface Calls interface~~rks4~~CallsGraph interface~rks4 rklib_module::rks4_class%rks4 proc~rks4 rklib_fixed_steps::rks4 interface~rks4->proc~rks4 f f proc~rks4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rks4.html"},{"title":"rkr4 – rklib","text":"interface Calls interface~~rkr4~~CallsGraph interface~rkr4 rklib_module::rkr4_class%rkr4 proc~rkr4 rklib_fixed_steps::rkr4 interface~rkr4->proc~rkr4 f f proc~rkr4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkr4.html"},{"title":"rkls44 – rklib","text":"interface Calls interface~~rkls44~~CallsGraph interface~rkls44 rklib_module::rkls44_class%rkls44 proc~rkls44 rklib_fixed_steps::rkls44 interface~rkls44->proc~rkls44 f f proc~rkls44->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkls44.html"},{"title":"rkls54 – rklib","text":"interface Calls interface~~rkls54~~CallsGraph interface~rkls54 rklib_module::rkls54_class%rkls54 proc~rkls54 rklib_fixed_steps::rkls54 interface~rkls54->proc~rkls54 f f proc~rkls54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkls54.html"},{"title":"rkssp54 – rklib","text":"interface Calls interface~~rkssp54~~CallsGraph interface~rkssp54 rklib_module::rkssp54_class%rkssp54 proc~rkssp54 rklib_fixed_steps::rkssp54 interface~rkssp54->proc~rkssp54 f f proc~rkssp54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp54.html"},{"title":"rks5 – rklib","text":"interface Calls interface~~rks5~~CallsGraph interface~rks5 rklib_module::rks5_class%rks5 proc~rks5 rklib_fixed_steps::rks5 interface~rks5->proc~rks5 f f proc~rks5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rks5.html"},{"title":"rk5 – rklib","text":"interface Calls interface~~rk5~~CallsGraph interface~rk5 rklib_module::rk5_class%rk5 proc~rk5 rklib_fixed_steps::rk5 interface~rk5->proc~rk5 f f proc~rk5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk5.html"},{"title":"rkc5 – rklib","text":"interface Calls interface~~rkc5~~CallsGraph interface~rkc5 rklib_module::rkc5_class%rkc5 proc~rkc5 rklib_fixed_steps::rkc5 interface~rkc5->proc~rkc5 f f proc~rkc5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkc5.html"},{"title":"rkl5 – rklib","text":"interface Calls interface~~rkl5~~CallsGraph interface~rkl5 rklib_module::rkl5_class%rkl5 proc~rkl5 rklib_fixed_steps::rkl5 interface~rkl5->proc~rkl5 f f proc~rkl5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkl5.html"},{"title":"rklk5a – rklib","text":"interface Calls interface~~rklk5a~~CallsGraph interface~rklk5a rklib_module::rklk5a_class%rklk5a proc~rklk5a rklib_fixed_steps::rklk5a interface~rklk5a->proc~rklk5a f f proc~rklk5a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rklk5a.html"},{"title":"rklk5b – rklib","text":"interface Calls interface~~rklk5b~~CallsGraph interface~rklk5b rklib_module::rklk5b_class%rklk5b proc~rklk5b rklib_fixed_steps::rklk5b interface~rklk5b->proc~rklk5b f f proc~rklk5b->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rklk5b.html"},{"title":"rkb6 – rklib","text":"interface Calls interface~~rkb6~~CallsGraph interface~rkb6 rklib_module::rkb6_class%rkb6 proc~rkb6 rklib_fixed_steps::rkb6 interface~rkb6->proc~rkb6 f f proc~rkb6->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkb6.html"},{"title":"rk7 – rklib","text":"interface Calls interface~~rk7~~CallsGraph interface~rk7 rklib_module::rk7_class%rk7 proc~rk7 rklib_fixed_steps::rk7 interface~rk7->proc~rk7 f f proc~rk7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk7.html"},{"title":"rk8_10 – rklib","text":"interface Calls interface~~rk8_10~~CallsGraph interface~rk8_10 rklib_module::rk8_10_class%rk8_10 proc~rk8_10 rklib_fixed_steps::rk8_10 interface~rk8_10->proc~rk8_10 f f proc~rk8_10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk8_10.html"},{"title":"rkcv8 – rklib","text":"interface Calls interface~~rkcv8~~CallsGraph interface~rkcv8 rklib_module::rkcv8_class%rkcv8 proc~rkcv8 rklib_fixed_steps::rkcv8 interface~rkcv8->proc~rkcv8 f f proc~rkcv8->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkcv8.html"},{"title":"rk8_12 – rklib","text":"interface Calls interface~~rk8_12~~CallsGraph interface~rk8_12 rklib_module::rk8_12_class%rk8_12 proc~rk8_12 rklib_fixed_steps::rk8_12 interface~rk8_12->proc~rk8_12 f f proc~rk8_12->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk8_12.html"},{"title":"rkz10 – rklib","text":"interface Calls interface~~rkz10~~CallsGraph interface~rkz10 rklib_module::rkz10_class%rkz10 proc~rkz10 rklib_fixed_steps::rkz10 interface~rkz10->proc~rkz10 f f proc~rkz10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkz10.html"},{"title":"rko10 – rklib","text":"interface Calls interface~~rko10~~CallsGraph interface~rko10 rklib_module::rko10_class%rko10 proc~rko10 rklib_fixed_steps::rko10 interface~rko10->proc~rko10 f f proc~rko10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rko10.html"},{"title":"rkh10 – rklib","text":"interface Calls interface~~rkh10~~CallsGraph interface~rkh10 rklib_module::rkh10_class%rkh10 proc~rkh10 rklib_fixed_steps::rkh10 interface~rkh10->proc~rkh10 f f proc~rkh10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkh10.html"},{"title":"rkbs32 – rklib","text":"interface Calls interface~~rkbs32~~CallsGraph interface~rkbs32 rklib_module::rkbs32_class%rkbs32 proc~rkbs32 rklib_variable_steps::rkbs32 interface~rkbs32->proc~rkbs32 f f proc~rkbs32->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkbs32.html"},{"title":"rkssp43 – rklib","text":"interface Calls interface~~rkssp43~~CallsGraph interface~rkssp43 rklib_module::rkssp43_class%rkssp43 proc~rkssp43 rklib_variable_steps::rkssp43 interface~rkssp43->proc~rkssp43 f f proc~rkssp43->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkssp43.html"},{"title":"rkf45 – rklib","text":"interface Calls interface~~rkf45~~CallsGraph interface~rkf45 rklib_module::rkf45_class%rkf45 proc~rkf45 rklib_variable_steps::rkf45 interface~rkf45->proc~rkf45 f f proc~rkf45->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf45.html"},{"title":"rkck54 – rklib","text":"interface Calls interface~~rkck54~~CallsGraph interface~rkck54 rklib_module::rkck54_class%rkck54 proc~rkck54 rklib_variable_steps::rkck54 interface~rkck54->proc~rkck54 f f proc~rkck54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkck54.html"},{"title":"rkdp54 – rklib","text":"interface Calls interface~~rkdp54~~CallsGraph interface~rkdp54 rklib_module::rkdp54_class%rkdp54 proc~rkdp54 rklib_variable_steps::rkdp54 interface~rkdp54->proc~rkdp54 f f proc~rkdp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkdp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkdp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp54.html"},{"title":"rkt54 – rklib","text":"interface Calls interface~~rkt54~~CallsGraph interface~rkt54 rklib_module::rkt54_class%rkt54 proc~rkt54 rklib_variable_steps::rkt54 interface~rkt54->proc~rkt54 f f proc~rkt54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkt54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkt54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkt54.html"},{"title":"rks54 – rklib","text":"interface Calls interface~~rks54~~CallsGraph interface~rks54 rklib_module::rks54_class%rks54 proc~rks54 rklib_variable_steps::rks54 interface~rks54->proc~rks54 f f proc~rks54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rks54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rks54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks54.html"},{"title":"rkpp54 – rklib","text":"interface Calls interface~~rkpp54~~CallsGraph interface~rkpp54 rklib_module::rkpp54_class%rkpp54 proc~rkpp54 rklib_variable_steps::rkpp54 interface~rkpp54->proc~rkpp54 f f proc~rkpp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkpp54.html"},{"title":"rkpp54b – rklib","text":"interface Calls interface~~rkpp54b~~CallsGraph interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b proc~rkpp54b rklib_variable_steps::rkpp54b interface~rkpp54b->proc~rkpp54b f f proc~rkpp54b->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54b->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54b->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkpp54b.html"},{"title":"rkbs54 – rklib","text":"interface Calls interface~~rkbs54~~CallsGraph interface~rkbs54 rklib_module::rkbs54_class%rkbs54 proc~rkbs54 rklib_variable_steps::rkbs54 interface~rkbs54->proc~rkbs54 f f proc~rkbs54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkbs54.html"},{"title":"rkss54 – rklib","text":"interface Calls interface~~rkss54~~CallsGraph interface~rkss54 rklib_module::rkss54_class%rkss54 proc~rkss54 rklib_variable_steps::rkss54 interface~rkss54->proc~rkss54 f f proc~rkss54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkss54.html"},{"title":"rkdp65 – rklib","text":"interface Calls interface~~rkdp65~~CallsGraph interface~rkdp65 rklib_module::rkdp65_class%rkdp65 proc~rkdp65 rklib_variable_steps::rkdp65 interface~rkdp65->proc~rkdp65 f f proc~rkdp65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp65.html"},{"title":"rkc65 – rklib","text":"interface Calls interface~~rkc65~~CallsGraph interface~rkc65 rklib_module::rkc65_class%rkc65 proc~rkc65 rklib_variable_steps::rkc65 interface~rkc65->proc~rkc65 f f proc~rkc65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkc65.html"},{"title":"rktp64 – rklib","text":"interface Calls interface~~rktp64~~CallsGraph interface~rktp64 rklib_module::rktp64_class%rktp64 proc~rktp64 rklib_variable_steps::rktp64 interface~rktp64->proc~rktp64 f f proc~rktp64->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp64.html"},{"title":"rkv65e – rklib","text":"interface Calls interface~~rkv65e~~CallsGraph interface~rkv65e rklib_module::rkv65e_class%rkv65e proc~rkv65e rklib_variable_steps::rkv65e interface~rkv65e->proc~rkv65e f f proc~rkv65e->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65e->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65e->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65e.html"},{"title":"rkv65r – rklib","text":"interface Calls interface~~rkv65r~~CallsGraph interface~rkv65r rklib_module::rkv65r_class%rkv65r proc~rkv65r rklib_variable_steps::rkv65r interface~rkv65r->proc~rkv65r f f proc~rkv65r->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65r->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65r->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65r.html"},{"title":"rkv65 – rklib","text":"interface Calls interface~~rkv65~~CallsGraph interface~rkv65 rklib_module::rkv65_class%rkv65 proc~rkv65 rklib_variable_steps::rkv65 interface~rkv65->proc~rkv65 f f proc~rkv65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65.html"},{"title":"dverk65 – rklib","text":"interface Calls interface~~dverk65~~CallsGraph interface~dverk65 rklib_module::dverk65_class%dverk65 proc~dverk65 rklib_variable_steps::dverk65 interface~dverk65->proc~dverk65 f f proc~dverk65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/dverk65.html"},{"title":"rktf65 – rklib","text":"interface Calls interface~~rktf65~~CallsGraph interface~rktf65 rklib_module::rktf65_class%rktf65 proc~rktf65 rklib_variable_steps::rktf65 interface~rktf65->proc~rktf65 f f proc~rktf65->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rktf65->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rktf65->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktf65.html"},{"title":"rktp75 – rklib","text":"interface Calls interface~~rktp75~~CallsGraph interface~rktp75 rklib_module::rktp75_class%rktp75 proc~rktp75 rklib_variable_steps::rktp75 interface~rktp75->proc~rktp75 f f proc~rktp75->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp75.html"},{"title":"rktmy7 – rklib","text":"interface Calls interface~~rktmy7~~CallsGraph interface~rktmy7 rklib_module::rktmy7_class%rktmy7 proc~rktmy7 rklib_variable_steps::rktmy7 interface~rktmy7->proc~rktmy7 f f proc~rktmy7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktmy7.html"},{"title":"rktmy7s – rklib","text":"interface Calls interface~~rktmy7s~~CallsGraph interface~rktmy7s rklib_module::rktmy7s_class%rktmy7s proc~rktmy7s rklib_variable_steps::rktmy7s interface~rktmy7s->proc~rktmy7s f f proc~rktmy7s->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktmy7s.html"},{"title":"rkv76e – rklib","text":"interface Calls interface~~rkv76e~~CallsGraph interface~rkv76e rklib_module::rkv76e_class%rkv76e proc~rkv76e rklib_variable_steps::rkv76e interface~rkv76e->proc~rkv76e f f proc~rkv76e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv76e.html"},{"title":"rkv76r – rklib","text":"interface Calls interface~~rkv76r~~CallsGraph interface~rkv76r rklib_module::rkv76r_class%rkv76r proc~rkv76r rklib_variable_steps::rkv76r interface~rkv76r->proc~rkv76r f f proc~rkv76r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv76r.html"},{"title":"rkss76 – rklib","text":"interface Calls interface~~rkss76~~CallsGraph interface~rkss76 rklib_module::rkss76_class%rkss76 proc~rkss76 rklib_variable_steps::rkss76 interface~rkss76->proc~rkss76 f f proc~rkss76->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkss76.html"},{"title":"rkf78 – rklib","text":"interface Calls interface~~rkf78~~CallsGraph interface~rkf78 rklib_module::rkf78_class%rkf78 proc~rkf78 rklib_variable_steps::rkf78 interface~rkf78->proc~rkf78 f f proc~rkf78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf78.html"},{"title":"rkv78 – rklib","text":"interface Calls interface~~rkv78~~CallsGraph interface~rkv78 rklib_module::rkv78_class%rkv78 proc~rkv78 rklib_variable_steps::rkv78 interface~rkv78->proc~rkv78 f f proc~rkv78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv78.html"},{"title":"dverk78 – rklib","text":"interface Calls interface~~dverk78~~CallsGraph interface~dverk78 rklib_module::dverk78_class%dverk78 proc~dverk78 rklib_variable_steps::dverk78 interface~dverk78->proc~dverk78 f f proc~dverk78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/dverk78.html"},{"title":"rkdp85 – rklib","text":"interface Calls interface~~rkdp85~~CallsGraph interface~rkdp85 rklib_module::rkdp85_class%rkdp85 proc~rkdp85 rklib_variable_steps::rkdp85 interface~rkdp85->proc~rkdp85 f f proc~rkdp85->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp85.html"},{"title":"rktp86 – rklib","text":"interface Calls interface~~rktp86~~CallsGraph interface~rktp86 rklib_module::rktp86_class%rktp86 proc~rktp86 rklib_variable_steps::rktp86 interface~rktp86->proc~rktp86 f f proc~rktp86->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp86.html"},{"title":"rkdp87 – rklib","text":"interface Calls interface~~rkdp87~~CallsGraph interface~rkdp87 rklib_module::rkdp87_class%rkdp87 proc~rkdp87 rklib_variable_steps::rkdp87 interface~rkdp87->proc~rkdp87 f f proc~rkdp87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp87.html"},{"title":"rkv87e – rklib","text":"interface Calls interface~~rkv87e~~CallsGraph interface~rkv87e rklib_module::rkv87e_class%rkv87e proc~rkv87e rklib_variable_steps::rkv87e interface~rkv87e->proc~rkv87e f f proc~rkv87e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv87e.html"},{"title":"rkv87r – rklib","text":"interface Calls interface~~rkv87r~~CallsGraph interface~rkv87r rklib_module::rkv87r_class%rkv87r proc~rkv87r rklib_variable_steps::rkv87r interface~rkv87r->proc~rkv87r f f proc~rkv87r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv87r.html"},{"title":"rkev87 – rklib","text":"interface Calls interface~~rkev87~~CallsGraph interface~rkev87 rklib_module::rkev87_class%rkev87 proc~rkev87 rklib_variable_steps::rkev87 interface~rkev87->proc~rkev87 f f proc~rkev87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkev87.html"},{"title":"rkk87 – rklib","text":"interface Calls interface~~rkk87~~CallsGraph interface~rkk87 rklib_module::rkk87_class%rkk87 proc~rkk87 rklib_variable_steps::rkk87 interface~rkk87->proc~rkk87 f f proc~rkk87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkk87.html"},{"title":"rkf89 – rklib","text":"interface Calls interface~~rkf89~~CallsGraph interface~rkf89 rklib_module::rkf89_class%rkf89 proc~rkf89 rklib_variable_steps::rkf89 interface~rkf89->proc~rkf89 f f proc~rkf89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf89.html"},{"title":"rkv89 – rklib","text":"interface Calls interface~~rkv89~~CallsGraph interface~rkv89 rklib_module::rkv89_class%rkv89 proc~rkv89 rklib_variable_steps::rkv89 interface~rkv89->proc~rkv89 f f proc~rkv89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv89.html"},{"title":"rkt98a – rklib","text":"interface Calls interface~~rkt98a~~CallsGraph interface~rkt98a rklib_module::rkt98a_class%rkt98a proc~rkt98a rklib_variable_steps::rkt98a interface~rkt98a->proc~rkt98a f f proc~rkt98a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkt98a.html"},{"title":"rkv98e – rklib","text":"interface Calls interface~~rkv98e~~CallsGraph interface~rkv98e rklib_module::rkv98e_class%rkv98e proc~rkv98e rklib_variable_steps::rkv98e interface~rkv98e->proc~rkv98e f f proc~rkv98e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv98e.html"},{"title":"rkv98r – rklib","text":"interface Calls interface~~rkv98r~~CallsGraph interface~rkv98r rklib_module::rkv98r_class%rkv98r proc~rkv98r rklib_variable_steps::rkv98r interface~rkv98r->proc~rkv98r f f proc~rkv98r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv98r.html"},{"title":"rks98 – rklib","text":"interface Calls interface~~rks98~~CallsGraph interface~rks98 rklib_module::rks98_class%rks98 proc~rks98 rklib_variable_steps::rks98 interface~rks98->proc~rks98 f f proc~rks98->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks98.html"},{"title":"rkf108 – rklib","text":"interface Calls interface~~rkf108~~CallsGraph interface~rkf108 rklib_module::rkf108_class%rkf108 proc~rkf108 rklib_variable_steps::rkf108 interface~rkf108->proc~rkf108 f f proc~rkf108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf108.html"},{"title":"rkc108 – rklib","text":"interface Calls interface~~rkc108~~CallsGraph interface~rkc108 rklib_module::rkc108_class%rkc108 proc~rkc108 rklib_variable_steps::rkc108 interface~rkc108->proc~rkc108 f f proc~rkc108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkc108.html"},{"title":"rkb109 – rklib","text":"interface Calls interface~~rkb109~~CallsGraph interface~rkb109 rklib_module::rkb109_class%rkb109 proc~rkb109 rklib_variable_steps::rkb109 interface~rkb109->proc~rkb109 f f proc~rkb109->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkb109.html"},{"title":"rks1110a – rklib","text":"interface Calls interface~~rks1110a~~CallsGraph interface~rks1110a rklib_module::rks1110a_class%rks1110a proc~rks1110a rklib_variable_steps::rks1110a interface~rks1110a->proc~rks1110a f f proc~rks1110a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks1110a.html"},{"title":"rkf1210 – rklib","text":"interface Calls interface~~rkf1210~~CallsGraph interface~rkf1210 rklib_module::rkf1210_class%rkf1210 proc~rkf1210 rklib_variable_steps::rkf1210 interface~rkf1210->proc~rkf1210 f f proc~rkf1210->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf1210.html"},{"title":"rko129 – rklib","text":"interface Calls interface~~rko129~~CallsGraph interface~rko129 rklib_module::rko129_class%rko129 proc~rko129 rklib_variable_steps::rko129 interface~rko129->proc~rko129 f f proc~rko129->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rko129.html"},{"title":"rkf1412 – rklib","text":"interface Calls interface~~rkf1412~~CallsGraph interface~rkf1412 rklib_module::rkf1412_class%rkf1412 proc~rkf1412 rklib_variable_steps::rkf1412 interface~rkf1412->proc~rkf1412 f f proc~rkf1412->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf1412.html"},{"title":"fvpol – rklib","text":"subroutine fvpol(me, t, x, f) Right-hand side of van der Pol equation Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Contents Source Code fvpol Source Code subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol","tags":"","loc":"proc/fvpol.html"},{"title":"rkbs32_properties – rklib","text":"module procedure rkbs32_properties pure module function rkbs32_properties(me) result(p) Interface → Returns the properties of the rkbs32 method Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkbs32_properties~~CalledByGraph proc~rkbs32_properties rklib_variable_properties::rkbs32_properties interface~rkbs32_properties rklib_module::rkbs32_class%rkbs32_properties interface~rkbs32_properties->proc~rkbs32_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs32_properties.html"},{"title":"rkssp43_properties – rklib","text":"module procedure rkssp43_properties pure module function rkssp43_properties(me) result(p) Interface → Returns the properties of the rkssp43 method Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp43_properties~~CalledByGraph proc~rkssp43_properties rklib_variable_properties::rkssp43_properties interface~rkssp43_properties rklib_module::rkssp43_class%rkssp43_properties interface~rkssp43_properties->proc~rkssp43_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp43_properties.html"},{"title":"rkf45_properties – rklib","text":"module procedure rkf45_properties pure module function rkf45_properties(me) result(p) Interface → Returns the properties of the rkf45 method Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf45_properties~~CalledByGraph proc~rkf45_properties rklib_variable_properties::rkf45_properties interface~rkf45_properties rklib_module::rkf45_class%rkf45_properties interface~rkf45_properties->proc~rkf45_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf45_properties.html"},{"title":"rkck54_properties – rklib","text":"module procedure rkck54_properties pure module function rkck54_properties(me) result(p) Interface → Returns the properties of the rkck54 method Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkck54_properties~~CalledByGraph proc~rkck54_properties rklib_variable_properties::rkck54_properties interface~rkck54_properties rklib_module::rkck54_class%rkck54_properties interface~rkck54_properties->proc~rkck54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkck54_properties.html"},{"title":"rkdp54_properties – rklib","text":"module procedure rkdp54_properties pure module function rkdp54_properties(me) result(p) Interface → Returns the properties of the rkdp54 method Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp54_properties~~CalledByGraph proc~rkdp54_properties rklib_variable_properties::rkdp54_properties interface~rkdp54_properties rklib_module::rkdp54_class%rkdp54_properties interface~rkdp54_properties->proc~rkdp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp54_properties.html"},{"title":"rkt54_properties – rklib","text":"module procedure rkt54_properties pure module function rkt54_properties(me) result(p) Interface → Returns the properties of the rkt54 method Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkt54_properties~~CalledByGraph proc~rkt54_properties rklib_variable_properties::rkt54_properties interface~rkt54_properties rklib_module::rkt54_class%rkt54_properties interface~rkt54_properties->proc~rkt54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt54_properties.html"},{"title":"rks54_properties – rklib","text":"module procedure rks54_properties pure module function rks54_properties(me) result(p) Interface → Returns the properties of the rks54 method Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks54_properties~~CalledByGraph proc~rks54_properties rklib_variable_properties::rks54_properties interface~rks54_properties rklib_module::rks54_class%rks54_properties interface~rks54_properties->proc~rks54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks54_properties.html"},{"title":"rkpp54_properties – rklib","text":"module procedure rkpp54_properties pure module function rkpp54_properties(me) result(p) Interface → Returns the properties of the rkpp54 method Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkpp54_properties~~CalledByGraph proc~rkpp54_properties rklib_variable_properties::rkpp54_properties interface~rkpp54_properties rklib_module::rkpp54_class%rkpp54_properties interface~rkpp54_properties->proc~rkpp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54_properties.html"},{"title":"rkpp54b_properties – rklib","text":"module procedure rkpp54b_properties pure module function rkpp54b_properties(me) result(p) Interface → Returns the properties of the rkpp54b method Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkpp54b_properties~~CalledByGraph proc~rkpp54b_properties rklib_variable_properties::rkpp54b_properties interface~rkpp54b_properties rklib_module::rkpp54b_class%rkpp54b_properties interface~rkpp54b_properties->proc~rkpp54b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54b_properties.html"},{"title":"rkbs54_properties – rklib","text":"module procedure rkbs54_properties pure module function rkbs54_properties(me) result(p) Interface → Returns the properties of the rkbs54 method Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkbs54_properties~~CalledByGraph proc~rkbs54_properties rklib_variable_properties::rkbs54_properties interface~rkbs54_properties rklib_module::rkbs54_class%rkbs54_properties interface~rkbs54_properties->proc~rkbs54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs54_properties.html"},{"title":"rkss54_properties – rklib","text":"module procedure rkss54_properties pure module function rkss54_properties(me) result(p) Interface → Returns the properties of the rkss54 method Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkss54_properties~~CalledByGraph proc~rkss54_properties rklib_variable_properties::rkss54_properties interface~rkss54_properties rklib_module::rkss54_class%rkss54_properties interface~rkss54_properties->proc~rkss54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss54_properties.html"},{"title":"rkdp65_properties – rklib","text":"module procedure rkdp65_properties pure module function rkdp65_properties(me) result(p) Interface → Returns the properties of the rkdp65 method Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp65_properties~~CalledByGraph proc~rkdp65_properties rklib_variable_properties::rkdp65_properties interface~rkdp65_properties rklib_module::rkdp65_class%rkdp65_properties interface~rkdp65_properties->proc~rkdp65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp65_properties.html"},{"title":"rkc65_properties – rklib","text":"module procedure rkc65_properties pure module function rkc65_properties(me) result(p) Interface → Returns the properties of the rkc65 method Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc65_properties~~CalledByGraph proc~rkc65_properties rklib_variable_properties::rkc65_properties interface~rkc65_properties rklib_module::rkc65_class%rkc65_properties interface~rkc65_properties->proc~rkc65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc65_properties.html"},{"title":"rktp64_properties – rklib","text":"module procedure rktp64_properties pure module function rktp64_properties(me) result(p) Interface → Returns the properties of the rktp64 method Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp64_properties~~CalledByGraph proc~rktp64_properties rklib_variable_properties::rktp64_properties interface~rktp64_properties rklib_module::rktp64_class%rktp64_properties interface~rktp64_properties->proc~rktp64_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp64_properties.html"},{"title":"rkv65e_properties – rklib","text":"module procedure rkv65e_properties pure module function rkv65e_properties(me) result(p) Interface → Returns the properties of the rkv65e method Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65e_properties~~CalledByGraph proc~rkv65e_properties rklib_variable_properties::rkv65e_properties interface~rkv65e_properties rklib_module::rkv65e_class%rkv65e_properties interface~rkv65e_properties->proc~rkv65e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65e_properties.html"},{"title":"rkv65r_properties – rklib","text":"module procedure rkv65r_properties pure module function rkv65r_properties(me) result(p) Interface → Returns the properties of the rkv65r method Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65r_properties~~CalledByGraph proc~rkv65r_properties rklib_variable_properties::rkv65r_properties interface~rkv65r_properties rklib_module::rkv65r_class%rkv65r_properties interface~rkv65r_properties->proc~rkv65r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65r_properties.html"},{"title":"rkv65_properties – rklib","text":"module procedure rkv65_properties pure module function rkv65_properties(me) result(p) Interface → Returns the properties of the rkv65 method Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65_properties~~CalledByGraph proc~rkv65_properties rklib_variable_properties::rkv65_properties interface~rkv65_properties rklib_module::rkv65_class%rkv65_properties interface~rkv65_properties->proc~rkv65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65_properties.html"},{"title":"dverk65_properties – rklib","text":"module procedure dverk65_properties pure module function dverk65_properties(me) result(p) Interface → Returns the properties of the dverk65 method Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~dverk65_properties~~CalledByGraph proc~dverk65_properties rklib_variable_properties::dverk65_properties interface~dverk65_properties rklib_module::dverk65_class%dverk65_properties interface~dverk65_properties->proc~dverk65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk65_properties.html"},{"title":"rktf65_properties – rklib","text":"module procedure rktf65_properties pure module function rktf65_properties(me) result(p) Interface → Returns the properties of the rktf65 method Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktf65_properties~~CalledByGraph proc~rktf65_properties rklib_variable_properties::rktf65_properties interface~rktf65_properties rklib_module::rktf65_class%rktf65_properties interface~rktf65_properties->proc~rktf65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktf65_properties.html"},{"title":"rktp75_properties – rklib","text":"module procedure rktp75_properties pure module function rktp75_properties(me) result(p) Interface → Returns the properties of the rktp75 method Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp75_properties~~CalledByGraph proc~rktp75_properties rklib_variable_properties::rktp75_properties interface~rktp75_properties rklib_module::rktp75_class%rktp75_properties interface~rktp75_properties->proc~rktp75_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp75_properties.html"},{"title":"rktmy7_properties – rklib","text":"module procedure rktmy7_properties pure module function rktmy7_properties(me) result(p) Interface → Returns the properties of the rktmy7 method Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktmy7_properties~~CalledByGraph proc~rktmy7_properties rklib_variable_properties::rktmy7_properties interface~rktmy7_properties rklib_module::rktmy7_class%rktmy7_properties interface~rktmy7_properties->proc~rktmy7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7_properties.html"},{"title":"rktmy7s_properties – rklib","text":"module procedure rktmy7s_properties pure module function rktmy7s_properties(me) result(p) Interface → Returns the properties of the rktmy7s method Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktmy7s_properties~~CalledByGraph proc~rktmy7s_properties rklib_variable_properties::rktmy7s_properties interface~rktmy7s_properties rklib_module::rktmy7s_class%rktmy7s_properties interface~rktmy7s_properties->proc~rktmy7s_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7s_properties.html"},{"title":"rkv76e_properties – rklib","text":"module procedure rkv76e_properties pure module function rkv76e_properties(me) result(p) Interface → Returns the properties of the rkv76e method Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv76e_properties~~CalledByGraph proc~rkv76e_properties rklib_variable_properties::rkv76e_properties interface~rkv76e_properties rklib_module::rkv76e_class%rkv76e_properties interface~rkv76e_properties->proc~rkv76e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76e_properties.html"},{"title":"rkv76r_properties – rklib","text":"module procedure rkv76r_properties pure module function rkv76r_properties(me) result(p) Interface → Returns the properties of the rkv76r method Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv76r_properties~~CalledByGraph proc~rkv76r_properties rklib_variable_properties::rkv76r_properties interface~rkv76r_properties rklib_module::rkv76r_class%rkv76r_properties interface~rkv76r_properties->proc~rkv76r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76r_properties.html"},{"title":"rkss76_properties – rklib","text":"module procedure rkss76_properties pure module function rkss76_properties(me) result(p) Interface → Returns the properties of the rkss76 method Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkss76_properties~~CalledByGraph proc~rkss76_properties rklib_variable_properties::rkss76_properties interface~rkss76_properties rklib_module::rkss76_class%rkss76_properties interface~rkss76_properties->proc~rkss76_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss76_properties.html"},{"title":"rkf78_properties – rklib","text":"module procedure rkf78_properties pure module function rkf78_properties(me) result(p) Interface → Returns the properties of the rkf78 method Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf78_properties~~CalledByGraph proc~rkf78_properties rklib_variable_properties::rkf78_properties interface~rkf78_properties rklib_module::rkf78_class%rkf78_properties interface~rkf78_properties->proc~rkf78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf78_properties.html"},{"title":"rkv78_properties – rklib","text":"module procedure rkv78_properties pure module function rkv78_properties(me) result(p) Interface → Returns the properties of the rkv78 method Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv78_properties~~CalledByGraph proc~rkv78_properties rklib_variable_properties::rkv78_properties interface~rkv78_properties rklib_module::rkv78_class%rkv78_properties interface~rkv78_properties->proc~rkv78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv78_properties.html"},{"title":"dverk78_properties – rklib","text":"module procedure dverk78_properties pure module function dverk78_properties(me) result(p) Interface → Returns the properties of the dverk78 method Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~dverk78_properties~~CalledByGraph proc~dverk78_properties rklib_variable_properties::dverk78_properties interface~dverk78_properties rklib_module::dverk78_class%dverk78_properties interface~dverk78_properties->proc~dverk78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk78_properties.html"},{"title":"rkdp85_properties – rklib","text":"module procedure rkdp85_properties pure module function rkdp85_properties(me) result(p) Interface → Returns the properties of the rkdp85 method Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp85_properties~~CalledByGraph proc~rkdp85_properties rklib_variable_properties::rkdp85_properties interface~rkdp85_properties rklib_module::rkdp85_class%rkdp85_properties interface~rkdp85_properties->proc~rkdp85_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp85_properties.html"},{"title":"rktp86_properties – rklib","text":"module procedure rktp86_properties pure module function rktp86_properties(me) result(p) Interface → Returns the properties of the rktp86 method Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp86_properties~~CalledByGraph proc~rktp86_properties rklib_variable_properties::rktp86_properties interface~rktp86_properties rklib_module::rktp86_class%rktp86_properties interface~rktp86_properties->proc~rktp86_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp86_properties.html"},{"title":"rkdp87_properties – rklib","text":"module procedure rkdp87_properties pure module function rkdp87_properties(me) result(p) Interface → Returns the properties of the rkdp87 method Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp87_properties~~CalledByGraph proc~rkdp87_properties rklib_variable_properties::rkdp87_properties interface~rkdp87_properties rklib_module::rkdp87_class%rkdp87_properties interface~rkdp87_properties->proc~rkdp87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp87_properties.html"},{"title":"rkv87e_properties – rklib","text":"module procedure rkv87e_properties pure module function rkv87e_properties(me) result(p) Interface → Returns the properties of the rkv87e method Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv87e_properties~~CalledByGraph proc~rkv87e_properties rklib_variable_properties::rkv87e_properties interface~rkv87e_properties rklib_module::rkv87e_class%rkv87e_properties interface~rkv87e_properties->proc~rkv87e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87e_properties.html"},{"title":"rkv87r_properties – rklib","text":"module procedure rkv87r_properties pure module function rkv87r_properties(me) result(p) Interface → Returns the properties of the rkv87r method Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv87r_properties~~CalledByGraph proc~rkv87r_properties rklib_variable_properties::rkv87r_properties interface~rkv87r_properties rklib_module::rkv87r_class%rkv87r_properties interface~rkv87r_properties->proc~rkv87r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87r_properties.html"},{"title":"rkev87_properties – rklib","text":"module procedure rkev87_properties pure module function rkev87_properties(me) result(p) Interface → Returns the properties of the rkev87 method Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkev87_properties~~CalledByGraph proc~rkev87_properties rklib_variable_properties::rkev87_properties interface~rkev87_properties rklib_module::rkev87_class%rkev87_properties interface~rkev87_properties->proc~rkev87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkev87_properties.html"},{"title":"rkk87_properties – rklib","text":"module procedure rkk87_properties pure module function rkk87_properties(me) result(p) Interface → Returns the properties of the rkk87 method Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkk87_properties~~CalledByGraph proc~rkk87_properties rklib_variable_properties::rkk87_properties interface~rkk87_properties rklib_module::rkk87_class%rkk87_properties interface~rkk87_properties->proc~rkk87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkk87_properties.html"},{"title":"rkf89_properties – rklib","text":"module procedure rkf89_properties pure module function rkf89_properties(me) result(p) Interface → Returns the properties of the rkf89 method Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf89_properties~~CalledByGraph proc~rkf89_properties rklib_variable_properties::rkf89_properties interface~rkf89_properties rklib_module::rkf89_class%rkf89_properties interface~rkf89_properties->proc~rkf89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf89_properties.html"},{"title":"rkv89_properties – rklib","text":"module procedure rkv89_properties pure module function rkv89_properties(me) result(p) Interface → Returns the properties of the rkv89 method Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv89_properties~~CalledByGraph proc~rkv89_properties rklib_variable_properties::rkv89_properties interface~rkv89_properties rklib_module::rkv89_class%rkv89_properties interface~rkv89_properties->proc~rkv89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv89_properties.html"},{"title":"rkt98a_properties – rklib","text":"module procedure rkt98a_properties pure module function rkt98a_properties(me) result(p) Interface → Returns the properties of the rkt98a method Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkt98a_properties~~CalledByGraph proc~rkt98a_properties rklib_variable_properties::rkt98a_properties interface~rkt98a_properties rklib_module::rkt98a_class%rkt98a_properties interface~rkt98a_properties->proc~rkt98a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt98a_properties.html"},{"title":"rkv98e_properties – rklib","text":"module procedure rkv98e_properties pure module function rkv98e_properties(me) result(p) Interface → Returns the properties of the rkv98e method Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv98e_properties~~CalledByGraph proc~rkv98e_properties rklib_variable_properties::rkv98e_properties interface~rkv98e_properties rklib_module::rkv98e_class%rkv98e_properties interface~rkv98e_properties->proc~rkv98e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98e_properties.html"},{"title":"rkv98r_properties – rklib","text":"module procedure rkv98r_properties pure module function rkv98r_properties(me) result(p) Interface → Returns the properties of the rkv98r method Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv98r_properties~~CalledByGraph proc~rkv98r_properties rklib_variable_properties::rkv98r_properties interface~rkv98r_properties rklib_module::rkv98r_class%rkv98r_properties interface~rkv98r_properties->proc~rkv98r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98r_properties.html"},{"title":"rks98_properties – rklib","text":"module procedure rks98_properties pure module function rks98_properties(me) result(p) Interface → Returns the properties of the rks98 method Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks98_properties~~CalledByGraph proc~rks98_properties rklib_variable_properties::rks98_properties interface~rks98_properties rklib_module::rks98_class%rks98_properties interface~rks98_properties->proc~rks98_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks98_properties.html"},{"title":"rkf108_properties – rklib","text":"module procedure rkf108_properties pure module function rkf108_properties(me) result(p) Interface → Returns the properties of the rkf108 method Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf108_properties~~CalledByGraph proc~rkf108_properties rklib_variable_properties::rkf108_properties interface~rkf108_properties rklib_module::rkf108_class%rkf108_properties interface~rkf108_properties->proc~rkf108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf108_properties.html"},{"title":"rkc108_properties – rklib","text":"module procedure rkc108_properties pure module function rkc108_properties(me) result(p) Interface → Returns the properties of the rkc108 method Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc108_properties~~CalledByGraph proc~rkc108_properties rklib_variable_properties::rkc108_properties interface~rkc108_properties rklib_module::rkc108_class%rkc108_properties interface~rkc108_properties->proc~rkc108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc108_properties.html"},{"title":"rkb109_properties – rklib","text":"module procedure rkb109_properties pure module function rkb109_properties(me) result(p) Interface → Returns the properties of the rkb109 method Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkb109_properties~~CalledByGraph proc~rkb109_properties rklib_variable_properties::rkb109_properties interface~rkb109_properties rklib_module::rkb109_class%rkb109_properties interface~rkb109_properties->proc~rkb109_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb109_properties.html"},{"title":"rks1110a_properties – rklib","text":"module procedure rks1110a_properties pure module function rks1110a_properties(me) result(p) Interface → Returns the properties of the rks1110a method Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks1110a_properties~~CalledByGraph proc~rks1110a_properties rklib_variable_properties::rks1110a_properties interface~rks1110a_properties rklib_module::rks1110a_class%rks1110a_properties interface~rks1110a_properties->proc~rks1110a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks1110a_properties.html"},{"title":"rkf1210_properties – rklib","text":"module procedure rkf1210_properties pure module function rkf1210_properties(me) result(p) Interface → Returns the properties of the rkf1210 method Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf1210_properties~~CalledByGraph proc~rkf1210_properties rklib_variable_properties::rkf1210_properties interface~rkf1210_properties rklib_module::rkf1210_class%rkf1210_properties interface~rkf1210_properties->proc~rkf1210_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1210_properties.html"},{"title":"rko129_properties – rklib","text":"module procedure rko129_properties pure module function rko129_properties(me) result(p) Interface → Returns the properties of the rko129 method Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rko129_properties~~CalledByGraph proc~rko129_properties rklib_variable_properties::rko129_properties interface~rko129_properties rklib_module::rko129_class%rko129_properties interface~rko129_properties->proc~rko129_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko129_properties.html"},{"title":"rkf1412_properties – rklib","text":"module procedure rkf1412_properties pure module function rkf1412_properties(me) result(p) Interface → Returns the properties of the rkf1412 method Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf1412_properties~~CalledByGraph proc~rkf1412_properties rklib_variable_properties::rkf1412_properties interface~rkf1412_properties rklib_module::rkf1412_class%rkf1412_properties interface~rkf1412_properties->proc~rkf1412_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1412_properties.html"},{"title":"euler_properties – rklib","text":"module procedure euler_properties pure module function euler_properties(me) result(p) Interface → Returns the properties of the euler method Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~euler_properties~~CalledByGraph proc~euler_properties rklib_fixed_properties::euler_properties interface~euler_properties rklib_module::euler_class%euler_properties interface~euler_properties->proc~euler_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/euler_properties.html"},{"title":"midpoint_properties – rklib","text":"module procedure midpoint_properties pure module function midpoint_properties(me) result(p) Interface → Returns the properties of the midpoint method Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~midpoint_properties~~CalledByGraph proc~midpoint_properties rklib_fixed_properties::midpoint_properties interface~midpoint_properties rklib_module::midpoint_class%midpoint_properties interface~midpoint_properties->proc~midpoint_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/midpoint_properties.html"},{"title":"heun_properties – rklib","text":"module procedure heun_properties pure module function heun_properties(me) result(p) Interface → Returns the properties of the heun method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~heun_properties~~CalledByGraph proc~heun_properties rklib_fixed_properties::heun_properties interface~heun_properties rklib_module::heun_class%heun_properties interface~heun_properties->proc~heun_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/heun_properties.html"},{"title":"rkssp22_properties – rklib","text":"module procedure rkssp22_properties pure module function rkssp22_properties(me) result(p) Interface → Returns the properties of the rkssp22 method Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp22_properties~~CalledByGraph proc~rkssp22_properties rklib_fixed_properties::rkssp22_properties interface~rkssp22_properties rklib_module::rkssp22_class%rkssp22_properties interface~rkssp22_properties->proc~rkssp22_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp22_properties.html"},{"title":"rk3_properties – rklib","text":"module procedure rk3_properties pure module function rk3_properties(me) result(p) Interface → Returns the properties of the rk3 method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk3_properties~~CalledByGraph proc~rk3_properties rklib_fixed_properties::rk3_properties interface~rk3_properties rklib_module::rk3_class%rk3_properties interface~rk3_properties->proc~rk3_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk3_properties.html"},{"title":"rkssp33_properties – rklib","text":"module procedure rkssp33_properties pure module function rkssp33_properties(me) result(p) Interface → Returns the properties of the rkssp33 method Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp33_properties~~CalledByGraph proc~rkssp33_properties rklib_fixed_properties::rkssp33_properties interface~rkssp33_properties rklib_module::rkssp33_class%rkssp33_properties interface~rkssp33_properties->proc~rkssp33_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp33_properties.html"},{"title":"rkssp53_properties – rklib","text":"module procedure rkssp53_properties pure module function rkssp53_properties(me) result(p) Interface → Returns the properties of the rkssp53 method Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp53_properties~~CalledByGraph proc~rkssp53_properties rklib_fixed_properties::rkssp53_properties interface~rkssp53_properties rklib_module::rkssp53_class%rkssp53_properties interface~rkssp53_properties->proc~rkssp53_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp53_properties.html"},{"title":"rk4_properties – rklib","text":"module procedure rk4_properties pure module function rk4_properties(me) result(p) Interface → Returns the properties of the rk4 method Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk4_properties~~CalledByGraph proc~rk4_properties rklib_fixed_properties::rk4_properties interface~rk4_properties rklib_module::rk4_class%rk4_properties interface~rk4_properties->proc~rk4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk4_properties.html"},{"title":"rks4_properties – rklib","text":"module procedure rks4_properties pure module function rks4_properties(me) result(p) Interface → Returns the properties of the rks4 method Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks4_properties~~CalledByGraph proc~rks4_properties rklib_fixed_properties::rks4_properties interface~rks4_properties rklib_module::rks4_class%rks4_properties interface~rks4_properties->proc~rks4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks4_properties.html"},{"title":"rkr4_properties – rklib","text":"module procedure rkr4_properties pure module function rkr4_properties(me) result(p) Interface → Returns the properties of the rkr4 method Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkr4_properties~~CalledByGraph proc~rkr4_properties rklib_fixed_properties::rkr4_properties interface~rkr4_properties rklib_module::rkr4_class%rkr4_properties interface~rkr4_properties->proc~rkr4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkr4_properties.html"},{"title":"rkls44_properties – rklib","text":"module procedure rkls44_properties pure module function rkls44_properties(me) result(p) Interface → Returns the properties of the rkls44 method Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkls44_properties~~CalledByGraph proc~rkls44_properties rklib_fixed_properties::rkls44_properties interface~rkls44_properties rklib_module::rkls44_class%rkls44_properties interface~rkls44_properties->proc~rkls44_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls44_properties.html"},{"title":"rkls54_properties – rklib","text":"module procedure rkls54_properties pure module function rkls54_properties(me) result(p) Interface → Returns the properties of the rkls54 method Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkls54_properties~~CalledByGraph proc~rkls54_properties rklib_fixed_properties::rkls54_properties interface~rkls54_properties rklib_module::rkls54_class%rkls54_properties interface~rkls54_properties->proc~rkls54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls54_properties.html"},{"title":"rkssp54_properties – rklib","text":"module procedure rkssp54_properties pure module function rkssp54_properties(me) result(p) Interface → Returns the properties of the rkssp54 method Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp54_properties~~CalledByGraph proc~rkssp54_properties rklib_fixed_properties::rkssp54_properties interface~rkssp54_properties rklib_module::rkssp54_class%rkssp54_properties interface~rkssp54_properties->proc~rkssp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp54_properties.html"},{"title":"rks5_properties – rklib","text":"module procedure rks5_properties pure module function rks5_properties(me) result(p) Interface → Returns the properties of the rks5 method Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks5_properties~~CalledByGraph proc~rks5_properties rklib_fixed_properties::rks5_properties interface~rks5_properties rklib_module::rks5_class%rks5_properties interface~rks5_properties->proc~rks5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks5_properties.html"},{"title":"rk5_properties – rklib","text":"module procedure rk5_properties pure module function rk5_properties(me) result(p) Interface → Returns the properties of the rk5 method Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk5_properties~~CalledByGraph proc~rk5_properties rklib_fixed_properties::rk5_properties interface~rk5_properties rklib_module::rk5_class%rk5_properties interface~rk5_properties->proc~rk5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk5_properties.html"},{"title":"rkc5_properties – rklib","text":"module procedure rkc5_properties pure module function rkc5_properties(me) result(p) Interface → Returns the properties of the rkc5 method Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc5_properties~~CalledByGraph proc~rkc5_properties rklib_fixed_properties::rkc5_properties interface~rkc5_properties rklib_module::rkc5_class%rkc5_properties interface~rkc5_properties->proc~rkc5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc5_properties.html"},{"title":"rkl5_properties – rklib","text":"module procedure rkl5_properties pure module function rkl5_properties(me) result(p) Interface → Returns the properties of the rkl5 method Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkl5_properties~~CalledByGraph proc~rkl5_properties rklib_fixed_properties::rkl5_properties interface~rkl5_properties rklib_module::rkl5_class%rkl5_properties interface~rkl5_properties->proc~rkl5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkl5_properties.html"},{"title":"rklk5a_properties – rklib","text":"module procedure rklk5a_properties pure module function rklk5a_properties(me) result(p) Interface → Returns the properties of the rklk5a method Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rklk5a_properties~~CalledByGraph proc~rklk5a_properties rklib_fixed_properties::rklk5a_properties interface~rklk5a_properties rklib_module::rklk5a_class%rklk5a_properties interface~rklk5a_properties->proc~rklk5a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5a_properties.html"},{"title":"rklk5b_properties – rklib","text":"module procedure rklk5b_properties pure module function rklk5b_properties(me) result(p) Interface → Returns the properties of the rklk5b method Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rklk5b_properties~~CalledByGraph proc~rklk5b_properties rklib_fixed_properties::rklk5b_properties interface~rklk5b_properties rklib_module::rklk5b_class%rklk5b_properties interface~rklk5b_properties->proc~rklk5b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5b_properties.html"},{"title":"rkb6_properties – rklib","text":"module procedure rkb6_properties pure module function rkb6_properties(me) result(p) Interface → Returns the properties of the rkb6 method Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkb6_properties~~CalledByGraph proc~rkb6_properties rklib_fixed_properties::rkb6_properties interface~rkb6_properties rklib_module::rkb6_class%rkb6_properties interface~rkb6_properties->proc~rkb6_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb6_properties.html"},{"title":"rk7_properties – rklib","text":"module procedure rk7_properties pure module function rk7_properties(me) result(p) Interface → Returns the properties of the rk7 method Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk7_properties~~CalledByGraph proc~rk7_properties rklib_fixed_properties::rk7_properties interface~rk7_properties rklib_module::rk7_class%rk7_properties interface~rk7_properties->proc~rk7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk7_properties.html"},{"title":"rk8_10_properties – rklib","text":"module procedure rk8_10_properties pure module function rk8_10_properties(me) result(p) Interface → Returns the properties of the rk8_10 method Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk8_10_properties~~CalledByGraph proc~rk8_10_properties rklib_fixed_properties::rk8_10_properties interface~rk8_10_properties rklib_module::rk8_10_class%rk8_10_properties interface~rk8_10_properties->proc~rk8_10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_10_properties.html"},{"title":"rkcv8_properties – rklib","text":"module procedure rkcv8_properties pure module function rkcv8_properties(me) result(p) Interface → Returns the properties of the rkcv8 method Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkcv8_properties~~CalledByGraph proc~rkcv8_properties rklib_fixed_properties::rkcv8_properties interface~rkcv8_properties rklib_module::rkcv8_class%rkcv8_properties interface~rkcv8_properties->proc~rkcv8_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkcv8_properties.html"},{"title":"rk8_12_properties – rklib","text":"module procedure rk8_12_properties pure module function rk8_12_properties(me) result(p) Interface → Returns the properties of the rk8_12 method Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk8_12_properties~~CalledByGraph proc~rk8_12_properties rklib_fixed_properties::rk8_12_properties interface~rk8_12_properties rklib_module::rk8_12_class%rk8_12_properties interface~rk8_12_properties->proc~rk8_12_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_12_properties.html"},{"title":"rkz10_properties – rklib","text":"module procedure rkz10_properties pure module function rkz10_properties(me) result(p) Interface → Returns the properties of the rkz10 method Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkz10_properties~~CalledByGraph proc~rkz10_properties rklib_fixed_properties::rkz10_properties interface~rkz10_properties rklib_module::rkz10_class%rkz10_properties interface~rkz10_properties->proc~rkz10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkz10_properties.html"},{"title":"rko10_properties – rklib","text":"module procedure rko10_properties pure module function rko10_properties(me) result(p) Interface → Returns the properties of the rko10 method Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rko10_properties~~CalledByGraph proc~rko10_properties rklib_fixed_properties::rko10_properties interface~rko10_properties rklib_module::rko10_class%rko10_properties interface~rko10_properties->proc~rko10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko10_properties.html"},{"title":"rkh10_properties – rklib","text":"module procedure rkh10_properties pure module function rkh10_properties(me) result(p) Interface → Returns the properties of the rkh10 method Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkh10_properties~~CalledByGraph proc~rkh10_properties rklib_fixed_properties::rkh10_properties interface~rkh10_properties rklib_module::rkh10_class%rkh10_properties interface~rkh10_properties->proc~rkh10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkh10_properties.html"},{"title":"rkbs32 – rklib","text":"module procedure rkbs32 module subroutine rkbs32(me, t, x, h, xf, xerr) Interface → Bogacki-Shampine 3(2) method Reference Bogacki, P and Shampine, L. F. (1989),\n \"A 3(2) pair of Runge-Kutta formulas\",\n Applied Mathematics Letters, 2 (4): 321-325 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkbs32~~CallsGraph proc~rkbs32 rklib_variable_steps::rkbs32 f f proc~rkbs32->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkbs32~~CalledByGraph proc~rkbs32 rklib_variable_steps::rkbs32 interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs32.html"},{"title":"rkssp43 – rklib","text":"module procedure rkssp43 module subroutine rkssp43(me, t, x, h, xf, xerr) Interface → 4-stage, 3rd order SSP Runge-Kutta method. Note On the current performance tests, this method shows 3rd order convergence, but its\n relative error is one order of magnitude higher than that obtained with other 3rd order\n methods. An implementation error cannot be excluded. References Main method: Kraaijevanger, Johannes Franciscus Bernardus Maria. \"Contractivity of\n runge-kutta methods.\" BIT Numerical Mathematics 31.3 (1991): 482-528. DOI: 10.1007/BF01933264 . Embedded method: Conde, Sidafa, Imre Fekete, and John N. Shadid. \"Embedded error\n estimation and adaptive step-size control for optimal explicit strong stability preserving\n Runge--Kutta methods.\" arXiv preprint arXiv:1806.08693 (2018). arXiv: 1806.08693 Implementation: Ranocha, Hendrik, et al. \"Optimized Runge-Kutta methods with automatic\n step size control for compressible computational fluid dynamics.\" Communications on Applied\n Mathematics and Computation 4.4 (2022): 1191-1228. arXiv:2104.06836 Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkssp43~~CallsGraph proc~rkssp43 rklib_variable_steps::rkssp43 f f proc~rkssp43->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp43~~CalledByGraph proc~rkssp43 rklib_variable_steps::rkssp43 interface~rkssp43 rklib_module::rkssp43_class%rkssp43 interface~rkssp43->proc~rkssp43 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp43.html"},{"title":"rkf45 – rklib","text":"module procedure rkf45 module subroutine rkf45(me, t, x, h, xf, xerr) Interface → Fehlberg's 4(5) method. This is Table III, RK4(5), Formula 2 in the reference. References E. Fehlberg, \"Low-order classical Runge-Kutta formulas with stepsize control and\n their application to some heat transfer problems\", NASA Technical Report R-315,\n July 1, 1969. Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf45~~CallsGraph proc~rkf45 rklib_variable_steps::rkf45 f f proc~rkf45->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf45~~CalledByGraph proc~rkf45 rklib_variable_steps::rkf45 interface~rkf45 rklib_module::rkf45_class%rkf45 interface~rkf45->proc~rkf45 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf45.html"},{"title":"rkck54 – rklib","text":"module procedure rkck54 module subroutine rkck54(me, t, x, h, xf, xerr) Interface → Runge Kutta Cash-Karp. Reference J. R. Cash, A. H. Karp. \"A variable order Runge-Kutta method\n for initial value problems with rapidly varying right-hand sides\",\n ACM Transactions on Mathematical Software 16: 201-222, 1990 Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkck54~~CallsGraph proc~rkck54 rklib_variable_steps::rkck54 f f proc~rkck54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkck54~~CalledByGraph proc~rkck54 rklib_variable_steps::rkck54 interface~rkck54 rklib_module::rkck54_class%rkck54 interface~rkck54->proc~rkck54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkck54.html"},{"title":"rkdp54 – rklib","text":"module procedure rkdp54 module subroutine rkdp54(me, t, x, h, xf, xerr) Interface → Dormand-Prince 5(4) method (RKDP or DOPRI) Reference Dormand, J. R.; Prince, P. J. (1980), \"A family of embedded Runge-Kutta formulae\",\n Journal of Computational and Applied Mathematics, 6 (1): 19-26 https://en.wikipedia.org/wiki/Dormand-Prince_method Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp54~~CallsGraph proc~rkdp54 rklib_variable_steps::rkdp54 f f proc~rkdp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkdp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkdp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp54~~CalledByGraph proc~rkdp54 rklib_variable_steps::rkdp54 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp54.html"},{"title":"rkt54 – rklib","text":"module procedure rkt54 module subroutine rkt54(me, t, x, h, xf, xerr) Interface → Tsitouras 5(4) method Reference Ch. Tsitouras, \"Runge-Kutta pairs of order 5(4) satisfying only the\n first column simplifying assumption\", Computers & Mathematics with\n Applications, Vol. 62, No. 2, pp. 770 - 775, 2011. Higher-precision coefficients Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkt54~~CallsGraph proc~rkt54 rklib_variable_steps::rkt54 f f proc~rkt54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkt54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkt54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkt54~~CalledByGraph proc~rkt54 rklib_variable_steps::rkt54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt54.html"},{"title":"rks54 – rklib","text":"module procedure rks54 module subroutine rks54(me, t, x, h, xf, xerr) Interface → Stepanov 5(4) method. References Misha Stepanov, Calcolo volume 59, Article number: 41 (2022), Embedded (4,5) pairs of explicit 7-stage Runge-Kutta methods with FSAL property . arxiv (see Table 4) Note that there is also\n a 4th order continuously differential interpolant given. Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks54~~CallsGraph proc~rks54 rklib_variable_steps::rks54 f f proc~rks54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rks54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rks54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks54~~CalledByGraph proc~rks54 rklib_variable_steps::rks54 interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks54.html"},{"title":"rkpp54 – rklib","text":"module procedure rkpp54 module subroutine rkpp54(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) Reference S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\",\n Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkpp54~~CallsGraph proc~rkpp54 rklib_variable_steps::rkpp54 f f proc~rkpp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkpp54~~CalledByGraph proc~rkpp54 rklib_variable_steps::rkpp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54.html"},{"title":"rkpp54b – rklib","text":"module procedure rkpp54b module subroutine rkpp54b(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). Reference S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\",\n Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkpp54b~~CallsGraph proc~rkpp54b rklib_variable_steps::rkpp54b f f proc~rkpp54b->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54b->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54b->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkpp54b~~CalledByGraph proc~rkpp54b rklib_variable_steps::rkpp54b interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54b.html"},{"title":"rkbs54 – rklib","text":"module procedure rkbs54 module subroutine rkbs54(me, t, x, h, xf, xerr) Interface → Bogacki & Shampine 5(4) Reference P. Bogacki & L.F. Shampine, \"An efficient Runge-Kutta (4,5) pair\"\n Computers & Mathematics with Applications,\n Volume 32, Issue 6, September 1996, Pages 15-28 Coefficients This pair is in rksuite ( METHD = 2 ) Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkbs54~~CallsGraph proc~rkbs54 rklib_variable_steps::rkbs54 f f proc~rkbs54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkbs54~~CalledByGraph proc~rkbs54 rklib_variable_steps::rkbs54 interface~rkbs54 rklib_module::rkbs54_class%rkbs54 interface~rkbs54->proc~rkbs54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs54.html"},{"title":"rkss54 – rklib","text":"module procedure rkss54 module subroutine rkss54(me, t, x, h, xf, xerr) Interface → Sharp & Smart 5(4) method. Reference P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\",\n Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkss54~~CallsGraph proc~rkss54 rklib_variable_steps::rkss54 f f proc~rkss54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkss54~~CalledByGraph proc~rkss54 rklib_variable_steps::rkss54 interface~rkss54 rklib_module::rkss54_class%rkss54 interface~rkss54->proc~rkss54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss54.html"},{"title":"rkdp65 – rklib","text":"module procedure rkdp65 module subroutine rkdp65(me, t, x, h, xf, xerr) Interface → Dormand-Prince 6(5) method.\n This is RK6(5)8M from the reference. Reference P.J. Prince, J.R. Dormand, \"High order embedded Runge-Kutta formulae\",\n Journal of Computational and Applied Mathematics,\n Volume 7, Issue 1, March 1981, Pages 67-75. Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp65~~CallsGraph proc~rkdp65 rklib_variable_steps::rkdp65 f f proc~rkdp65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp65~~CalledByGraph proc~rkdp65 rklib_variable_steps::rkdp65 interface~rkdp65 rklib_module::rkdp65_class%rkdp65 interface~rkdp65->proc~rkdp65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp65.html"},{"title":"rkc65 – rklib","text":"module procedure rkc65 module subroutine rkc65(me, t, x, h, xf, xerr) Interface → Calvo 6(5) method. Reference M. Calvo, J.I. Montijano, L. Randez,\n \"A new embedded pair of Runge-Kutta formulas of orders 5 and 6\",\n Computers & Mathematics with Applications, Volume 20, Issue 1, 1990, Pages 15-24 Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkc65~~CallsGraph proc~rkc65 rklib_variable_steps::rkc65 f f proc~rkc65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc65~~CalledByGraph proc~rkc65 rklib_variable_steps::rkc65 interface~rkc65 rklib_module::rkc65_class%rkc65 interface~rkc65->proc~rkc65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc65.html"},{"title":"rkv65e – rklib","text":"module procedure rkv65e module subroutine rkv65e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. Reference J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\",\n Annals of Num. Math 1 1994, 225-244. Jim Verner's Refuge for Runge-Kutta Pairs Rational coefficients Floating point coefficients Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65e~~CallsGraph proc~rkv65e rklib_variable_steps::rkv65e f f proc~rkv65e->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65e->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65e->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65e~~CalledByGraph proc~rkv65e rklib_variable_steps::rkv65e interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65e.html"},{"title":"rktf65 – rklib","text":"module procedure rktf65 module subroutine rktf65(me, t, x, h, xf, xerr) Interface → Tsitouras & Famelis Runge-Kutta 6(5) method. Reference Ch. Tsitouras and I. Th. Famelis, Phase-Fitted modified Runge-Kutta pairs of orders 6(5) ,\n ICNAAM 2006, Crete, 2006. More precise rational coefficients Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktf65~~CallsGraph proc~rktf65 rklib_variable_steps::rktf65 f f proc~rktf65->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rktf65->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rktf65->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktf65~~CalledByGraph proc~rktf65 rklib_variable_steps::rktf65 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktf65.html"},{"title":"rkv65r – rklib","text":"module procedure rkv65r module subroutine rkv65r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. Reference J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\",\n Annals of Num. Math 1 1994, 225-244. Jim Verner's Refuge for Runge-Kutta Pairs Rational coefficients Floating point coefficients Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65r~~CallsGraph proc~rkv65r rklib_variable_steps::rkv65r f f proc~rkv65r->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65r->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65r->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65r~~CalledByGraph proc~rkv65r rklib_variable_steps::rkv65r interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65r.html"},{"title":"rkv65 – rklib","text":"module procedure rkv65 module subroutine rkv65(me, t, x, h, xf, xerr) Interface → Verner 6(5) method. References A Contrast of a New RK56 pair with DP56, by Jim Verner,\n Department of Mathematics. Simon Fraser University, Burnaby, Canada, 2006. Coefficients Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65~~CallsGraph proc~rkv65 rklib_variable_steps::rkv65 f f proc~rkv65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65~~CalledByGraph proc~rkv65 rklib_variable_steps::rkv65 interface~rkv65 rklib_module::rkv65_class%rkv65 interface~rkv65->proc~rkv65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65.html"},{"title":"dverk65 – rklib","text":"module procedure dverk65 module subroutine dverk65(me, t, x, h, xf, xerr) Interface → Verner 6(5) 'DVERK' method. Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~dverk65~~CallsGraph proc~dverk65 rklib_variable_steps::dverk65 f f proc~dverk65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~dverk65~~CalledByGraph proc~dverk65 rklib_variable_steps::dverk65 interface~dverk65 rklib_module::dverk65_class%dverk65 interface~dverk65->proc~dverk65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk65.html"},{"title":"rkv76e – rklib","text":"module procedure rkv76e module subroutine rkv76e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv76e~~CallsGraph proc~rkv76e rklib_variable_steps::rkv76e f f proc~rkv76e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv76e~~CalledByGraph proc~rkv76e rklib_variable_steps::rkv76e interface~rkv76e rklib_module::rkv76e_class%rkv76e interface~rkv76e->proc~rkv76e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76e.html"},{"title":"rkv76r – rklib","text":"module procedure rkv76r module subroutine rkv76r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv76r~~CallsGraph proc~rkv76r rklib_variable_steps::rkv76r f f proc~rkv76r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv76r~~CalledByGraph proc~rkv76r rklib_variable_steps::rkv76r interface~rkv76r rklib_module::rkv76r_class%rkv76r interface~rkv76r->proc~rkv76r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76r.html"},{"title":"rkss76 – rklib","text":"module procedure rkss76 module subroutine rkss76(me, t, x, h, xf, xerr) Interface → Sharp & Smart 7(6)) method. Reference P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\",\n Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkss76~~CallsGraph proc~rkss76 rklib_variable_steps::rkss76 f f proc~rkss76->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkss76~~CalledByGraph proc~rkss76 rklib_variable_steps::rkss76 interface~rkss76 rklib_module::rkss76_class%rkss76 interface~rkss76->proc~rkss76 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss76.html"},{"title":"rkv87e – rklib","text":"module procedure rkv87e module subroutine rkv87e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv87e~~CallsGraph proc~rkv87e rklib_variable_steps::rkv87e f f proc~rkv87e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv87e~~CalledByGraph proc~rkv87e rklib_variable_steps::rkv87e interface~rkv87e rklib_module::rkv87e_class%rkv87e interface~rkv87e->proc~rkv87e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87e.html"},{"title":"rkv87r – rklib","text":"module procedure rkv87r module subroutine rkv87r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv87r~~CallsGraph proc~rkv87r rklib_variable_steps::rkv87r f f proc~rkv87r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv87r~~CalledByGraph proc~rkv87r rklib_variable_steps::rkv87r interface~rkv87r rklib_module::rkv87r_class%rkv87r interface~rkv87r->proc~rkv87r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87r.html"},{"title":"rkk87 – rklib","text":"module procedure rkk87 module subroutine rkk87(me, t, x, h, xf, xerr) Interface → Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method References Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras, Runge-Kutta Embedded Methods of Orders 8(7) for Use in Quadruple Precision Computations ,\n Mathematics, Volume 10, Issue 18, 2022. Rational coefficients Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkk87~~CallsGraph proc~rkk87 rklib_variable_steps::rkk87 f f proc~rkk87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkk87~~CalledByGraph proc~rkk87 rklib_variable_steps::rkk87 interface~rkk87 rklib_module::rkk87_class%rkk87 interface~rkk87->proc~rkk87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkk87.html"},{"title":"rkv98e – rklib","text":"module procedure rkv98e module subroutine rkv98e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv98e~~CallsGraph proc~rkv98e rklib_variable_steps::rkv98e f f proc~rkv98e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv98e~~CalledByGraph proc~rkv98e rklib_variable_steps::rkv98e interface~rkv98e rklib_module::rkv98e_class%rkv98e interface~rkv98e->proc~rkv98e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98e.html"},{"title":"rkv98r – rklib","text":"module procedure rkv98r module subroutine rkv98r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv98r~~CallsGraph proc~rkv98r rklib_variable_steps::rkv98r f f proc~rkv98r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv98r~~CalledByGraph proc~rkv98r rklib_variable_steps::rkv98r interface~rkv98r rklib_module::rkv98r_class%rkv98r interface~rkv98r->proc~rkv98r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98r.html"},{"title":"rktp64 – rklib","text":"module procedure rktp64 module subroutine rktp64(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW6(4) Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Rational coefficients (see rktp64.m ) Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp64~~CallsGraph proc~rktp64 rklib_variable_steps::rktp64 f f proc~rktp64->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp64~~CalledByGraph proc~rktp64 rklib_variable_steps::rktp64 interface~rktp64 rklib_module::rktp64_class%rktp64 interface~rktp64->proc~rktp64 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp64.html"},{"title":"rkf78 – rklib","text":"module procedure rkf78 module subroutine rkf78(me, t, x, h, xf, xerr) Interface → Fehlberg's 7(8) algorithm. Reference E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order\n Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 . Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf78~~CallsGraph proc~rkf78 rklib_variable_steps::rkf78 f f proc~rkf78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf78~~CalledByGraph proc~rkf78 rklib_variable_steps::rkf78 interface~rkf78 rklib_module::rkf78_class%rkf78 interface~rkf78->proc~rkf78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf78.html"},{"title":"rkdp87 – rklib","text":"module procedure rkdp87 module subroutine rkdp87(me, t, x, h, xf, xerr) Interface → Dormand-Prince RK8(7)13M method. Reference P.J. Prince and J.R. Dormand, J. Comp. Appl. Math.,7, pp. 67-75, 1981 rksuite_90 Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp87~~CallsGraph proc~rkdp87 rklib_variable_steps::rkdp87 f f proc~rkdp87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp87~~CalledByGraph proc~rkdp87 rklib_variable_steps::rkdp87 interface~rkdp87 rklib_module::rkdp87_class%rkdp87 interface~rkdp87->proc~rkdp87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp87.html"},{"title":"rkv78 – rklib","text":"module procedure rkv78 module subroutine rkv78(me, t, x, h, xf, xerr) Interface → Verner's 7(8) algorithm. Reference Mathematics Source Library Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv78~~CallsGraph proc~rkv78 rklib_variable_steps::rkv78 f f proc~rkv78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv78~~CalledByGraph proc~rkv78 rklib_variable_steps::rkv78 interface~rkv78 rklib_module::rkv78_class%rkv78 interface~rkv78->proc~rkv78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv78.html"},{"title":"dverk78 – rklib","text":"module procedure dverk78 module subroutine dverk78(me, t, x, h, xf, xerr) Interface → Verner's \"Maple\" (dverk78). Reference Coefficients Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~dverk78~~CallsGraph proc~dverk78 rklib_variable_steps::dverk78 f f proc~dverk78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~dverk78~~CalledByGraph proc~dverk78 rklib_variable_steps::dverk78 interface~dverk78 rklib_module::dverk78_class%dverk78 interface~dverk78->proc~dverk78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk78.html"},{"title":"rktp75 – rklib","text":"module procedure rktp75 module subroutine rktp75(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW7(5) Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Rational coefficients (see rktp75.m ) Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp75~~CallsGraph proc~rktp75 rklib_variable_steps::rktp75 f f proc~rktp75->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp75~~CalledByGraph proc~rktp75 rklib_variable_steps::rktp75 interface~rktp75 rklib_module::rktp75_class%rktp75 interface~rktp75->proc~rktp75 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp75.html"},{"title":"rktmy7 – rklib","text":"module procedure rktmy7 module subroutine rktmy7(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) Reference M. Tanaka, S. Muramatsu and S. Yamashita,\n \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\",\n Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. Rational coefficients Tanyam7 Note The floating point coefficients here were generated from the rational ones from the 3rd reference. Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktmy7~~CallsGraph proc~rktmy7 rklib_variable_steps::rktmy7 f f proc~rktmy7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktmy7~~CalledByGraph proc~rktmy7 rklib_variable_steps::rktmy7 interface~rktmy7 rklib_module::rktmy7_class%rktmy7 interface~rktmy7->proc~rktmy7 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7.html"},{"title":"rktmy7s – rklib","text":"module procedure rktmy7s module subroutine rktmy7s(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (stable alternate) Reference M. Tanaka, S. Muramatsu and S. Yamashita,\n \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\",\n Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. Rational coefficients Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktmy7s~~CallsGraph proc~rktmy7s rklib_variable_steps::rktmy7s f f proc~rktmy7s->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktmy7s~~CalledByGraph proc~rktmy7s rklib_variable_steps::rktmy7s interface~rktmy7s rklib_module::rktmy7s_class%rktmy7s interface~rktmy7s->proc~rktmy7s Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7s.html"},{"title":"rkdp85 – rklib","text":"module procedure rkdp85 module subroutine rkdp85(me, t, x, h, xf, xerr) Interface → Dormand-Prince 8(5) References E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary\n Differential Equations I. Nonstiff Problems. 2nd edition.\n springer series in computational mathematics,\n springer-verlag (1993) Original DOP853 by Hairer Modernized DOP853 DP8ConstantCache Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp85~~CallsGraph proc~rkdp85 rklib_variable_steps::rkdp85 f f proc~rkdp85->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp85~~CalledByGraph proc~rkdp85 rklib_variable_steps::rkdp85 interface~rkdp85 rklib_module::rkdp85_class%rkdp85 interface~rkdp85->proc~rkdp85 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp85.html"},{"title":"rktp86 – rklib","text":"module procedure rktp86 module subroutine rktp86(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Matlab version Rational coefficients (see rktp86.m ) Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp86~~CallsGraph proc~rktp86 rklib_variable_steps::rktp86 f f proc~rktp86->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp86~~CalledByGraph proc~rktp86 rklib_variable_steps::rktp86 interface~rktp86 rklib_module::rktp86_class%rktp86 interface~rktp86->proc~rktp86 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp86.html"},{"title":"rkev87 – rklib","text":"module procedure rkev87 module subroutine rkev87(me, t, x, h, xf, xerr) Interface → Enright Verner 8(7) Reference W. H. Enright, \"The Relative Efficiency of Alternative Defect Control Schemes\n for High-Order Continuous Runge-Kutta Formulas\",\n SIAM Journal on Numerical Analysis, Vol. 30, No. 5. (Oct., 1993), pp. 1419-1445. Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkev87~~CallsGraph proc~rkev87 rklib_variable_steps::rkev87 f f proc~rkev87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkev87~~CalledByGraph proc~rkev87 rklib_variable_steps::rkev87 interface~rkev87 rklib_module::rkev87_class%rkev87 interface~rkev87->proc~rkev87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkev87.html"},{"title":"rkf89 – rklib","text":"module procedure rkf89 module subroutine rkf89(me, t, x, h, xf, xerr) Interface → Fehlberg 8(9) method. Reference E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order\n Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 . Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf89~~CallsGraph proc~rkf89 rklib_variable_steps::rkf89 f f proc~rkf89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf89~~CalledByGraph proc~rkf89 rklib_variable_steps::rkf89 interface~rkf89 rklib_module::rkf89_class%rkf89 interface~rkf89->proc~rkf89 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf89.html"},{"title":"rkv89 – rklib","text":"module procedure rkv89 module subroutine rkv89(me, t, x, h, xf, xerr) Interface → Runge Kutta Verner 8(9) Reference J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the\n Local Truncation Error\", SIAM Journal on Numerical Analysis,\n 15(4), 772-790, 1978. Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv89~~CallsGraph proc~rkv89 rklib_variable_steps::rkv89 f f proc~rkv89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv89~~CalledByGraph proc~rkv89 rklib_variable_steps::rkv89 interface~rkv89 rklib_module::rkv89_class%rkv89 interface~rkv89->proc~rkv89 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv89.html"},{"title":"rkt98a – rklib","text":"module procedure rkt98a module subroutine rkt98a(me, t, x, h, xf, xerr) Interface → Tsitouras combined order 9(8) Runge-Kutta scheme A. Reference Ch. Tsitouras, \"Optimized explicit Runge-Kutta pairs of order 9(8)\",\n Applied Numerical Mathematics, 38 (2001) 123-134. Coefficients Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkt98a~~CallsGraph proc~rkt98a rklib_variable_steps::rkt98a f f proc~rkt98a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkt98a~~CalledByGraph proc~rkt98a rklib_variable_steps::rkt98a interface~rkt98a rklib_module::rkt98a_class%rkt98a interface~rkt98a->proc~rkt98a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt98a.html"},{"title":"rks98 – rklib","text":"module procedure rks98 module subroutine rks98(me, t, x, h, xf, xerr) Interface → Sharp 9(8) Reference Philip W. Sharp, \"High order explicit Runge-Kutta pairs for ephemerides of the Solar System and the Moon\",\n Journal of Applied Mathematics & Decision Sciences, 4(2), 183-192 (2000), https://github.com/SciML/DiffEqDevTools.jl/blob/master/src/ode_tableaus.jl Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks98~~CallsGraph proc~rks98 rklib_variable_steps::rks98 f f proc~rks98->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks98~~CalledByGraph proc~rks98 rklib_variable_steps::rks98 interface~rks98 rklib_module::rks98_class%rks98 interface~rks98->proc~rks98 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks98.html"},{"title":"rkf108 – rklib","text":"module procedure rkf108 module subroutine rkf108(me, t, x, h, xf, xerr) Interface → Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. Reference T. Feagin, \" A Tenth-Order Runge-Kutta Method with Error Estimate \", coefficient file Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf108~~CallsGraph proc~rkf108 rklib_variable_steps::rkf108 f f proc~rkf108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf108~~CalledByGraph proc~rkf108 rklib_variable_steps::rkf108 interface~rkf108 rklib_module::rkf108_class%rkf108 interface~rkf108->proc~rkf108 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf108.html"},{"title":"rkc108 – rklib","text":"module procedure rkc108 module subroutine rkc108(me, t, x, h, xf, xerr) Interface → A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme Reference A.R.Curtis, \"High-order Explicit Runge-Kutta Formulae, Their uses, and Limitations\",\n J. Inst. Maths Applics (1975) 16, 35-55. Rational coefficients Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkc108~~CallsGraph proc~rkc108 rklib_variable_steps::rkc108 f f proc~rkc108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc108~~CalledByGraph proc~rkc108 rklib_variable_steps::rkc108 interface~rkc108 rklib_module::rkc108_class%rkc108 interface~rkc108->proc~rkc108 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc108.html"},{"title":"rkb109 – rklib","text":"module procedure rkb109 module subroutine rkb109(me, t, x, h, xf, xerr) Interface → Baker 10(9) method. Reference Tom Baker, University of Teeside, \"RK-Aid software: RK10921M\". Coefficients Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkb109~~CallsGraph proc~rkb109 rklib_variable_steps::rkb109 f f proc~rkb109->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkb109~~CalledByGraph proc~rkb109 rklib_variable_steps::rkb109 interface~rkb109 rklib_module::rkb109_class%rkb109 interface~rkb109->proc~rkb109 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb109.html"},{"title":"rkf1210 – rklib","text":"module procedure rkf1210 module subroutine rkf1210(me, t, x, h, xf, xerr) Interface → Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. Reference coefficient file Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf1210~~CallsGraph proc~rkf1210 rklib_variable_steps::rkf1210 f f proc~rkf1210->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf1210~~CalledByGraph proc~rkf1210 rklib_variable_steps::rkf1210 interface~rkf1210 rklib_module::rkf1210_class%rkf1210 interface~rkf1210->proc~rkf1210 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1210.html"},{"title":"rkf1412 – rklib","text":"module procedure rkf1412 module subroutine rkf1412(me, t, x, h, xf, xerr) Interface → Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. Reference coefficient file Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf1412~~CallsGraph proc~rkf1412 rklib_variable_steps::rkf1412 f f proc~rkf1412->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf1412~~CalledByGraph proc~rkf1412 rklib_variable_steps::rkf1412 interface~rkf1412 rklib_module::rkf1412_class%rkf1412 interface~rkf1412->proc~rkf1412 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1412.html"},{"title":"rko129 – rklib","text":"module procedure rko129 module subroutine rko129(me, t, x, h, xf, xerr) Interface → A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. Reference Hiroshi Ono, On the 25 stage 12th order explicit Runge-Kutta method,\n Transactions of the Japan Society for Industrial and applied Mathematics,\n Vol. 6, No. 3, (2006) pages 177 to 186. Rational coefficients Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rko129~~CallsGraph proc~rko129 rklib_variable_steps::rko129 f f proc~rko129->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rko129~~CalledByGraph proc~rko129 rklib_variable_steps::rko129 interface~rko129 rklib_module::rko129_class%rko129 interface~rko129->proc~rko129 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko129.html"},{"title":"rks1110a – rklib","text":"module procedure rks1110a module subroutine rks1110a(me, t, x, h, xf, xerr) Interface → Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme Reference Coefficients Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks1110a~~CallsGraph proc~rks1110a rklib_variable_steps::rks1110a f f proc~rks1110a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks1110a~~CalledByGraph proc~rks1110a rklib_variable_steps::rks1110a interface~rks1110a rklib_module::rks1110a_class%rks1110a interface~rks1110a->proc~rks1110a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks1110a.html"},{"title":"euler – rklib","text":"module procedure euler module subroutine euler(me, t, x, h, xf) Interface → Euler (1st order) integration method. Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~euler~~CallsGraph proc~euler rklib_fixed_steps::euler f f proc~euler->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~euler~~CalledByGraph proc~euler rklib_fixed_steps::euler interface~euler rklib_module::euler_class%euler interface~euler->proc~euler Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/euler.html"},{"title":"midpoint – rklib","text":"module procedure midpoint module subroutine midpoint(me, t, x, h, xf) Interface → Midpoint (2nd order) integration method. Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~midpoint~~CallsGraph proc~midpoint rklib_fixed_steps::midpoint f f proc~midpoint->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~midpoint~~CalledByGraph proc~midpoint rklib_fixed_steps::midpoint interface~midpoint rklib_module::midpoint_class%midpoint interface~midpoint->proc~midpoint Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/midpoint.html"},{"title":"heun – rklib","text":"module procedure heun module subroutine heun(me, t, x, h, xf) Interface → Heun's (2nd order) integration method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~heun~~CallsGraph proc~heun rklib_fixed_steps::heun f f proc~heun->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~heun~~CalledByGraph proc~heun rklib_fixed_steps::heun interface~heun rklib_module::heun_class%heun interface~heun->proc~heun Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/heun.html"},{"title":"rkssp22 – rklib","text":"module procedure rkssp22 module subroutine rkssp22(me, t, x, h, xf) Interface → 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Reference C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory\n shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471.\n https://doi.org/10.1016/0021-9991(88)90177-5. Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp22~~CallsGraph proc~rkssp22 rklib_fixed_steps::rkssp22 f f proc~rkssp22->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp22~~CalledByGraph proc~rkssp22 rklib_fixed_steps::rkssp22 interface~rkssp22 rklib_module::rkssp22_class%rkssp22 interface~rkssp22->proc~rkssp22 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp22.html"},{"title":"rk3 – rklib","text":"module procedure rk3 module subroutine rk3(me, t, x, h, xf) Interface → 3rd order, 3 steps RK integration method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk3~~CallsGraph proc~rk3 rklib_fixed_steps::rk3 f f proc~rk3->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk3~~CalledByGraph proc~rk3 rklib_fixed_steps::rk3 interface~rk3 rklib_module::rk3_class%rk3 interface~rk3->proc~rk3 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk3.html"},{"title":"rkssp33 – rklib","text":"module procedure rkssp33 module subroutine rkssp33(me, t, x, h, xf) Interface → 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Reference C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory\n shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471.\n https://doi.org/10.1016/0021-9991(88)90177-5. Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp33~~CallsGraph proc~rkssp33 rklib_fixed_steps::rkssp33 f f proc~rkssp33->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp33~~CalledByGraph proc~rkssp33 rklib_fixed_steps::rkssp33 interface~rkssp33 rklib_module::rkssp33_class%rkssp33 interface~rkssp33->proc~rkssp33 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp33.html"},{"title":"rkssp53 – rklib","text":"module procedure rkssp53 module subroutine rkssp53(me, t, x, h, xf) Interface → 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. Reference Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta\n methods.\" Mathematics of Computation 75.253 (2006): 183-207.\n https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf Note the coefficients here are only 15 digits of precision. Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp53~~CallsGraph proc~rkssp53 rklib_fixed_steps::rkssp53 f f proc~rkssp53->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp53~~CalledByGraph proc~rkssp53 rklib_fixed_steps::rkssp53 interface~rkssp53 rklib_module::rkssp53_class%rkssp53 interface~rkssp53->proc~rkssp53 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp53.html"},{"title":"rk4 – rklib","text":"module procedure rk4 module subroutine rk4(me, t, x, h, xf) Interface → Take one Runge Kutta 4 integration step: t -> t+h (x -> xf) Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk4~~CallsGraph proc~rk4 rklib_fixed_steps::rk4 f f proc~rk4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk4~~CalledByGraph proc~rk4 rklib_fixed_steps::rk4 interface~rk4 rklib_module::rk4_class%rk4 interface~rk4->proc~rk4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk4.html"},{"title":"rks4 – rklib","text":"module procedure rks4 module subroutine rks4(me, t, x, h, xf) Interface → 4th order Runge Kutta Shanks (4 points) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rks4~~CallsGraph proc~rks4 rklib_fixed_steps::rks4 f f proc~rks4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks4~~CalledByGraph proc~rks4 rklib_fixed_steps::rks4 interface~rks4 rklib_module::rks4_class%rks4 interface~rks4->proc~rks4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks4.html"},{"title":"rkr4 – rklib","text":"module procedure rkr4 module subroutine rkr4(me, t, x, h, xf) Interface → Ralston 4th order method with minimum truncation error. Reference Ralston, Anthony (1962).\n \" Runge-Kutta Methods with Minimum Error Bounds \".\n Math. Comput. 16 (80): 431-437. Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkr4~~CallsGraph proc~rkr4 rklib_fixed_steps::rkr4 f f proc~rkr4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkr4~~CalledByGraph proc~rkr4 rklib_fixed_steps::rkr4 interface~rkr4 rklib_module::rkr4_class%rkr4 interface~rkr4->proc~rkr4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkr4.html"},{"title":"rkls44 – rklib","text":"module procedure rkls44 module subroutine rkls44(me, t, x, h, xf) Interface → 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). Reference Method: Jiang, Guang-Shan, and Chi-Wang Shu. \"Efficient implementation of weighted ENO\n schemes.\" Journal of computational physics 126.1 (1996): 202-228.\n https://ntrs.nasa.gov/api/citations/19960007052/downloads/19960007052.pdf Implementation: J. M. F. Donnert et al 2019 ApJS 241 23.\n https://iopscience.iop.org/article/10.3847/1538-4365/ab09fb Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkls44~~CallsGraph proc~rkls44 rklib_fixed_steps::rkls44 f f proc~rkls44->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkls44~~CalledByGraph proc~rkls44 rklib_fixed_steps::rkls44 interface~rkls44 rklib_module::rkls44_class%rkls44 interface~rkls44->proc~rkls44 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls44.html"},{"title":"rkssp54 – rklib","text":"module procedure rkssp54 module subroutine rkssp54(me, t, x, h, xf) Interface → 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. Reference Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta\n methods.\" Mathematics of Computation 75.253 (2006): 183-207.\n https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp54~~CallsGraph proc~rkssp54 rklib_fixed_steps::rkssp54 f f proc~rkssp54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp54~~CalledByGraph proc~rkssp54 rklib_fixed_steps::rkssp54 interface~rkssp54 rklib_module::rkssp54_class%rkssp54 interface~rkssp54->proc~rkssp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp54.html"},{"title":"rkls54 – rklib","text":"module procedure rkls54 module subroutine rkls54(me, t, x, h, xf) Interface → 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994).\n CFL<=0.32 Reference Carpenter, Mark H., and Christopher A. Kennedy. Fourth-order 2N-storage Runge-Kutta\n schemes. No. NASA-TM-109112. 1994.\n https://ntrs.nasa.gov/api/citations/19940028444/downloads/19940028444.pdf Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkls54~~CallsGraph proc~rkls54 rklib_fixed_steps::rkls54 f f proc~rkls54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkls54~~CalledByGraph proc~rkls54 rklib_fixed_steps::rkls54 interface~rkls54 rklib_module::rkls54_class%rkls54 interface~rkls54->proc~rkls54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls54.html"},{"title":"rks5 – rklib","text":"module procedure rks5 module subroutine rks5(me, t, x, h, xf) Interface → Runge Kutta Shanks (5th order) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rks5~~CallsGraph proc~rks5 rklib_fixed_steps::rks5 f f proc~rks5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks5~~CalledByGraph proc~rks5 rklib_fixed_steps::rks5 interface~rks5 rklib_module::rks5_class%rks5 interface~rks5->proc~rks5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks5.html"},{"title":"rk5 – rklib","text":"module procedure rk5 module subroutine rk5(me, t, x, h, xf) Interface → Runge's 5th order method. Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk5~~CallsGraph proc~rk5 rklib_fixed_steps::rk5 f f proc~rk5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk5~~CalledByGraph proc~rk5 rklib_fixed_steps::rk5 interface~rk5 rklib_module::rk5_class%rk5 interface~rk5->proc~rk5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk5.html"},{"title":"rkc5 – rklib","text":"module procedure rkc5 module subroutine rkc5(me, t, x, h, xf) Interface → Cassity's Order 5 method Reference C.R. Cassity, Solutions of the fifth order Runge-Kutta equations,\n SIAM J. Numer. Anal., 3, (1966), pp. 598-606 Coefficients Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkc5~~CallsGraph proc~rkc5 rklib_fixed_steps::rkc5 f f proc~rkc5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc5~~CalledByGraph proc~rkc5 rklib_fixed_steps::rkc5 interface~rkc5 rklib_module::rkc5_class%rkc5 interface~rkc5->proc~rkc5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc5.html"},{"title":"rkl5 – rklib","text":"module procedure rkl5 module subroutine rkl5(me, t, x, h, xf) Interface → 5th order Lawson References An Order Five Runge Kutta Process with Extended Region of Stability,\n J. Douglas Lawson, Siam Journal on Numerical Analysis,\n Vol. 3, No. 4, (Dec., 1966) pages 593-597 Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkl5~~CallsGraph proc~rkl5 rklib_fixed_steps::rkl5 f f proc~rkl5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkl5~~CalledByGraph proc~rkl5 rklib_fixed_steps::rkl5 interface~rkl5 rklib_module::rkl5_class%rkl5 interface~rkl5->proc~rkl5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkl5.html"},{"title":"rklk5a – rklib","text":"module procedure rklk5a module subroutine rklk5a(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (1) References H.A.Luther and H.P.Konen,\n \"Some Fifth-Order Classical Runge Kutta Formulas\",\n Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rklk5a~~CallsGraph proc~rklk5a rklib_fixed_steps::rklk5a f f proc~rklk5a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rklk5a~~CalledByGraph proc~rklk5a rklib_fixed_steps::rklk5a interface~rklk5a rklib_module::rklk5a_class%rklk5a interface~rklk5a->proc~rklk5a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5a.html"},{"title":"rklk5b – rklib","text":"module procedure rklk5b module subroutine rklk5b(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (2) References H.A.Luther and H.P.Konen,\n \"Some Fifth-Order Classical Runge Kutta Formulas\",\n Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rklk5b~~CallsGraph proc~rklk5b rklib_fixed_steps::rklk5b f f proc~rklk5b->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rklk5b~~CalledByGraph proc~rklk5b rklib_fixed_steps::rklk5b interface~rklk5b rklib_module::rklk5b_class%rklk5b interface~rklk5b->proc~rklk5b Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5b.html"},{"title":"rkb6 – rklib","text":"module procedure rkb6 module subroutine rkb6(me, t, x, h, xf) Interface → Butcher's 6th order method. 7 function evaluations. References Butcher, J. (1964). On Runge-Kutta processes of high order.\n Journal of the Australian Mathematical Society, 4(2), 179-194. Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkb6~~CallsGraph proc~rkb6 rklib_fixed_steps::rkb6 f f proc~rkb6->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkb6~~CalledByGraph proc~rkb6 rklib_fixed_steps::rkb6 interface~rkb6 rklib_module::rkb6_class%rkb6 interface~rkb6->proc~rkb6 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb6.html"},{"title":"rk7 – rklib","text":"module procedure rk7 module subroutine rk7(me, t, x, h, xf) Interface → Take one Runge Kutta 7 integration step: t -> t+h (x -> xf) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk7~~CallsGraph proc~rk7 rklib_fixed_steps::rk7 f f proc~rk7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk7~~CalledByGraph proc~rk7 rklib_fixed_steps::rk7 interface~rk7 rklib_module::rk7_class%rk7 interface~rk7->proc~rk7 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk7.html"},{"title":"rk8_10 – rklib","text":"module procedure rk8_10 module subroutine rk8_10(me, t, x, h, xf) Interface → Take one Runge Kutta 8 integration step: t -> t+h (x -> xf) This is Formula (8-10) from Reference [1]. Reference E. B. Shanks, \" Higher Order Approximations of Runge-Kutta Type \",\n NASA Technical Note, NASA TN D-2920, Sept. 1965. Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk8_10~~CallsGraph proc~rk8_10 rklib_fixed_steps::rk8_10 f f proc~rk8_10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk8_10~~CalledByGraph proc~rk8_10 rklib_fixed_steps::rk8_10 interface~rk8_10 rklib_module::rk8_10_class%rk8_10 interface~rk8_10->proc~rk8_10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_10.html"},{"title":"rk8_12 – rklib","text":"module procedure rk8_12 module subroutine rk8_12(me, t, x, h, xf) Interface → 8th order Shanks, 12 function evaluations. Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk8_12~~CallsGraph proc~rk8_12 rklib_fixed_steps::rk8_12 f f proc~rk8_12->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk8_12~~CalledByGraph proc~rk8_12 rklib_fixed_steps::rk8_12 interface~rk8_12 rklib_module::rk8_12_class%rk8_12 interface~rk8_12->proc~rk8_12 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_12.html"},{"title":"rkcv8 – rklib","text":"module procedure rkcv8 module subroutine rkcv8(me, t, x, h, xf) Interface → Cooper-Verner 11 stage, 8th order Runge-Kutta method. Reference Some Explicit Runge-Kutta Methods of High Order, by G. J. Cooper and J. H. Verner,\n SIAM Journal on Numerical Analysis, Vol. 9, No. 3, (September 1972), pages 389 to 405 http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8b_1.pdf Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkcv8~~CallsGraph proc~rkcv8 rklib_fixed_steps::rkcv8 f f proc~rkcv8->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkcv8~~CalledByGraph proc~rkcv8 rklib_fixed_steps::rkcv8 interface~rkcv8 rklib_module::rkcv8_class%rkcv8 interface~rkcv8->proc~rkcv8 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkcv8.html"},{"title":"rkz10 – rklib","text":"module procedure rkz10 module subroutine rkz10(me, t, x, h, xf) Interface → Zhang 10th order Reference David K. Zhang, \"Discovering New Runge-Kutta Methods Using Unstructured Numerical Search\",\n Thesis, April 16, 2019 1911.00318.pdf Coefficients Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkz10~~CallsGraph proc~rkz10 rklib_fixed_steps::rkz10 f f proc~rkz10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkz10~~CalledByGraph proc~rkz10 rklib_fixed_steps::rkz10 interface~rkz10 rklib_module::rkz10_class%rkz10 interface~rkz10->proc~rkz10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkz10.html"},{"title":"rko10 – rklib","text":"module procedure rko10 module subroutine rko10(me, t, x, h, xf) Interface → Ono's 10th order method References Hiroshi Ono, \"A Runge-Kutta method of order 10 which minimizes truncation error\",\n The Japan Society for Industrial and Applied Mathematics,\n Vol. 13, No. 1, 2003, pp 35 - 44. Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rko10~~CallsGraph proc~rko10 rklib_fixed_steps::rko10 f f proc~rko10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rko10~~CalledByGraph proc~rko10 rklib_fixed_steps::rko10 interface~rko10 rklib_module::rko10_class%rko10 interface~rko10->proc~rko10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko10.html"},{"title":"rkh10 – rklib","text":"module procedure rkh10 module subroutine rkh10(me, t, x, h, xf) Interface → Hairer 10th order method. References Ernst Hairer, \"A Runge-Kutta Method of Order 10\"\n January 1978, IMA Journal of Applied Mathematics 21(1) Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkh10~~CallsGraph proc~rkh10 rklib_fixed_steps::rkh10 f f proc~rkh10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkh10~~CalledByGraph proc~rkh10 rklib_fixed_steps::rkh10 interface~rkh10 rklib_module::rkh10_class%rkh10 interface~rkh10->proc~rkh10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkh10.html"},{"title":"rklib_module – rklib","text":"Runge-Kutta integration. Note The default real kind ( wp ) can be\n changed using optional preprocessor flags.\n This library was built with real kind: real(kind=real64) [8 bytes] Uses root_module iso_fortran_env module~~rklib_module~~UsesGraph module~rklib_module rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Used by Descendants: rklib_fixed_properties rklib_fixed_steps rklib_variable_properties rklib_variable_steps module~~rklib_module~~UsedByGraph module~rklib_module rklib_module module~rklib_fixed_properties rklib_fixed_properties module~rklib_fixed_properties->module~rklib_module module~rklib_fixed_steps rklib_fixed_steps module~rklib_fixed_steps->module~rklib_module module~rklib_variable_properties rklib_variable_properties module~rklib_variable_properties->module~rklib_module module~rklib_variable_steps rklib_variable_steps module~rklib_variable_steps->module~rklib_module program~rklib_example rklib_example program~rklib_example->module~rklib_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Variables rk_module_rk wp zero max_error_len RKLIB_ERROR_TOO_MANY_STEPS RKLIB_ERROR_INVALID_RTOL_SIZE RKLIB_ERROR_INVALID_ATOL_SIZE RKLIB_ERROR_INVALID_H RKLIB_ERROR_USER_STOPPED RKLIB_ERROR_MIN_STEP_SIZE RKLIB_ERROR_TOO_MANY_REDUCTIONS RKLIB_ERROR_INVALID_HINIT_METHOD RKLIB_ERROR_G_NOT_ASSOCIATED RKLIB_ERROR_F_NOT_ASSOCIATED RKLIB_ERROR_NONE rklib_error_messages Interfaces euler_properties midpoint_properties heun_properties rkssp22_properties rk3_properties rkssp33_properties rkssp53_properties rk4_properties rks4_properties rkr4_properties rkls44_properties rkls54_properties rkssp54_properties rks5_properties rk5_properties rkc5_properties rkl5_properties rklk5a_properties rklk5b_properties rkb6_properties rk7_properties rk8_10_properties rkcv8_properties rk8_12_properties rkz10_properties rko10_properties rkh10_properties rkbs32_properties rkssp43_properties rkf45_properties rkck54_properties rkdp54_properties rkt54_properties rks54_properties rkpp54_properties rkpp54b_properties rkbs54_properties rkss54_properties rkdp65_properties rkc65_properties rktp64_properties rkv65e_properties rkv65r_properties rkv65_properties dverk65_properties rktf65_properties rktp75_properties rktmy7_properties rktmy7s_properties rkv76e_properties rkv76r_properties rkss76_properties rkf78_properties rkv78_properties dverk78_properties rkdp85_properties rktp86_properties rkdp87_properties rkv87e_properties rkv87r_properties rkev87_properties rkk87_properties rkf89_properties rkv89_properties rkt98a_properties rkv98e_properties rkv98r_properties rks98_properties rkf108_properties rkc108_properties rkb109_properties rks1110a_properties rkf1210_properties rko129_properties rkf1412_properties euler midpoint heun rkssp22 rk3 rkssp33 rkssp53 rk4 rks4 rkr4 rkls44 rkls54 rkssp54 rks5 rk5 rkc5 rkl5 rklk5a rklk5b rkb6 rk7 rk8_10 rkcv8 rk8_12 rkz10 rko10 rkh10 rkbs32 rkssp43 rkf45 rkck54 rkdp54 rkt54 rks54 rkpp54 rkpp54b rkbs54 rkss54 rkdp65 rkc65 rktp64 rkv65e rkv65r rkv65 dverk65 rktf65 rktp75 rktmy7 rktmy7s rkv76e rkv76r rkss76 rkf78 rkv78 dverk78 rkdp85 rktp86 rkdp87 rkv87e rkv87r rkev87 rkk87 rkf89 rkv89 rkt98a rkv98e rkv98r rks98 rkf108 rkc108 rkb109 rks1110a rkf1210 rko129 rkf1412 Abstract Interfaces norm_func properties_func begin_func deriv_func event_func report_func step_func_fixed step_func_variable Derived Types rklib_properties stepsize_class rk_class rk_fixed_step_class rk_variable_step_class rk_variable_step_fsal_class euler_class midpoint_class heun_class rkssp22_class rk3_class rkssp33_class rkssp53_class rk4_class rks4_class rkr4_class rkls44_class rkls54_class rkssp54_class rks5_class rk5_class rkc5_class rkl5_class rklk5a_class rklk5b_class rkb6_class rk7_class rk8_10_class rkcv8_class rk8_12_class rkz10_class rko10_class rkh10_class rkbs32_class rkssp43_class rkf45_class rkck54_class rkdp54_class rkt54_class rks54_class rkpp54_class rkpp54b_class rkbs54_class rkss54_class rkdp65_class rkc65_class rktp64_class rkv65e_class rkv65r_class rkv65_class dverk65_class rktf65_class rktp75_class rktmy7_class rktmy7s_class rkv76e_class rkv76r_class rkss76_class rkf78_class rkv78_class dverk78_class rkdp85_class rktp86_class rkdp87_class rkv87e_class rkv87r_class rkev87_class rkk87_class rkf89_class rkv89_class rkt98a_class rkv98e_class rkv98r_class rks98_class rkf108_class rkc108_class rkb109_class rks1110a_class rkf1210_class rko129_class rkf1412_class Functions order failed norm2_func maxval_func compute_initial_step hinit Subroutines clear_exception raise_exception destroy rk_class_stop rk_class_status export_point destroy_fsal_cache check_fsal_cache set_fsal_cache initialize_rk_class begin_integration_rk_class begin_integration_rk_fixed_step_class initialize_fixed_step integrate_fixed_step integrate_to_event_fixed_step stepsize_class_constructor destroy_stepsize_class compute_stepsize begin_integration_rk_variable_step_class initialize_variable_step info_variable_step integrate_variable_step integrate_to_event_variable_step hstart Variables Type Visibility Attributes Name Initial integer, public, parameter :: rk_module_rk = real64 real kind used by this module [8 bytes] integer, private, parameter :: wp = rk_module_rk local copy of rk_module_rk with a shorter name real(kind=wp), private, parameter :: zero = 0.0_wp integer, private, parameter :: max_error_len = 100 max size of error message strings integer, public, parameter :: RKLIB_ERROR_TOO_MANY_STEPS = -10 integer, public, parameter :: RKLIB_ERROR_INVALID_RTOL_SIZE = -9 integer, public, parameter :: RKLIB_ERROR_INVALID_ATOL_SIZE = -8 integer, public, parameter :: RKLIB_ERROR_INVALID_H = -7 integer, public, parameter :: RKLIB_ERROR_USER_STOPPED = -6 integer, public, parameter :: RKLIB_ERROR_MIN_STEP_SIZE = -5 integer, public, parameter :: RKLIB_ERROR_TOO_MANY_REDUCTIONS = -4 integer, public, parameter :: RKLIB_ERROR_INVALID_HINIT_METHOD = -3 integer, public, parameter :: RKLIB_ERROR_G_NOT_ASSOCIATED = -2 integer, public, parameter :: RKLIB_ERROR_F_NOT_ASSOCIATED = -1 integer, public, parameter :: RKLIB_ERROR_NONE = 0 character(len=max_error_len), private, parameter, dimension(RKLIB_ERROR_TOO_MANY_STEPS:RKLIB_ERROR_NONE) :: rklib_error_messages = ['Too many steps                              ', 'Invalid size for rtol array                 ', 'Invalid size for atol array                 ', 'Step size cannot be zero                    ', 'User stopped the integration                ', 'Minimum step size reached                   ', 'Too many attempts to reduce step size       ', 'Invalid initial step size estimation method ', 'The event procedure g is not associated     ', 'The function procedure f is not associated  ', 'Success                                     '] Status message strings that go with the status codes.\nThe index in this array is the istatus code. Interfaces interface private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Abstract Interfaces abstract interface private pure function norm_func(x) result(xmag) Vector norm function. Must return a value . Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x a vector Return Value real(kind=wp) the magnitude of the vector abstract interface private pure function properties_func(me) result(p) Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method abstract interface private subroutine begin_func(me) routine called before integration begins\nto set up internal variables. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me abstract interface private subroutine deriv_func(me, t, x, xdot) derivative function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out), dimension(:) :: xdot derivative of state vector abstract interface private subroutine event_func(me, t, x, g) event function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out) :: g g(t,x). The goal is to stop the integration when g=0. abstract interface private subroutine report_func(me, t, x) report function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector abstract interface private subroutine step_func_fixed(me, t, x, h, xf) rk step function for the fixed-step methods. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector abstract interface private subroutine step_func_variable(me, t, x, h, xf, xerr) rk step function for the variable-step methods. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate Derived Types type, public :: rklib_properties Properties of an RK method. Components Type Visibility Attributes Name Initial integer, public :: order = 0 order of the method integer, public :: number_of_stages = 0 number of stages logical, public :: fsal = .false. if it is a FSAL method logical, public :: low_storage = .false. if it is a LS method logical, public :: strong_stability_preserving = .false. if it is a SSP method integer, public :: number_of_registers = 0 number of f vectors used real(kind=wp), public :: cfl = zero Courant-Friedrichs-Lewy number character(len=:), public, allocatable :: short_name short version of the method name character(len=:), public, allocatable :: long_name longer description of the method type, public :: stepsize_class Algorithms for adjusting the step size for variable-step\nRunge-Kutta integrators. Components Type Visibility Attributes Name Initial logical, private :: fixed_step_mode = .false. if true, then the method runs in\nfixed step mode with not error estimation real(kind=wp), private :: hmax = 1.0e+6_wp maximum allowed step size real(kind=wp), private :: hmin = 1.0e-6_wp minimum allowed step size real(kind=wp), private :: hfactor_reject = 0.5_wp minimum allowed factor for decreasing step size after rejected step real(kind=wp), private :: hfactor_accept = 2.0_wp maximum allowed factor for increasing step size after accepted step integer, private :: accept_mode = 2 method to determine if step is accepted [1,2] integer, private :: max_attempts = 10000 maximum number of attempts to decrease step size before giving up logical, private :: relative_err = .false. to use tol*h in the hfactor equation real(kind=wp), private :: safety_factor = 0.9_wp for hfactor equation (>0) integer, private :: p_exponent_offset = 1 p + this value in the exponent (0 or 1) procedure( norm_func ), private, nopass, pointer :: norm => maxval_func routine for computing the norm of the state Type-Bound Procedures procedure\n , public\n :: initialize => stepsize_class_constructor Subroutine procedure\n , public\n :: compute_stepsize Subroutine procedure\n , public\n :: destroy => destroy_stepsize_class Subroutine type, public :: rk_class main integration class Components Type Visibility Attributes Name Initial integer, private :: istatus = 0 status code logical, private :: stopped = .false. if user has stopped the integration in f or report . integer, private :: num_steps = 0 number of accepted steps taken integer, private :: max_number_of_steps = huge(1) maximum number of steps to take integer, private :: report_rate = 1 how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. logical, private :: stop_on_errors = .false. if true, then errors will stop the program integer, private :: n = 0 user specified number of variables procedure( deriv_func ), private, pointer :: f => null() user-specified derivative function procedure( report_func ), private, pointer :: report => null() user-specified report function procedure( event_func ), private, pointer :: g => null() event function (stop when this is zero) type(root_method), private :: solver = root_method_brent the root solver method to use for even finding real(kind=wp), private, dimension(:,:), allocatable :: funcs matrix to store the function\nevalutaions in the step function.\nthis will be size ( n x number_of_registers ) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , private\n, :: init => initialize_rk_class Subroutine procedure\n , private\n, :: begin => begin_integration_rk_class Subroutine procedure\n , private\n, :: raise_exception Subroutine procedure\n , private\n, :: clear_exception Subroutine procedure\n , private\n, :: export_point Subroutine procedure\n(begin_func) , private\n :: begin_integration procedure\n(properties_func) , public\n :: properties type, public, extends( rk_class ) :: rk_fixed_step_class fixed step size class Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n(step_func_fixed) , private\n :: step the step routine for the rk method procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , private\n, :: begin_integration => begin_integration_rk_fixed_step_class Subroutine type, public, extends( rk_class ) :: rk_variable_step_class Main integration class for variable step size Runge-Kutta methods Components Type Visibility Attributes Name Initial type( stepsize_class ), private :: stepsize_method the method for varying the step size real(kind=wp), private, dimension(:), allocatable :: rtol relative tolerance ( size(n) ) real(kind=wp), private, dimension(:), allocatable :: atol absolute tolerance ( size(n) ) integer, private :: hinit_method = 1 if automatically computing the inital step size, which\nmethod to use. 1 = hstart , 2 = hinit . integer, private :: num_rejected_steps = 0 number of rejected steps real(kind=wp), private :: last_accepted_step_size = zero the last accepted step size dt from the integration\n(positive or negative) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n(step_func_variable) , private\n :: step the step routine for the rk method procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , private\n, :: hstart Subroutine for automatically computing the initial step size [this is from DDEABM] procedure\n , private\n, :: hinit Function for automatically computing the initial step size [this is from DOP853] procedure\n , private\n, :: begin_integration => begin_integration_rk_variable_step_class Subroutine procedure\n , private\n, :: compute_initial_step Function procedure\n , private\n, :: order Function returns p , the order of the method type, public, extends( rk_variable_step_class ) :: rk_variable_step_fsal_class a variable step method with the \"first same as last\" (FSAL) property.\nCache the last f and x vectors to use for the next step. Read more… Components Type Visibility Attributes Name Initial real(kind=wp), private, allocatable :: t_saved cached t real(kind=wp), private, dimension(:), allocatable :: x_saved cached x real(kind=wp), private, dimension(:), allocatable :: f_saved cached f Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine type, public, extends( rk_fixed_step_class ) :: euler_class Euler Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => euler Interface procedure\n , public\n, :: properties => euler_properties Interface type, public, extends( rk_fixed_step_class ) :: midpoint_class Midpoint Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => midpoint Interface procedure\n , public\n, :: properties => midpoint_properties Interface type, public, extends( rk_fixed_step_class ) :: heun_class Heun Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => heun Interface procedure\n , public\n, :: properties => heun_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp22_class 2-stage, 2nd order TVD Runge-Kutta Shu-Osher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp22 Interface procedure\n , public\n, :: properties => rkssp22_properties Interface type, public, extends( rk_fixed_step_class ) :: rk3_class 3th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk3 Interface procedure\n , public\n, :: properties => rk3_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp33_class 3-stage, 3rd order TVD Runge-Kutta Shu-Osher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp33 Interface procedure\n , public\n, :: properties => rkssp33_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp53_class 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp53 Interface procedure\n , public\n, :: properties => rkssp53_properties Interface type, public, extends( rk_fixed_step_class ) :: rk4_class Classic 4th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk4 Interface procedure\n , public\n, :: properties => rk4_properties Interface type, public, extends( rk_fixed_step_class ) :: rks4_class 4th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rks4 Interface procedure\n , public\n, :: properties => rks4_properties Interface type, public, extends( rk_fixed_step_class ) :: rkr4_class 4th order Runge-Kutta Ralston Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkr4 Interface procedure\n , public\n, :: properties => rkr4_properties Interface type, public, extends( rk_fixed_step_class ) :: rkls44_class 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkls44 Interface procedure\n , public\n, :: properties => rkls44_properties Interface type, public, extends( rk_fixed_step_class ) :: rkls54_class 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkls54 Interface procedure\n , public\n, :: properties => rkls54_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp54_class 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp54 Interface procedure\n , public\n, :: properties => rkssp54_properties Interface type, public, extends( rk_fixed_step_class ) :: rks5_class 5th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rks5 Interface procedure\n , public\n, :: properties => rks5_properties Interface type, public, extends( rk_fixed_step_class ) :: rk5_class 5th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk5 Interface procedure\n , public\n, :: properties => rk5_properties Interface type, public, extends( rk_fixed_step_class ) :: rkc5_class 5th order Runge-Kutta Cassity Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkc5 Interface procedure\n , public\n, :: properties => rkc5_properties Interface type, public, extends( rk_fixed_step_class ) :: rkl5_class 5th order Runge-Kutta Lawson Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkl5 Interface procedure\n , public\n, :: properties => rkl5_properties Interface type, public, extends( rk_fixed_step_class ) :: rklk5a_class 5th order Runge-Kutta Luther-Konen 1 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rklk5a Interface procedure\n , public\n, :: properties => rklk5a_properties Interface type, public, extends( rk_fixed_step_class ) :: rklk5b_class 5th order Runge-Kutta Luther-Konen 2 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rklk5b Interface procedure\n , public\n, :: properties => rklk5b_properties Interface type, public, extends( rk_fixed_step_class ) :: rkb6_class 6th order Runge-Kutta Butcher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkb6 Interface procedure\n , public\n, :: properties => rkb6_properties Interface type, public, extends( rk_fixed_step_class ) :: rk7_class 7th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk7 Interface procedure\n , public\n, :: properties => rk7_properties Interface type, public, extends( rk_fixed_step_class ) :: rk8_10_class 10-stage, 8th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk8_10 Interface procedure\n , public\n, :: properties => rk8_10_properties Interface type, public, extends( rk_fixed_step_class ) :: rkcv8_class 11-stage, 8th order Runge-Kutta Cooper-Verner Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkcv8 Interface procedure\n , public\n, :: properties => rkcv8_properties Interface type, public, extends( rk_fixed_step_class ) :: rk8_12_class 12-stage, 8th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk8_12 Interface procedure\n , public\n, :: properties => rk8_12_properties Interface type, public, extends( rk_fixed_step_class ) :: rkz10_class 10th order Runge-Kutta Zhang Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkz10 Interface procedure\n , public\n, :: properties => rkz10_properties Interface type, public, extends( rk_fixed_step_class ) :: rko10_class 10th order Runge-Kutta Ono Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rko10 Interface procedure\n , public\n, :: properties => rko10_properties Interface type, public, extends( rk_fixed_step_class ) :: rkh10_class 10th order Runge-Kutta Hairer Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkh10 Interface procedure\n , public\n, :: properties => rkh10_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkbs32_class Bogacki & Shampine 3(2) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkbs32 Interface procedure\n , public\n, :: properties => rkbs32_properties Interface type, public, extends( rk_variable_step_class ) :: rkssp43_class 4-stage, 3rd order SSP Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkssp43 Interface procedure\n , public\n, :: properties => rkssp43_properties Interface type, public, extends( rk_variable_step_class ) :: rkf45_class Fehlberg 4(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf45 Interface procedure\n , public\n, :: properties => rkf45_properties Interface type, public, extends( rk_variable_step_class ) :: rkck54_class Cash & Karp 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkck54 Interface procedure\n , public\n, :: properties => rkck54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkdp54_class Dormand-Prince 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkdp54 Interface procedure\n , public\n, :: properties => rkdp54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkt54_class Tsitouras 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkt54 Interface procedure\n , public\n, :: properties => rkt54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rks54_class Stepanov 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rks54 Interface procedure\n , public\n, :: properties => rks54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkpp54_class Papakostas-PapaGeorgiou 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkpp54 Interface procedure\n , public\n, :: properties => rkpp54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkpp54b_class Papakostas-PapaGeorgiou 5(4) b Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkpp54b Interface procedure\n , public\n, :: properties => rkpp54b_properties Interface type, public, extends( rk_variable_step_class ) :: rkbs54_class Bogacki & Shampine 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkbs54 Interface procedure\n , public\n, :: properties => rkbs54_properties Interface type, public, extends( rk_variable_step_class ) :: rkss54_class Sharp & Smart 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkss54 Interface procedure\n , public\n, :: properties => rkss54_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp65_class Dormand-Prince 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp65 Interface procedure\n , public\n, :: properties => rkdp65_properties Interface type, public, extends( rk_variable_step_class ) :: rkc65_class Calvo 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkc65 Interface procedure\n , public\n, :: properties => rkc65_properties Interface type, public, extends( rk_variable_step_class ) :: rktp64_class Tsitouras & Papakostas NEW6(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp64 Interface procedure\n , public\n, :: properties => rktp64_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkv65e_class Verner efficient (9,6(5)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkv65e Interface procedure\n , public\n, :: properties => rkv65e_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkv65r_class Verner robust (9,6(5)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkv65r Interface procedure\n , public\n, :: properties => rkv65r_properties Interface type, public, extends( rk_variable_step_class ) :: rkv65_class Verner 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv65 Interface procedure\n , public\n, :: properties => rkv65_properties Interface type, public, extends( rk_variable_step_class ) :: dverk65_class Verner 6(5) \"DVERK\" Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => dverk65 Interface procedure\n , public\n, :: properties => dverk65_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rktf65_class Tsitouras & Famelis 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rktf65 Interface procedure\n , public\n, :: properties => rktf65_properties Interface type, public, extends( rk_variable_step_class ) :: rktp75_class Tsitouras & Papakostas NEW7(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp75 Interface procedure\n , public\n, :: properties => rktp75_properties Interface type, public, extends( rk_variable_step_class ) :: rktmy7_class 7th order Tanaka-Muramatsu-Yamashita Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktmy7 Interface procedure\n , public\n, :: properties => rktmy7_properties Interface type, public, extends( rk_variable_step_class ) :: rktmy7s_class 7th order Stable Tanaka-Muramatsu-Yamashita Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktmy7s Interface procedure\n , public\n, :: properties => rktmy7s_properties Interface type, public, extends( rk_variable_step_class ) :: rkv76e_class Verner efficient (10:7(6)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv76e Interface procedure\n , public\n, :: properties => rkv76e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv76r_class Verner robust (10:7(6)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv76r Interface procedure\n , public\n, :: properties => rkv76r_properties Interface type, public, extends( rk_variable_step_class ) :: rkss76_class Sharp & Smart 7(6) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkss76 Interface procedure\n , public\n, :: properties => rkss76_properties Interface type, public, extends( rk_variable_step_class ) :: rkf78_class Fehlberg 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf78 Interface procedure\n , public\n, :: properties => rkf78_properties Interface type, public, extends( rk_variable_step_class ) :: rkv78_class Verner 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv78 Interface procedure\n , public\n, :: properties => rkv78_properties Interface type, public, extends( rk_variable_step_class ) :: dverk78_class Verner \"Maple\" 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => dverk78 Interface procedure\n , public\n, :: properties => dverk78_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp85_class Dormand-Prince 8(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp85 Interface procedure\n , public\n, :: properties => rkdp85_properties Interface type, public, extends( rk_variable_step_class ) :: rktp86_class Tsitouras & Papakostas NEW8(6) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp86 Interface procedure\n , public\n, :: properties => rktp86_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp87_class Dormand & Prince RK8(7)13M Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp87 Interface procedure\n , public\n, :: properties => rkdp87_properties Interface type, public, extends( rk_variable_step_class ) :: rkv87e_class Verner efficient (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv87e Interface procedure\n , public\n, :: properties => rkv87e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv87r_class Verner robust (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv87r Interface procedure\n , public\n, :: properties => rkv87r_properties Interface type, public, extends( rk_variable_step_class ) :: rkev87_class Enright-Verner (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkev87 Interface procedure\n , public\n, :: properties => rkev87_properties Interface type, public, extends( rk_variable_step_class ) :: rkk87_class Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkk87 Interface procedure\n , public\n, :: properties => rkk87_properties Interface type, public, extends( rk_variable_step_class ) :: rkf89_class Fehlberg 8(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf89 Interface procedure\n , public\n, :: properties => rkf89_properties Interface type, public, extends( rk_variable_step_class ) :: rkv89_class Verner 8(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv89 Interface procedure\n , public\n, :: properties => rkv89_properties Interface type, public, extends( rk_variable_step_class ) :: rkt98a_class Tsitouras 9(8) A Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkt98a Interface procedure\n , public\n, :: properties => rkt98a_properties Interface type, public, extends( rk_variable_step_class ) :: rkv98e_class Verner efficient (16:9(8)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv98e Interface procedure\n , public\n, :: properties => rkv98e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv98r_class Verner robust (16:9(8)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv98r Interface procedure\n , public\n, :: properties => rkv98r_properties Interface type, public, extends( rk_variable_step_class ) :: rks98_class Sharp 9(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rks98 Interface procedure\n , public\n, :: properties => rks98_properties Interface type, public, extends( rk_variable_step_class ) :: rkf108_class Feagin 8(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf108 Interface procedure\n , public\n, :: properties => rkf108_properties Interface type, public, extends( rk_variable_step_class ) :: rkc108_class Curtis 10(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkc108 Interface procedure\n , public\n, :: properties => rkc108_properties Interface type, public, extends( rk_variable_step_class ) :: rkb109_class Baker 10(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkb109 Interface procedure\n , public\n, :: properties => rkb109_properties Interface type, public, extends( rk_variable_step_class ) :: rks1110a_class Stone 11(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rks1110a Interface procedure\n , public\n, :: properties => rks1110a_properties Interface type, public, extends( rk_variable_step_class ) :: rkf1210_class Feagin 12(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf1210 Interface procedure\n , public\n, :: properties => rkf1210_properties Interface type, public, extends( rk_variable_step_class ) :: rko129_class Ono 12(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rko129 Interface procedure\n , public\n, :: properties => rko129_properties Interface type, public, extends( rk_variable_step_class ) :: rkf1412_class Feagin 14(12) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf1412 Interface procedure\n , public\n, :: properties => rkf1412_properties Interface Functions private pure function order (me) result(p) Returns the order of the RK method Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical public pure function norm2_func (x) result(xmag) Use intrinsic norm2(x) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) public pure function maxval_func (x) result(xmag) Use maxval(abs(x)) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) private function compute_initial_step (me, t0, tf, x0, h0) result(dt) Compute the initial step size. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use private function hinit (me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) Subroutines private subroutine clear_exception (me) Clear any exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine raise_exception (me, error_code) Raise an exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message private subroutine export_point (me, t, x, first_or_last) Wrapper for exporting points during integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f private subroutine initialize_rk_class (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine begin_integration_rk_class (me) Begin an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine begin_integration_rk_fixed_step_class (me) Begin a rk_fixed_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Read more… Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf private pure subroutine stepsize_class_constructor (me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. private subroutine destroy_stepsize_class (me) Destructor for stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me private subroutine compute_stepsize (me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted private subroutine begin_integration_rk_variable_step_class (me) Begin a rk_variable_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf private subroutine hstart (me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method.","tags":"","loc":"module/rklib_module.html"},{"title":"rklib_variable_properties – rklib","text":"Procedures specifying the properties of the various variable-step RK methods. Uses Ancestors: rklib_module module~~rklib_variable_properties~~UsesGraph module~rklib_variable_properties rklib_variable_properties module~rklib_module rklib_module module~rklib_variable_properties->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures rkbs32_properties rkssp43_properties rkf45_properties rkck54_properties rkdp54_properties rkt54_properties rks54_properties rkpp54_properties rkpp54b_properties rkbs54_properties rkss54_properties rkdp65_properties rkc65_properties rktp64_properties rkv65e_properties rkv65r_properties rkv65_properties dverk65_properties rktf65_properties rktp75_properties rktmy7_properties rktmy7s_properties rkv76e_properties rkv76r_properties rkss76_properties rkf78_properties rkv78_properties dverk78_properties rkdp85_properties rktp86_properties rkdp87_properties rkv87e_properties rkv87r_properties rkev87_properties rkk87_properties rkf89_properties rkv89_properties rkt98a_properties rkv98e_properties rkv98r_properties rks98_properties rkf108_properties rkc108_properties rkb109_properties rks1110a_properties rkf1210_properties rko129_properties rkf1412_properties Module Procedures module procedure rkbs32_properties pure module function rkbs32_properties(me) result(p) Interface → Returns the properties of the rkbs32 method Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp43_properties pure module function rkssp43_properties(me) result(p) Interface → Returns the properties of the rkssp43 method Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf45_properties pure module function rkf45_properties(me) result(p) Interface → Returns the properties of the rkf45 method Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkck54_properties pure module function rkck54_properties(me) result(p) Interface → Returns the properties of the rkck54 method Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp54_properties pure module function rkdp54_properties(me) result(p) Interface → Returns the properties of the rkdp54 method Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkt54_properties pure module function rkt54_properties(me) result(p) Interface → Returns the properties of the rkt54 method Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks54_properties pure module function rks54_properties(me) result(p) Interface → Returns the properties of the rks54 method Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkpp54_properties pure module function rkpp54_properties(me) result(p) Interface → Returns the properties of the rkpp54 method Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkpp54b_properties pure module function rkpp54b_properties(me) result(p) Interface → Returns the properties of the rkpp54b method Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkbs54_properties pure module function rkbs54_properties(me) result(p) Interface → Returns the properties of the rkbs54 method Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkss54_properties pure module function rkss54_properties(me) result(p) Interface → Returns the properties of the rkss54 method Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp65_properties pure module function rkdp65_properties(me) result(p) Interface → Returns the properties of the rkdp65 method Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc65_properties pure module function rkc65_properties(me) result(p) Interface → Returns the properties of the rkc65 method Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp64_properties pure module function rktp64_properties(me) result(p) Interface → Returns the properties of the rktp64 method Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65e_properties pure module function rkv65e_properties(me) result(p) Interface → Returns the properties of the rkv65e method Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65r_properties pure module function rkv65r_properties(me) result(p) Interface → Returns the properties of the rkv65r method Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65_properties pure module function rkv65_properties(me) result(p) Interface → Returns the properties of the rkv65 method Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure dverk65_properties pure module function dverk65_properties(me) result(p) Interface → Returns the properties of the dverk65 method Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktf65_properties pure module function rktf65_properties(me) result(p) Interface → Returns the properties of the rktf65 method Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp75_properties pure module function rktp75_properties(me) result(p) Interface → Returns the properties of the rktp75 method Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktmy7_properties pure module function rktmy7_properties(me) result(p) Interface → Returns the properties of the rktmy7 method Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktmy7s_properties pure module function rktmy7s_properties(me) result(p) Interface → Returns the properties of the rktmy7s method Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv76e_properties pure module function rkv76e_properties(me) result(p) Interface → Returns the properties of the rkv76e method Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv76r_properties pure module function rkv76r_properties(me) result(p) Interface → Returns the properties of the rkv76r method Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkss76_properties pure module function rkss76_properties(me) result(p) Interface → Returns the properties of the rkss76 method Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf78_properties pure module function rkf78_properties(me) result(p) Interface → Returns the properties of the rkf78 method Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv78_properties pure module function rkv78_properties(me) result(p) Interface → Returns the properties of the rkv78 method Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure dverk78_properties pure module function dverk78_properties(me) result(p) Interface → Returns the properties of the dverk78 method Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp85_properties pure module function rkdp85_properties(me) result(p) Interface → Returns the properties of the rkdp85 method Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp86_properties pure module function rktp86_properties(me) result(p) Interface → Returns the properties of the rktp86 method Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp87_properties pure module function rkdp87_properties(me) result(p) Interface → Returns the properties of the rkdp87 method Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv87e_properties pure module function rkv87e_properties(me) result(p) Interface → Returns the properties of the rkv87e method Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv87r_properties pure module function rkv87r_properties(me) result(p) Interface → Returns the properties of the rkv87r method Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkev87_properties pure module function rkev87_properties(me) result(p) Interface → Returns the properties of the rkev87 method Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkk87_properties pure module function rkk87_properties(me) result(p) Interface → Returns the properties of the rkk87 method Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf89_properties pure module function rkf89_properties(me) result(p) Interface → Returns the properties of the rkf89 method Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv89_properties pure module function rkv89_properties(me) result(p) Interface → Returns the properties of the rkv89 method Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkt98a_properties pure module function rkt98a_properties(me) result(p) Interface → Returns the properties of the rkt98a method Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv98e_properties pure module function rkv98e_properties(me) result(p) Interface → Returns the properties of the rkv98e method Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv98r_properties pure module function rkv98r_properties(me) result(p) Interface → Returns the properties of the rkv98r method Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks98_properties pure module function rks98_properties(me) result(p) Interface → Returns the properties of the rks98 method Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf108_properties pure module function rkf108_properties(me) result(p) Interface → Returns the properties of the rkf108 method Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc108_properties pure module function rkc108_properties(me) result(p) Interface → Returns the properties of the rkc108 method Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkb109_properties pure module function rkb109_properties(me) result(p) Interface → Returns the properties of the rkb109 method Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks1110a_properties pure module function rks1110a_properties(me) result(p) Interface → Returns the properties of the rks1110a method Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf1210_properties pure module function rkf1210_properties(me) result(p) Interface → Returns the properties of the rkf1210 method Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rko129_properties pure module function rko129_properties(me) result(p) Interface → Returns the properties of the rko129 method Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf1412_properties pure module function rkf1412_properties(me) result(p) Interface → Returns the properties of the rkf1412 method Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"module/rklib_variable_properties.html"},{"title":"rklib_fixed_properties – rklib","text":"Procedures specifying the properties of the various fixed-step RK methods. Uses Ancestors: rklib_module module~~rklib_fixed_properties~~UsesGraph module~rklib_fixed_properties rklib_fixed_properties module~rklib_module rklib_module module~rklib_fixed_properties->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures euler_properties midpoint_properties heun_properties rkssp22_properties rk3_properties rkssp33_properties rkssp53_properties rk4_properties rks4_properties rkr4_properties rkls44_properties rkls54_properties rkssp54_properties rks5_properties rk5_properties rkc5_properties rkl5_properties rklk5a_properties rklk5b_properties rkb6_properties rk7_properties rk8_10_properties rkcv8_properties rk8_12_properties rkz10_properties rko10_properties rkh10_properties Module Procedures module procedure euler_properties pure module function euler_properties(me) result(p) Interface → Returns the properties of the euler method Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure midpoint_properties pure module function midpoint_properties(me) result(p) Interface → Returns the properties of the midpoint method Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure heun_properties pure module function heun_properties(me) result(p) Interface → Returns the properties of the heun method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp22_properties pure module function rkssp22_properties(me) result(p) Interface → Returns the properties of the rkssp22 method Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk3_properties pure module function rk3_properties(me) result(p) Interface → Returns the properties of the rk3 method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp33_properties pure module function rkssp33_properties(me) result(p) Interface → Returns the properties of the rkssp33 method Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp53_properties pure module function rkssp53_properties(me) result(p) Interface → Returns the properties of the rkssp53 method Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk4_properties pure module function rk4_properties(me) result(p) Interface → Returns the properties of the rk4 method Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks4_properties pure module function rks4_properties(me) result(p) Interface → Returns the properties of the rks4 method Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkr4_properties pure module function rkr4_properties(me) result(p) Interface → Returns the properties of the rkr4 method Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkls44_properties pure module function rkls44_properties(me) result(p) Interface → Returns the properties of the rkls44 method Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkls54_properties pure module function rkls54_properties(me) result(p) Interface → Returns the properties of the rkls54 method Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp54_properties pure module function rkssp54_properties(me) result(p) Interface → Returns the properties of the rkssp54 method Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks5_properties pure module function rks5_properties(me) result(p) Interface → Returns the properties of the rks5 method Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk5_properties pure module function rk5_properties(me) result(p) Interface → Returns the properties of the rk5 method Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc5_properties pure module function rkc5_properties(me) result(p) Interface → Returns the properties of the rkc5 method Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkl5_properties pure module function rkl5_properties(me) result(p) Interface → Returns the properties of the rkl5 method Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rklk5a_properties pure module function rklk5a_properties(me) result(p) Interface → Returns the properties of the rklk5a method Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rklk5b_properties pure module function rklk5b_properties(me) result(p) Interface → Returns the properties of the rklk5b method Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkb6_properties pure module function rkb6_properties(me) result(p) Interface → Returns the properties of the rkb6 method Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk7_properties pure module function rk7_properties(me) result(p) Interface → Returns the properties of the rk7 method Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk8_10_properties pure module function rk8_10_properties(me) result(p) Interface → Returns the properties of the rk8_10 method Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkcv8_properties pure module function rkcv8_properties(me) result(p) Interface → Returns the properties of the rkcv8 method Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk8_12_properties pure module function rk8_12_properties(me) result(p) Interface → Returns the properties of the rk8_12 method Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkz10_properties pure module function rkz10_properties(me) result(p) Interface → Returns the properties of the rkz10 method Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rko10_properties pure module function rko10_properties(me) result(p) Interface → Returns the properties of the rko10 method Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkh10_properties pure module function rkh10_properties(me) result(p) Interface → Returns the properties of the rkh10 method Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"module/rklib_fixed_properties.html"},{"title":"rklib_variable_steps – rklib","text":"Variable-step RK formulas. Uses Ancestors: rklib_module module~~rklib_variable_steps~~UsesGraph module~rklib_variable_steps rklib_variable_steps module~rklib_module rklib_module module~rklib_variable_steps->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures rkbs32 rkssp43 rkf45 rkck54 rkdp54 rkt54 rks54 rkpp54 rkpp54b rkbs54 rkss54 rkdp65 rkc65 rkv65e rktf65 rkv65r rkv65 dverk65 rkv76e rkv76r rkss76 rkv87e rkv87r rkk87 rkv98e rkv98r rktp64 rkf78 rkdp87 rkv78 dverk78 rktp75 rktmy7 rktmy7s rkdp85 rktp86 rkev87 rkf89 rkv89 rkt98a rks98 rkf108 rkc108 rkb109 rkf1210 rkf1412 rko129 rks1110a Module Procedures module procedure rkbs32 module subroutine rkbs32(me, t, x, h, xf, xerr) Interface → Bogacki-Shampine 3(2) method Read more… Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkssp43 module subroutine rkssp43(me, t, x, h, xf, xerr) Interface → 4-stage, 3rd order SSP Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf45 module subroutine rkf45(me, t, x, h, xf, xerr) Interface → Fehlberg's 4(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkck54 module subroutine rkck54(me, t, x, h, xf, xerr) Interface → Runge Kutta Cash-Karp. Read more… Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp54 module subroutine rkdp54(me, t, x, h, xf, xerr) Interface → Dormand-Prince 5(4) method (RKDP or DOPRI) Read more… Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkt54 module subroutine rkt54(me, t, x, h, xf, xerr) Interface → Tsitouras 5(4) method Read more… Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks54 module subroutine rks54(me, t, x, h, xf, xerr) Interface → Stepanov 5(4) method. Read more… Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkpp54 module subroutine rkpp54(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) Read more… Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkpp54b module subroutine rkpp54b(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). Read more… Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkbs54 module subroutine rkbs54(me, t, x, h, xf, xerr) Interface → Bogacki & Shampine 5(4) Read more… Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkss54 module subroutine rkss54(me, t, x, h, xf, xerr) Interface → Sharp & Smart 5(4) method. Read more… Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp65 module subroutine rkdp65(me, t, x, h, xf, xerr) Interface → Dormand-Prince 6(5) method.\n This is RK6(5)8M from the reference. Read more… Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkc65 module subroutine rkc65(me, t, x, h, xf, xerr) Interface → Calvo 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65e module subroutine rkv65e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktf65 module subroutine rktf65(me, t, x, h, xf, xerr) Interface → Tsitouras & Famelis Runge-Kutta 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65r module subroutine rkv65r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65 module subroutine rkv65(me, t, x, h, xf, xerr) Interface → Verner 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure dverk65 module subroutine dverk65(me, t, x, h, xf, xerr) Interface → Verner 6(5) 'DVERK' method. Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv76e module subroutine rkv76e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv76r module subroutine rkv76r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkss76 module subroutine rkss76(me, t, x, h, xf, xerr) Interface → Sharp & Smart 7(6)) method. Read more… Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv87e module subroutine rkv87e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv87r module subroutine rkv87r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkk87 module subroutine rkk87(me, t, x, h, xf, xerr) Interface → Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method Read more… Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv98e module subroutine rkv98e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv98r module subroutine rkv98r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp64 module subroutine rktp64(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW6(4) Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf78 module subroutine rkf78(me, t, x, h, xf, xerr) Interface → Fehlberg's 7(8) algorithm. Read more… Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp87 module subroutine rkdp87(me, t, x, h, xf, xerr) Interface → Dormand-Prince RK8(7)13M method. Read more… Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv78 module subroutine rkv78(me, t, x, h, xf, xerr) Interface → Verner's 7(8) algorithm. Read more… Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure dverk78 module subroutine dverk78(me, t, x, h, xf, xerr) Interface → Verner's \"Maple\" (dverk78). Read more… Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp75 module subroutine rktp75(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW7(5) Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktmy7 module subroutine rktmy7(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) Read more… Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktmy7s module subroutine rktmy7s(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (stable alternate) Read more… Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp85 module subroutine rkdp85(me, t, x, h, xf, xerr) Interface → Dormand-Prince 8(5) Read more… Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp86 module subroutine rktp86(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkev87 module subroutine rkev87(me, t, x, h, xf, xerr) Interface → Enright Verner 8(7) Read more… Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf89 module subroutine rkf89(me, t, x, h, xf, xerr) Interface → Fehlberg 8(9) method. Read more… Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv89 module subroutine rkv89(me, t, x, h, xf, xerr) Interface → Runge Kutta Verner 8(9) Read more… Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkt98a module subroutine rkt98a(me, t, x, h, xf, xerr) Interface → Tsitouras combined order 9(8) Runge-Kutta scheme A. Read more… Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks98 module subroutine rks98(me, t, x, h, xf, xerr) Interface → Sharp 9(8) Read more… Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf108 module subroutine rkf108(me, t, x, h, xf, xerr) Interface → Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkc108 module subroutine rkc108(me, t, x, h, xf, xerr) Interface → A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme Read more… Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkb109 module subroutine rkb109(me, t, x, h, xf, xerr) Interface → Baker 10(9) method. Read more… Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf1210 module subroutine rkf1210(me, t, x, h, xf, xerr) Interface → Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf1412 module subroutine rkf1412(me, t, x, h, xf, xerr) Interface → Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rko129 module subroutine rko129(me, t, x, h, xf, xerr) Interface → A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. Read more… Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks1110a module subroutine rks1110a(me, t, x, h, xf, xerr) Interface → Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme Read more… Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"module/rklib_variable_steps.html"},{"title":"rklib_fixed_steps – rklib","text":"Fixed-step RK formulas. Uses Ancestors: rklib_module module~~rklib_fixed_steps~~UsesGraph module~rklib_fixed_steps rklib_fixed_steps module~rklib_module rklib_module module~rklib_fixed_steps->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures euler midpoint heun rkssp22 rk3 rkssp33 rkssp53 rk4 rks4 rkr4 rkls44 rkssp54 rkls54 rks5 rk5 rkc5 rkl5 rklk5a rklk5b rkb6 rk7 rk8_10 rk8_12 rkcv8 rkz10 rko10 rkh10 Module Procedures module procedure euler module subroutine euler(me, t, x, h, xf) Interface → Euler (1st order) integration method. Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure midpoint module subroutine midpoint(me, t, x, h, xf) Interface → Midpoint (2nd order) integration method. Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure heun module subroutine heun(me, t, x, h, xf) Interface → Heun's (2nd order) integration method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp22 module subroutine rkssp22(me, t, x, h, xf) Interface → 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Read more… Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk3 module subroutine rk3(me, t, x, h, xf) Interface → 3rd order, 3 steps RK integration method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp33 module subroutine rkssp33(me, t, x, h, xf) Interface → 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Read more… Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp53 module subroutine rkssp53(me, t, x, h, xf) Interface → 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. Read more… Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk4 module subroutine rk4(me, t, x, h, xf) Interface → Take one Runge Kutta 4 integration step: t -> t+h (x -> xf) Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rks4 module subroutine rks4(me, t, x, h, xf) Interface → 4th order Runge Kutta Shanks (4 points) Read more… Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkr4 module subroutine rkr4(me, t, x, h, xf) Interface → Ralston 4th order method with minimum truncation error. Read more… Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkls44 module subroutine rkls44(me, t, x, h, xf) Interface → 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). Read more… Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp54 module subroutine rkssp54(me, t, x, h, xf) Interface → 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. Read more… Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkls54 module subroutine rkls54(me, t, x, h, xf) Interface → 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994).\n CFL<=0.32 Read more… Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rks5 module subroutine rks5(me, t, x, h, xf) Interface → Runge Kutta Shanks (5th order) Read more… Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk5 module subroutine rk5(me, t, x, h, xf) Interface → Runge's 5th order method. Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkc5 module subroutine rkc5(me, t, x, h, xf) Interface → Cassity's Order 5 method Read more… Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkl5 module subroutine rkl5(me, t, x, h, xf) Interface → 5th order Lawson Read more… Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rklk5a module subroutine rklk5a(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (1) Read more… Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rklk5b module subroutine rklk5b(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (2) Read more… Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkb6 module subroutine rkb6(me, t, x, h, xf) Interface → Butcher's 6th order method. 7 function evaluations. Read more… Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk7 module subroutine rk7(me, t, x, h, xf) Interface → Take one Runge Kutta 7 integration step: t -> t+h (x -> xf) Read more… Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk8_10 module subroutine rk8_10(me, t, x, h, xf) Interface → Take one Runge Kutta 8 integration step: t -> t+h (x -> xf) This is Formula (8-10) from Reference [1]. Read more… Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk8_12 module subroutine rk8_12(me, t, x, h, xf) Interface → 8th order Shanks, 12 function evaluations. Read more… Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkcv8 module subroutine rkcv8(me, t, x, h, xf) Interface → Cooper-Verner 11 stage, 8th order Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkz10 module subroutine rkz10(me, t, x, h, xf) Interface → Zhang 10th order Read more… Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rko10 module subroutine rko10(me, t, x, h, xf) Interface → Ono's 10th order method Read more… Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkh10 module subroutine rkh10(me, t, x, h, xf) Interface → Hairer 10th order method. Read more… Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"module/rklib_fixed_steps.html"},{"title":"rklib_example – rklib","text":"Uses rklib_module iso_fortran_env program~~rklib_example~~UsesGraph program~rklib_example rklib_example iso_fortran_env iso_fortran_env program~rklib_example->iso_fortran_env module~rklib_module rklib_module program~rklib_example->module~rklib_module module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Variables n tol t0 dt tf x0 xf prop message Subroutines fvpol Source Code rklib_example Variables Type Attributes Name Initial integer, parameter :: n = 2 dimension of the system real(kind=wp), parameter :: tol = 1.0e-12_wp integration tolerance real(kind=wp), parameter :: t0 = 0.0_wp initial t value real(kind=wp), parameter :: dt = 1.0_wp initial step size real(kind=wp), parameter :: tf = 100.0_wp endpoint of integration real(kind=wp), parameter, dimension(n) :: x0 = [0.0_wp, 0.1_wp] initial x value real(kind=wp), dimension(n) :: xf final x value type( rktp86_class ) :: prop character(len=:), allocatable :: message Subroutines subroutine fvpol (me, t, x, f) Right-hand side of van der Pol equation Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Source Code program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example","tags":"","loc":"program/rklib_example.html"},{"title":"rklib_variable_properties.f90 – rklib","text":"This file depends on sourcefile~~rklib_variable_properties.f90~~EfferentGraph sourcefile~rklib_variable_properties.f90 rklib_variable_properties.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_variable_properties.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_variable_properties Source Code rklib_variable_properties.f90 Source Code !***************************************************************************************** !> ! Procedures specifying the properties of the various variable-step RK methods. submodule ( rklib_module ) rklib_variable_properties implicit none contains !***************************************************************************************** module procedure rkbs32_properties !! Returns the properties of the [[rkbs32]] method p % short_name = 'rkbs32' p % long_name = 'Bogacki & Shampine 3(2)' p % order = 3 p % number_of_stages = 4 p % number_of_registers = 4 p % fsal = . true . end procedure rkbs32_properties module procedure rkssp43_properties !! Returns the properties of the [[rkssp43]] method p % short_name = 'rkssp43' p % long_name = '4-stage, 3rd order SSP' p % order = 3 p % number_of_stages = 4 p % number_of_registers = 2 p % low_storage = . true . p % strong_stability_preserving = . true . p % cfl = 2.0_wp end procedure rkssp43_properties module procedure rkf45_properties !! Returns the properties of the [[rkf45]] method p % short_name = 'rkf45' p % long_name = 'Fehlberg 4(5)' p % order = 4 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkf45_properties module procedure rkck54_properties !! Returns the properties of the [[rkck54]] method p % short_name = 'rkck54' p % long_name = 'Cash & Karp 5(4)' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkck54_properties module procedure rkdp54_properties !! Returns the properties of the [[rkdp54]] method p % short_name = 'rkdp54' p % long_name = 'Dormand-Prince 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkdp54_properties module procedure rkt54_properties !! Returns the properties of the [[rkt54]] method p % short_name = 'rkt54' p % long_name = 'Tsitouras 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkt54_properties module procedure rks54_properties !! Returns the properties of the [[rks54]] method p % short_name = 'rks54' p % long_name = 'Stepanov 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rks54_properties module procedure rkpp54_properties !! Returns the properties of the [[rkpp54]] method p % short_name = 'rkpp54' p % long_name = 'Papakostas-PapaGeorgiou 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkpp54_properties module procedure rkpp54b_properties !! Returns the properties of the [[rkpp54b]] method p % short_name = 'rkpp54b' p % long_name = 'Papakostas-PapaGeorgiou 5(4) b' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkpp54b_properties module procedure rkbs54_properties !! Returns the properties of the [[rkbs54]] method p % short_name = 'rkbs54' p % long_name = 'Bogacki & Shampine 5(4)' p % order = 5 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkbs54_properties module procedure rkss54_properties !! Returns the properties of the [[rkss54]] method p % short_name = 'rkss54' p % long_name = 'Sharp & Smart 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rkss54_properties module procedure rkdp65_properties !! Returns the properties of the [[rkdp65]] method p % short_name = 'rkdp65' p % long_name = 'Dormand-Prince 6(5)' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkdp65_properties module procedure rkc65_properties !! Returns the properties of the [[rkc65]] method p % short_name = 'rkc65' p % long_name = 'Calvo 6(5)' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rkc65_properties module procedure rktp64_properties !! Returns the properties of the [[rktp64]] method p % short_name = 'rktp64' p % long_name = 'Tsitouras & Papakostas NEW6(4)' p % order = 6 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rktp64_properties module procedure rkv65e_properties !! Returns the properties of the [[rkv65e]] method p % short_name = 'rkv65e' p % long_name = 'Verner efficient (9,6(5))' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rkv65e_properties module procedure rkv65r_properties !! Returns the properties of the [[rkv65r]] method p % short_name = 'rkv65r' p % long_name = 'Verner robust (9,6(5))' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rkv65r_properties module procedure rkv65_properties !! Returns the properties of the [[rkv65]] method p % short_name = 'rkv65' p % long_name = 'Verner 6(5)' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkv65_properties module procedure dverk65_properties !! Returns the properties of the [[dverk65]] method p % short_name = 'dverk65' p % long_name = 'Verner 6(5) \"DVERK\"' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure dverk65_properties module procedure rktf65_properties !! Returns the properties of the [[rktf65]] method p % short_name = 'rktf65' p % long_name = 'Tsitouras & Famelis 6(5)' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rktf65_properties module procedure rktp75_properties !! Returns the properties of the [[rktp75]] method p % short_name = 'rktp75' p % long_name = 'Tsitouras & Papakostas NEW7(5)' p % order = 7 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rktp75_properties module procedure rktmy7_properties !! Returns the properties of the [[rktmy7]] method p % short_name = 'rktmy7' p % long_name = '7th order Tanaka-Muramatsu-Yamashita' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rktmy7_properties module procedure rktmy7s_properties !! Returns the properties of the [[rktmy7s]] method p % short_name = 'rktmy7s' p % long_name = '7th order Stable Tanaka-Muramatsu-Yamashita' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rktmy7s_properties module procedure rkv76e_properties !! Returns the properties of the [[rkv76e]] method p % short_name = 'rkv76e' p % long_name = 'Verner efficient (10:7(6))' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rkv76e_properties module procedure rkv76r_properties !! Returns the properties of the [[rkv76r]] method p % short_name = 'rkv76r' p % long_name = 'Verner robust (10:7(6))' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rkv76r_properties module procedure rkss76_properties !! Returns the properties of the [[rkss76]] method p % short_name = 'rkss76' p % long_name = 'Sharp & Smart 7(6)' p % order = 7 p % number_of_stages = 11 p % number_of_registers = 11 end procedure rkss76_properties module procedure rkf78_properties !! Returns the properties of the [[rkf78]] method p % short_name = 'rkf78' p % long_name = 'Fehlberg 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkf78_properties module procedure rkv78_properties !! Returns the properties of the [[rkv78]] method p % short_name = 'rkv78' p % long_name = 'Verner 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv78_properties module procedure dverk78_properties !! Returns the properties of the [[dverk78]] method p % short_name = 'dverk78' p % long_name = 'Verner \"Maple\" 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure dverk78_properties module procedure rkdp85_properties !! Returns the properties of the [[rkdp85]] method p % short_name = 'rkdp85' p % long_name = 'Dormand-Prince 8(5)' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rkdp85_properties module procedure rktp86_properties !! Returns the properties of the [[rktp86]] method p % short_name = 'rktp86' p % long_name = 'Tsitouras & Papakostas NEW8(6)' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rktp86_properties module procedure rkdp87_properties !! Returns the properties of the [[rkdp87]] method p % short_name = 'rkdp87' p % long_name = 'Dormand & Prince RK8(7)13M' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkdp87_properties module procedure rkv87e_properties !! Returns the properties of the [[rkv87e]] method p % short_name = 'rkv87e' p % long_name = 'Verner efficient (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv87e_properties module procedure rkv87r_properties !! Returns the properties of the [[rkv87r]] method p % short_name = 'rkv87r' p % long_name = 'Verner robust (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv87r_properties module procedure rkev87_properties !! Returns the properties of the [[rkev87]] method p % short_name = 'rkev87' p % long_name = 'Enright-Verner (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkev87_properties module procedure rkk87_properties !! Returns the properties of the [[rkk87]] method p % short_name = 'rkk87' p % long_name = 'Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7)' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkk87_properties module procedure rkf89_properties !! Returns the properties of the [[rkf89]] method p % short_name = 'rkf89' p % long_name = 'Fehlberg 8(9)' p % order = 8 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkf89_properties module procedure rkv89_properties !! Returns the properties of the [[rkv89]] method p % short_name = 'rkv89' p % long_name = 'Verner 8(9)' p % order = 8 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv89_properties module procedure rkt98a_properties !! Returns the properties of the [[rkt98a]] method p % short_name = 'rkt98a' p % long_name = 'Tsitouras 9(8) A' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkt98a_properties module procedure rkv98e_properties !! Returns the properties of the [[rkv98e]] method p % short_name = 'rkv98e' p % long_name = 'Verner efficient (16:9(8))' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv98e_properties module procedure rkv98r_properties !! Returns the properties of the [[rkv98r]] method p % short_name = 'rkv98r' p % long_name = 'Verner robust (16:9(8))' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv98r_properties module procedure rks98_properties !! Returns the properties of the [[rks98]] method p % short_name = 'rks98' p % long_name = 'Sharp 9(8)' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rks98_properties module procedure rkf108_properties !! Returns the properties of the [[rkf108]] method p % short_name = 'rkf108' p % long_name = 'Feagin 8(10)' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkf108_properties module procedure rkc108_properties !! Returns the properties of the [[rkc108]] method p % short_name = 'rkc108' p % long_name = 'Curtis 10(8)' p % order = 10 p % number_of_stages = 21 p % number_of_registers = 21 end procedure rkc108_properties module procedure rkb109_properties !! Returns the properties of the [[rkb109]] method p % short_name = 'rkb109' p % long_name = 'Baker 10(9)' p % order = 10 p % number_of_stages = 21 p % number_of_registers = 21 end procedure rkb109_properties module procedure rks1110a_properties !! Returns the properties of the [[rks1110a]] method p % short_name = 'rks1110a' p % long_name = 'Stone 11(10)' p % order = 11 p % number_of_stages = 26 p % number_of_registers = 26 end procedure rks1110a_properties module procedure rkf1210_properties !! Returns the properties of the [[rkf1210]] method p % short_name = 'rkf1210' p % long_name = 'Feagin 12(10)' p % order = 12 p % number_of_stages = 25 p % number_of_registers = 25 end procedure rkf1210_properties module procedure rko129_properties !! Returns the properties of the [[rko129]] method p % short_name = 'rko129' p % long_name = 'Ono 12(9)' p % order = 12 p % number_of_stages = 29 p % number_of_registers = 29 end procedure rko129_properties module procedure rkf1412_properties !! Returns the properties of the [[rkf1412]] method p % short_name = 'rkf1412' p % long_name = 'Feagin 14(12)' p % order = 14 p % number_of_stages = 35 p % number_of_registers = 35 end procedure rkf1412_properties !***************************************************************************************** end submodule rklib_variable_properties !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_variable_properties.f90.html"},{"title":"rklib_fixed_properties.f90 – rklib","text":"This file depends on sourcefile~~rklib_fixed_properties.f90~~EfferentGraph sourcefile~rklib_fixed_properties.f90 rklib_fixed_properties.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_fixed_properties.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_fixed_properties Source Code rklib_fixed_properties.f90 Source Code !***************************************************************************************** !> ! Procedures specifying the properties of the various fixed-step RK methods. submodule ( rklib_module ) rklib_fixed_properties implicit none contains !***************************************************************************************** module procedure euler_properties !! Returns the properties of the [[euler]] method p % short_name = 'euler' p % long_name = 'Euler' p % order = 1 p % number_of_stages = 1 p % number_of_registers = 1 p % cfl = 1.0_wp end procedure euler_properties module procedure midpoint_properties !! Returns the properties of the [[midpoint]] method p % short_name = 'midpoint' p % long_name = 'Midpoint' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 2 end procedure midpoint_properties module procedure heun_properties !! Returns the properties of the [[heun]] method p % short_name = 'heun' p % long_name = 'Heun' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 2 end procedure heun_properties module procedure rkssp22_properties !! Returns the properties of the [[rkssp22]] method p % short_name = 'rkssp22' p % long_name = '2-stage, 2nd order TVD Runge-Kutta Shu-Osher' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 1 p % strong_stability_preserving = . true . p % cfl = 1.0_wp end procedure rkssp22_properties module procedure rk3_properties !! Returns the properties of the [[rk3]] method p % short_name = 'rk3' p % long_name = '3th order Runge-Kutta' p % order = 3 p % number_of_stages = 3 p % number_of_registers = 3 end procedure rk3_properties module procedure rkssp33_properties !! Returns the properties of the [[rkssp33]] method p % short_name = 'rkssp33' p % long_name = '3-stage, 3rd order TVD Runge-Kutta Shu-Osher' p % order = 3 p % number_of_stages = 3 p % number_of_registers = 1 p % strong_stability_preserving = . true . p % cfl = 1.0_wp end procedure rkssp33_properties module procedure rkssp53_properties !! Returns the properties of the [[rkssp53]] method p % short_name = 'rkssp53' p % long_name = '5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth' p % order = 3 p % number_of_stages = 5 p % number_of_registers = 2 p % strong_stability_preserving = . true . p % cfl = 2.65_wp end procedure rkssp53_properties module procedure rk4_properties !! Returns the properties of the [[rk4]] method p % short_name = 'rk4' p % long_name = 'Classic 4th order Runge-Kutta' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rk4_properties module procedure rks4_properties !! Returns the properties of the [[rks4]] method p % short_name = 'rks4' p % long_name = '4th order Runge-Kutta Shanks' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rks4_properties module procedure rkr4_properties !! Returns the properties of the [[rkr4]] method p % short_name = 'rkr4' p % long_name = '4th order Runge-Kutta Ralston' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rkr4_properties module procedure rkls44_properties !! Returns the properties of the [[rkls44]] method p % short_name = 'rkls44' p % long_name = '4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 2 p % low_storage = . true . end procedure rkls44_properties module procedure rkls54_properties !! Returns the properties of the [[rkls54]] method p % short_name = 'rkls54' p % long_name = '5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy' p % order = 4 p % number_of_stages = 5 p % number_of_registers = 2 p % low_storage = . true . p % cfl = 0.32_wp end procedure rkls54_properties module procedure rkssp54_properties !! Returns the properties of the [[rkssp54]] method p % short_name = 'rkssp54' p % long_name = '5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth' p % order = 4 p % number_of_stages = 5 p % number_of_registers = 4 p % strong_stability_preserving = . true . p % cfl = 1.51_wp end procedure rkssp54_properties module procedure rks5_properties !! Returns the properties of the [[rks5]] method p % short_name = 'rks5' p % long_name = '5th order Runge-Kutta Shanks' p % order = 5 p % number_of_stages = 5 p % number_of_registers = 5 end procedure rks5_properties module procedure rk5_properties !! Returns the properties of the [[rk5]] method p % short_name = 'rk5' p % long_name = '5th order Runge-Kutta' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rk5_properties module procedure rkc5_properties !! Returns the properties of the [[rkc5]] method p % short_name = 'rkc5' p % long_name = '5th order Runge-Kutta Cassity' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkc5_properties module procedure rkl5_properties !! Returns the properties of the [[rkl5]] method p % short_name = 'rkl5' p % long_name = '5th order Runge-Kutta Lawson' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkl5_properties module procedure rklk5a_properties !! Returns the properties of the [[rklk5a]] method p % short_name = 'rklk5a' p % long_name = '5th order Runge-Kutta Luther-Konen 1' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rklk5a_properties module procedure rklk5b_properties !! Returns the properties of the [[rklk5b]] method p % short_name = 'rklk5b' p % long_name = '5th order Runge-Kutta Luther-Konen 2' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rklk5b_properties module procedure rkb6_properties !! Returns the properties of the [[rkb6]] method p % short_name = 'rkb6' p % long_name = '6th order Runge-Kutta Butcher' p % order = 6 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rkb6_properties module procedure rk7_properties !! Returns the properties of the [[rk7]] method p % short_name = 'rk7' p % long_name = '7th order Runge-Kutta Shanks' p % order = 7 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rk7_properties module procedure rk8_10_properties !! Returns the properties of the [[rk8_10]] method p % short_name = 'rk8_10' p % long_name = '10-stage, 8th order Runge-Kutta Shanks' p % order = 8 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rk8_10_properties module procedure rkcv8_properties !! Returns the properties of the [[rkcv8]] method p % short_name = 'rkcv8' p % long_name = '11-stage, 8th order Runge-Kutta Cooper-Verner' p % order = 8 p % number_of_stages = 11 p % number_of_registers = 11 end procedure rkcv8_properties module procedure rk8_12_properties !! Returns the properties of the [[rk8_12]] method p % short_name = 'rk8_12' p % long_name = '12-stage, 8th order Runge-Kutta Shanks' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rk8_12_properties module procedure rkz10_properties !! Returns the properties of the [[rkz10]] method p % short_name = 'rkz10' p % long_name = '10th order Runge-Kutta Zhang' p % order = 10 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkz10_properties module procedure rko10_properties !! Returns the properties of the [[rko10]] method p % short_name = 'rko10' p % long_name = '10th order Runge-Kutta Ono' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rko10_properties module procedure rkh10_properties !! Returns the properties of the [[rkh10]] method p % short_name = 'rkh10' p % long_name = '10th order Runge-Kutta Hairer' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkh10_properties !***************************************************************************************** end submodule rklib_fixed_properties !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_fixed_properties.f90.html"},{"title":"rklib_variable_steps.f90 – rklib","text":"This file depends on sourcefile~~rklib_variable_steps.f90~~EfferentGraph sourcefile~rklib_variable_steps.f90 rklib_variable_steps.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_variable_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_variable_steps Source Code rklib_variable_steps.f90 Source Code !***************************************************************************************** !> ! Variable-step RK formulas. submodule ( rklib_module ) rklib_variable_steps implicit none contains !***************************************************************************************** !***************************************************************************************** !> ! Bogacki-Shampine 3(2) method ! !### Reference ! * Bogacki, P and Shampine, L. F. (1989), ! \"A 3(2) pair of Runge-Kutta formulas\", ! Applied Mathematics Letters, 2 (4): 321-325 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkbs32 real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 4.0_wp ! real(wp),parameter :: b41 = 2.0_wp / 9.0_wp ! FSAL ! real(wp),parameter :: b42 = 1.0_wp / 3.0_wp ! real(wp),parameter :: b43 = 4.0_wp / 9.0_wp real ( wp ), parameter :: c1 = 2.0_wp / 9.0_wp ! 3th order real ( wp ), parameter :: c2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: c3 = 4.0_wp / 9.0_wp real ( wp ), parameter :: d1 = 7.0_wp / 2 4.0_wp ! 2nd order real ( wp ), parameter :: d2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: d3 = 1.0_wp / 3.0_wp real ( wp ), parameter :: d4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = - d4 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 ) call me % set_fsal_cache ( t + h , xf , f4 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 ) end associate end procedure rkbs32 !***************************************************************************************** !***************************************************************************************** !> ! 4-stage, 3rd order SSP Runge-Kutta method. ! ! @note ! On the current performance tests, this method shows 3rd order convergence, but its ! relative error is one order of magnitude higher than that obtained with other 3rd order ! methods. An implementation error cannot be excluded. ! !### References ! ! * Main method: Kraaijevanger, Johannes Franciscus Bernardus Maria. \"Contractivity of ! runge-kutta methods.\" BIT Numerical Mathematics 31.3 (1991): 482-528. ! [DOI: 10.1007/BF01933264](https://doi.org/10.1007/BF01933264). ! ! * Embedded method: Conde, Sidafa, Imre Fekete, and John N. Shadid. \"Embedded error ! estimation and adaptive step-size control for optimal explicit strong stability preserving ! Runge--Kutta methods.\" arXiv preprint arXiv:1806.08693 (2018). ! [arXiv: 1806.08693](https://arXiv.org/abs/1806.08693) ! ! * Implementation: Ranocha, Hendrik, et al. \"Optimized Runge-Kutta methods with automatic ! step size control for compressible computational fluid dynamics.\" Communications on Applied ! Mathematics and Computation 4.4 (2022): 1191-1228. ! [arXiv:2104.06836](https://arxiv.org/abs/2104.06836) ! module procedure rkssp43 associate ( xtilde => me % funcs (:, 1 ), & fs => me % funcs (:, 2 ), & half_h => h / 2.0_wp ) call me % f ( t , x , fs ) xf = x + half_h * fs call me % f ( t + half_h , xf , fs ) xf = xf + half_h * fs call me % f ( t + h , xf , fs ) xf = xf + half_h * fs xtilde = ( x + 2.0_wp * xf ) / 3.0_wp xf = ( 2.0_wp * x + xf ) / 3.0_wp call me % f ( t + half_h , xf , fs ) xf = xf + half_h * fs xerr = ( xtilde - xf ) / 2.0_wp end associate end procedure rkssp43 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg's 4(5) method. ! ! This is Table III, RK4(5), Formula 2 in the reference. ! !### References ! * E. Fehlberg, \"Low-order classical Runge-Kutta formulas with stepsize control and ! their application to some heat transfer problems\", NASA Technical Report R-315, ! July 1, 1969. module procedure rkf45 real ( wp ), parameter :: a2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 8.0_wp real ( wp ), parameter :: a4 = 1 2.0_wp / 1 3.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 3 2.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 3 2.0_wp real ( wp ), parameter :: b41 = 193 2.0_wp / 219 7.0_wp real ( wp ), parameter :: b42 = - 720 0.0_wp / 219 7.0_wp real ( wp ), parameter :: b43 = 729 6.0_wp / 219 7.0_wp real ( wp ), parameter :: b51 = 43 9.0_wp / 21 6.0_wp real ( wp ), parameter :: b52 = - 8.0_wp real ( wp ), parameter :: b53 = 368 0.0_wp / 51 3.0_wp real ( wp ), parameter :: b54 = - 84 5.0_wp / 410 4.0_wp real ( wp ), parameter :: b61 = - 8.0_wp / 2 7.0_wp real ( wp ), parameter :: b62 = 2.0_wp real ( wp ), parameter :: b63 = - 354 4.0_wp / 256 5.0_wp real ( wp ), parameter :: b64 = 185 9.0_wp / 410 4.0_wp real ( wp ), parameter :: b65 = - 1 1.0_wp / 4 0.0_wp real ( wp ), parameter :: c1 = 1 6.0_wp / 13 5.0_wp ! 5th order real ( wp ), parameter :: c3 = 665 6.0_wp / 1282 5.0_wp real ( wp ), parameter :: c4 = 2856 1.0_wp / 5643 0.0_wp real ( wp ), parameter :: c5 = - 9.0_wp / 5 0.0_wp real ( wp ), parameter :: c6 = 2.0_wp / 5 5.0_wp real ( wp ), parameter :: d1 = 2 5.0_wp / 21 6.0_wp ! 4th order real ( wp ), parameter :: d3 = 140 8.0_wp / 256 5.0_wp real ( wp ), parameter :: d4 = 219 7.0_wp / 410 4.0_wp real ( wp ), parameter :: d5 = - 1.0_wp / 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( d1 * f1 + d3 * f3 + d4 * f4 + d5 * f5 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 ) end associate end procedure rkf45 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Cash-Karp. ! !### Reference ! * J. R. Cash, A. H. Karp. \"A variable order Runge-Kutta method ! for initial value problems with rapidly varying right-hand sides\", ! ACM Transactions on Mathematical Software 16: 201-222, 1990 module procedure rkck54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 7.0_wp / 8.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: b42 = - 9.0_wp / 1 0.0_wp real ( wp ), parameter :: b43 = 6.0_wp / 5.0_wp real ( wp ), parameter :: b51 = - 1 1.0_wp / 5 4.0_wp real ( wp ), parameter :: b52 = 5.0_wp / 2.0_wp real ( wp ), parameter :: b53 = - 7 0.0_wp / 2 7.0_wp real ( wp ), parameter :: b54 = 3 5.0_wp / 2 7.0_wp real ( wp ), parameter :: b61 = 163 1.0_wp / 5529 6.0_wp real ( wp ), parameter :: b62 = 17 5.0_wp / 51 2.0_wp real ( wp ), parameter :: b63 = 57 5.0_wp / 1382 4.0_wp real ( wp ), parameter :: b64 = 4427 5.0_wp / 11059 2.0_wp real ( wp ), parameter :: b65 = 25 3.0_wp / 409 6.0_wp real ( wp ), parameter :: c1 = 3 7.0_wp / 37 8.0_wp ! 5th order real ( wp ), parameter :: c3 = 25 0.0_wp / 62 1.0_wp real ( wp ), parameter :: c4 = 12 5.0_wp / 59 4.0_wp real ( wp ), parameter :: c6 = 51 2.0_wp / 177 1.0_wp real ( wp ), parameter :: d1 = 282 5.0_wp / 2764 8.0_wp ! 4th order real ( wp ), parameter :: d3 = 1857 5.0_wp / 4838 4.0_wp real ( wp ), parameter :: d4 = 1352 5.0_wp / 5529 6.0_wp real ( wp ), parameter :: d5 = 27 7.0_wp / 1433 6.0_wp real ( wp ), parameter :: d6 = 1.0_wp / 4.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c6 * f6 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 ) end associate end procedure rkck54 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 5(4) method (RKDP or DOPRI) ! !### Reference ! * Dormand, J. R.; Prince, P. J. (1980), \"A family of embedded Runge-Kutta formulae\", ! Journal of Computational and Applied Mathematics, 6 (1): 19-26 ! * https://en.wikipedia.org/wiki/Dormand-Prince_method ! !@note This is a first-same-as-last (FSAL) step. module procedure rkdp54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a4 = 4.0_wp / 5.0_wp real ( wp ), parameter :: a5 = 8.0_wp / 9.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b41 = 4 4.0_wp / 4 5.0_wp real ( wp ), parameter :: b42 = - 5 6.0_wp / 1 5.0_wp real ( wp ), parameter :: b43 = 3 2.0_wp / 9.0_wp real ( wp ), parameter :: b51 = 1937 2.0_wp / 656 1.0_wp real ( wp ), parameter :: b52 = - 2536 0.0_wp / 218 7.0_wp real ( wp ), parameter :: b53 = 6444 8.0_wp / 656 1.0_wp real ( wp ), parameter :: b54 = - 21 2.0_wp / 72 9.0_wp real ( wp ), parameter :: b61 = 901 7.0_wp / 316 8.0_wp real ( wp ), parameter :: b62 = - 35 5.0_wp / 3 3.0_wp real ( wp ), parameter :: b63 = 4673 2.0_wp / 524 7.0_wp real ( wp ), parameter :: b64 = 4 9.0_wp / 17 6.0_wp real ( wp ), parameter :: b65 = - 510 3.0_wp / 1865 6.0_wp real ( wp ), parameter :: b71 = 3 5.0_wp / 38 4.0_wp real ( wp ), parameter :: b73 = 50 0.0_wp / 111 3.0_wp real ( wp ), parameter :: b74 = 12 5.0_wp / 19 2.0_wp real ( wp ), parameter :: b75 = - 218 7.0_wp / 678 4.0_wp real ( wp ), parameter :: b76 = 1 1.0_wp / 8 4.0_wp real ( wp ), parameter :: c1 = b71 ! FSAL real ( wp ), parameter :: c3 = b73 real ( wp ), parameter :: c4 = b74 real ( wp ), parameter :: c5 = b75 real ( wp ), parameter :: c6 = b76 real ( wp ), parameter :: d1 = 517 9.0_wp / 5760 0.0_wp real ( wp ), parameter :: d3 = 757 1.0_wp / 1669 5.0_wp real ( wp ), parameter :: d4 = 39 3.0_wp / 64 0.0_wp real ( wp ), parameter :: d5 = - 9209 7.0_wp / 33920 0.0_wp real ( wp ), parameter :: d6 = 18 7.0_wp / 210 0.0_wp real ( wp ), parameter :: d7 = 1.0_wp / 4 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & tf => t + h ) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( tf , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( tf , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkdp54 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras 5(4) method ! !### Reference ! * Ch. Tsitouras, \"Runge-Kutta pairs of order 5(4) satisfying only the ! first column simplifying assumption\", Computers & Mathematics with ! Applications, Vol. 62, No. 2, pp. 770 - 775, 2011. ! * [Higher-precision coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5n_1.pdf) module procedure rkt54 real ( wp ), parameter :: a2 = 0.161_wp real ( wp ), parameter :: a3 = 0.327_wp real ( wp ), parameter :: a4 = 0.9_wp real ( wp ), parameter :: a5 = 0.9800255409045096857298102862870245954942137979563024768854764293221195950761080302604_wp real ( wp ), parameter :: a6 = 1.0_wp real ( wp ), parameter :: b32 = 0.3354806554923569885444268742502307746751211773934303915373692342452941929761641411569_wp real ( wp ), parameter :: b42 = - 6.359448489975074843148159912383825625952700647415626703305928850207288721235210244366_wp real ( wp ), parameter :: b43 = 4.362295432869581411017727318190886861027813359713760212991062156752264926097707165077_wp real ( wp ), parameter :: b52 = - 1 1.74888356406282787774717033978577296188744178259862899288666928009020615663593781589_wp real ( wp ), parameter :: b53 = 7.495539342889836208304604784564358155658679161518186721010132816213648793440552049753_wp real ( wp ), parameter :: b54 = - 0.9249506636175524925650207933207191611349983406029535244034750452930469056411389539635e-1_wp real ( wp ), parameter :: b62 = - 1 2.92096931784710929170611868178335939541780751955743459166312250439928519268343184452_wp real ( wp ), parameter :: b63 = 8.159367898576158643180400794539253485181918321135053305748355423955009222648673734986_wp real ( wp ), parameter :: b64 = - 0.7158497328140099722453054252582973869127213147363544882721139659546372402303777878835e-1_wp real ( wp ), parameter :: b65 = - 0.2826905039406838290900305721271224146717633626879770007617876201276764571291579142206e-1_wp real ( wp ), parameter :: b21 = a2 real ( wp ), parameter :: b31 = a3 - ( b32 ) real ( wp ), parameter :: b41 = a4 - ( b42 + b43 ) real ( wp ), parameter :: b51 = a5 - ( b52 + b53 + b54 ) real ( wp ), parameter :: b61 = a6 - ( b62 + b63 + b64 + b65 ) real ( wp ), parameter :: c1 = 0.9646076681806522951816731316512876333711995238157997181903319145764851595234062815396e-1_wp real ( wp ), parameter :: c2 = 0.1e-1_wp real ( wp ), parameter :: c3 = 0.4798896504144995747752495322905965199130404621990332488332634944254542060153074523509_wp real ( wp ), parameter :: c4 = 1.379008574103741893192274821856872770756462643091360525934940067397245698027561293331_wp real ( wp ), parameter :: c5 = - 3.290069515436080679901047585711363850115683290894936158531296799594813811049925401677_wp real ( wp ), parameter :: c6 = 2.324710524099773982415355918398765796109060233222962411944060046314465391054716027841_wp real ( wp ), parameter :: d1 = 0.9468075576583945807478876255758922856117527357724631226139574065785592789071067303271e-1_wp real ( wp ), parameter :: d2 = 0.9183565540343253096776363936645313759813746240984095238905939532922955247253608687270e-2_wp real ( wp ), parameter :: d3 = 0.4877705284247615707855642599631228241516691959761363774365216240304071651579571959813_wp real ( wp ), parameter :: d4 = 1.234297566930478985655109673884237654035539930748192848315425833500484878378061439761_wp real ( wp ), parameter :: d5 = - 2.707712349983525454881109975059321670689605166938197378763992255714444407154902012702_wp real ( wp ), parameter :: d6 = 1.866628418170587035753719399566211498666255505244122593996591602841258328965767580089_wp real ( wp ), parameter :: d7 = 1.0_wp / 6 6.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & tf => t + h ) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( tf , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( tf , xf , f7 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkt54 !***************************************************************************************** !***************************************************************************************** !> ! Stepanov 5(4) method. ! !### References ! * Misha Stepanov, Calcolo volume 59, Article number: 41 (2022), ! [Embedded (4,5) pairs of explicit 7-stage Runge-Kutta methods with FSAL property](https://link.springer.com/article/10.1007/s10092-022-00486-1). ! [arxiv](https://arxiv.org/pdf/2108.12590.pdf) (see Table 4) Note that there is also ! a 4th order continuously differential interpolant given. module procedure rks54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 2 1.0_wp / 6 5.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 3 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 2 1.0_wp / 33 8.0_wp real ( wp ), parameter :: b32 = 44 1.0_wp / 169 0.0_wp real ( wp ), parameter :: b41 = 63 9.0_wp / 39 2.0_wp real ( wp ), parameter :: b42 = - 72 9.0_wp / 14 0.0_wp real ( wp ), parameter :: b43 = 175 5.0_wp / 39 2.0_wp real ( wp ), parameter :: b51 = 487899 1.0_wp / 169344 0.0_wp real ( wp ), parameter :: b52 = - 1660 1.0_wp / 179 2.0_wp real ( wp ), parameter :: b53 = 21006 7.0_wp / 2822 4.0_wp real ( wp ), parameter :: b54 = - 146 9.0_wp / 1728 0.0_wp real ( wp ), parameter :: b61 = 1375991 9.0_wp / 423095 4.0_wp real ( wp ), parameter :: b62 = - 299 5.0_wp / 28 7.0_wp real ( wp ), parameter :: b63 = 50731209 1.0_wp / 6129459 0.0_wp real ( wp ), parameter :: b64 = - 2 2.0_wp / 40 5.0_wp real ( wp ), parameter :: b65 = - 704 0.0_wp / 18068 7.0_wp real ( wp ), parameter :: c1 = 144 1.0_wp / 1474 2.0_wp real ( wp ), parameter :: c3 = 11424 4.0_wp / 23492 7.0_wp real ( wp ), parameter :: c4 = 11 8.0_wp / 8 1.0_wp real ( wp ), parameter :: c5 = - 1280 0.0_wp / 440 7.0_wp real ( wp ), parameter :: c6 = 4 1.0_wp / 2 2.0_wp real ( wp ), parameter :: e1 = - 1.0_wp / 27 3.0_wp real ( wp ), parameter :: e3 = 219 7.0_wp / 17402 0.0_wp real ( wp ), parameter :: e4 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: e5 = 128 0.0_wp / 146 9.0_wp real ( wp ), parameter :: e6 = - 3374 3.0_wp / 5271 2.0_wp real ( wp ), parameter :: e7 = 12 7.0_wp / 479 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rks54 !***************************************************************************************** !***************************************************************************************** !> ! Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) ! !### Reference ! * S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\", ! Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkpp54 real ( wp ), parameter :: a2 = 2.03174603174603174603174603174603174603174603174603174603174603174603174603174603175e-1_wp real ( wp ), parameter :: a3 = 3.01837270341207349081364829396325459317585301837270341207349081364829396325459317585e-1_wp real ( wp ), parameter :: a4 = 8.14973262032085561497326203208556149732620320855614973262032085561497326203208556150e-1_wp real ( wp ), parameter :: a5 = 8.92857142857142857142857142857142857142857142857142857142857142857142857142857142857e-1_wp real ( wp ), parameter :: b21 = 2.03174603174603174603174603174603174603174603174603174603174603174603174603174603175e-1_wp real ( wp ), parameter :: b31 = 7.76317438051542769752206171079008824684316035298737264141194949056564779796226259119e-2_wp real ( wp ), parameter :: b32 = 2.24205526536053072106144212288424576849153698307396614793229586459172918345836691673e-1_wp real ( wp ), parameter :: b41 = 9.97054225910649851955403847106996156261144080556828071531226332913609633807524002826e-1_wp real ( wp ), parameter :: b42 = - 3.9229583098359766207115693643000730264502583412156151006542354260709699970151262085e0_wp real ( wp ), parameter :: b43 = 3.74087734595741233025349172040163301992173458151440200238504117871885768941081076180e0_wp real ( wp ), parameter :: b51 = 2.41107195213820140711520163970784555943075679078314370129890823084996830515582884769e0_wp real ( wp ), parameter :: b52 = - 9.6949301103878662103154820500485383234086722205716227648448127788897312407254087039e0_wp real ( wp ), parameter :: b53 = 8.37096577602619810632388905477462929171641908259741309319801335095185921382851168188e0_wp real ( wp ), parameter :: b54 = - 1.9425047491939044598075150157679367059564650995179117250925166005495342111607468280e-1_wp real ( wp ), parameter :: b61 = 2.71680576250618168562042732618844645610969561203458029063121928183564071601176708510e0_wp real ( wp ), parameter :: b62 = - 1.0546836035293105493140447781471570084309037601955971025884876060757459965008137190e1_wp real ( wp ), parameter :: b63 = 8.82438454669452608734254952418112316791646628404483378649096846259826474086840654822e0_wp real ( wp ), parameter :: b64 = 3.30231934937991900184188201559235426225444020547394478857972406538849522552348656011e-1_wp real ( wp ), parameter :: b65 = - 3.2458620884559418000671727045723496594256831467083753009528409021529501442438509930e-1_wp ! real(wp),parameter :: b71 = 9.15102514359618091216858762219939898816995701624253490052873825554414393852942295257e-2_wp ! FSAL ! real(wp),parameter :: b72 = 0 ! real(wp),parameter :: b73 = 4.53088687963682563226735078441923499983686103419218207034508391590507417156754767246e-1_wp ! real(wp),parameter :: b74 = 7.70212354683768742558003248195356972937967314339813992394948819785937766391608532599e-1_wp ! real(wp),parameter :: b75 = -4.6993115056469338687729550442725993708636301781314244468307254289871602785250570955e-1_wp ! real(wp),parameter :: b76 = 1.55119856481280271970871301567985474283010029891684896248327948966829404918848180181e-1_wp real ( wp ), parameter :: c1 = 9.15102514359618091216858762219939898816995701624253490052873825554414393852942295257e-2_wp real ( wp ), parameter :: c3 = 4.53088687963682563226735078441923499983686103419218207034508391590507417156754767246e-1_wp real ( wp ), parameter :: c4 = 7.70212354683768742558003248195356972937967314339813992394948819785937766391608532599e-1_wp real ( wp ), parameter :: c5 = - 4.6993115056469338687729550442725993708636301781314244468307254289871602785250570955e-1_wp real ( wp ), parameter :: c6 = 1.55119856481280271970871301567985474283010029891684896248327948966829404918848180181e-1_wp real ( wp ), parameter :: d1 = 9.00540754825040114941655607289341515504490822369589853929344566160995864634775952099e-2_wp real ( wp ), parameter :: d3 = 4.58093041355081442291135932317120322249435302966675363526235643007610910215270397680e-1_wp real ( wp ), parameter :: d4 = 7.17141736822002520962978129215068133609337518199443217706780208321061003994969882396e-1_wp real ( wp ), parameter :: d5 = - 3.9730095904319871050513227050199810426175540655366523944169265633781699285936171784e-1_wp real ( wp ), parameter :: d6 = 1.08202581574086926233043124431351687328723979341063863291932824583521682661834318740e-1_wp real ( wp ), parameter :: d7 = 2.38095238095238095238095238095238095238095238095238095238095238095238095238095238095e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkpp54 !***************************************************************************************** !***************************************************************************************** !> ! Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). ! !### Reference ! * S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\", ! Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkpp54b real ( wp ), parameter :: a2 = 2.201257861635220125786163522012578616352201257861635220125786163522012578616352201257e-1_wp real ( wp ), parameter :: a3 = 3.206106870229007633587786259541984732824427480916030534351145038167938931297709923664e-1_wp real ( wp ), parameter :: a4 = 9.160839160839160839160839160839160839160839160839160839160839160839160839160839160839e-1_wp real ( wp ), parameter :: a5 = 9.545454545454545454545454545454545454545454545454545454545454545454545454545454545454e-1_wp real ( wp ), parameter :: b21 = 2.201257861635220125786163522012578616352201257861635220125786163522012578616352201257e-1_wp real ( wp ), parameter :: b31 = 8.712778975584173416467571819824019579278596818367228017015325447235009614824310937591e-2_wp real ( wp ), parameter :: b32 = 2.334828972670590291941029077559582774896567799079307732649612493444437969815278829905e-1_wp real ( wp ), parameter :: b41 = 1.229131120244552267075198689039393789189448076016053493121879281174531378872492304514e0_wp real ( wp ), parameter :: b42 = - 5.174619722997219626464507457640199024688660926548912688647080129723360618339765067163e0_wp real ( wp ), parameter :: b43 = 4.861572518836583443305392684684721319415296766616775279441284764632745323383356678732e0_wp real ( wp ), parameter :: b51 = 1.635985585148686070813241441537203183216255340359063210526474302100593166648405715598e0_wp real ( wp ), parameter :: b52 = - 6.911673476406501672554353133581688231701838702998878887272831441157207088140814883585e0_wp real ( wp ), parameter :: b53 = 6.264598153851822604079697377077162805912462110097874626859336947971237445955455470077e0_wp real ( wp ), parameter :: b54 = - 3.436480804855245688404023048722321197233329291260440465843435436916897900850084754553e-2_wp real ( wp ), parameter :: b61 = 2.080199455181079060589945391266072650640389894799843423576531143602673095720452243744e0_wp real ( wp ), parameter :: b62 = - 8.741042793278798222268721650787838365080091632936417117311519288907488660315135346032e0_wp real ( wp ), parameter :: b63 = 7.705947570635899833548328481096646034173724896740120966754373004394344077008935321798e0_wp real ( wp ), parameter :: b64 = 8.908088473605147947645976479787347297467362259887092033560387203210318720083482332807e-2_wp real ( wp ), parameter :: b65 = - 1.341851172742321513460119863727537927086967812024181933549887311216316996150870428391e-1_wp ! real(wp),parameter :: b71 = 9.660368812495311950055679608569466802836486587849728525846301200717776508398100546410e-2_wp ! FSAL ! real(wp),parameter :: b72 = 0 ! real(wp),parameter :: b73 = 4.847050840514515173851124515232483753229089551347247274647212546244695209679216658037e-1_wp ! real(wp),parameter :: b74 = 2.985721504066570633782817413202582623066368759430782759246016403146502612390979295903e0_wp ! real(wp),parameter :: b75 = -3.882058366130615720106688908002536902372698760219285670845605164160172370352994326721e0_wp ! real(wp),parameter :: b76 = 1.315028089887640449438202247191011235955056179775280898876404494382022471910112359550e0_wp real ( wp ), parameter :: c1 = 9.660368812495311950055679608569466802836486587849728525846301200717776508398100546410e-2_wp real ( wp ), parameter :: c3 = 4.847050840514515173851124515232483753229089551347247274647212546244695209679216658037e-1_wp real ( wp ), parameter :: c4 = 2.985721504066570633782817413202582623066368759430782759246016403146502612390979295903e0_wp real ( wp ), parameter :: c5 = - 3.882058366130615720106688908002536902372698760219285670845605164160172370352994326721e0_wp real ( wp ), parameter :: c6 = 1.315028089887640449438202247191011235955056179775280898876404494382022471910112359550e0_wp real ( wp ), parameter :: d1 = 9.532926220038256951865552620720509864047974971891244940167035171716827175894410248606e-2_wp real ( wp ), parameter :: d3 = 4.890503958633595206242721536021852509608016393506331933941960604717211861520491115111e-1_wp real ( wp ), parameter :: d4 = 2.782787369422591128285131424607412688536477162495912788909265685055380447336451073683e0_wp real ( wp ), parameter :: d5 = - 3.544320847545574336397313295146726421831558091536665262636276708453748484122524958198e0_wp real ( wp ), parameter :: d6 = 1.168225248630669689397825619301351955122370968542635402359716039780907150303652099088e0_wp real ( wp ), parameter :: d7 = 8.928571428571428571428571428571428571428571428571428571428571428571428571428571428571e-3_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkpp54b !***************************************************************************************** !***************************************************************************************** !> ! Bogacki & Shampine 5(4) ! !### Reference ! * P. Bogacki & L.F. Shampine, \"An efficient Runge-Kutta (4,5) pair\" ! Computers & Mathematics with Applications, ! Volume 32, Issue 6, September 1996, Pages 15-28 ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5p_1.pdf) ! * This pair is in [rksuite](https://github.com/jacobwilliams/rksuite) (`METHD = 2`) module procedure rkbs54 real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b32 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: b41 = 18 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 16 2.0_wp / 34 3.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 6 8.0_wp / 29 7.0_wp real ( wp ), parameter :: b52 = - 4.0_wp / 1 1.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp / 14 3.0_wp real ( wp ), parameter :: b54 = 196 0.0_wp / 386 1.0_wp real ( wp ), parameter :: b61 = 59 7.0_wp / 2252 8.0_wp real ( wp ), parameter :: b62 = 8 1.0_wp / 35 2.0_wp real ( wp ), parameter :: b63 = 6309 9.0_wp / 58572 8.0_wp real ( wp ), parameter :: b64 = 5865 3.0_wp / 36608 0.0_wp real ( wp ), parameter :: b65 = 461 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b71 = 17419 7.0_wp / 95924 4.0_wp real ( wp ), parameter :: b72 = - 3094 2.0_wp / 7993 7.0_wp real ( wp ), parameter :: b73 = 815213 7.0_wp / 1974443 9.0_wp real ( wp ), parameter :: b74 = 66610 6.0_wp / 103918 1.0_wp real ( wp ), parameter :: b75 = - 2942 1.0_wp / 2906 8.0_wp real ( wp ), parameter :: b76 = 48204 8.0_wp / 41421 9.0_wp real ( wp ), parameter :: b81 = 58 7.0_wp / 806 4.0_wp real ( wp ), parameter :: b83 = 444033 9.0_wp / 1549184 0.0_wp real ( wp ), parameter :: b84 = 2435 3.0_wp / 12480 0.0_wp real ( wp ), parameter :: b85 = 38 7.0_wp / 4480 0.0_wp real ( wp ), parameter :: b86 = 215 2.0_wp / 598 5.0_wp real ( wp ), parameter :: b87 = 726 7.0_wp / 9408 0.0_wp real ( wp ), parameter :: c1 = 58 7.0_wp / 806 4.0_wp real ( wp ), parameter :: c3 = 444033 9.0_wp / 1549184 0.0_wp real ( wp ), parameter :: c4 = 2435 3.0_wp / 12480 0.0_wp real ( wp ), parameter :: c5 = 38 7.0_wp / 4480 0.0_wp real ( wp ), parameter :: c6 = 215 2.0_wp / 598 5.0_wp real ( wp ), parameter :: c7 = 726 7.0_wp / 9408 0.0_wp ! real(wp),parameter :: d1 = 6059 / 80640 ! real(wp),parameter :: d2 = 0 ! real(wp),parameter :: d3 = 8559189 / 30983680 ! real(wp),parameter :: d4 = 26411 / 124800 ! real(wp),parameter :: d5 = -927 / 89600 ! real(wp),parameter :: d6 = 443 / 1197 ! real(wp),parameter :: d7 = 7267 / 94080 real ( wp ), parameter :: d1 = 247 9.0_wp / 3499 2.0_wp real ( wp ), parameter :: d3 = 12 3.0_wp / 41 6.0_wp real ( wp ), parameter :: d4 = 61294 1.0_wp / 341172 0.0_wp real ( wp ), parameter :: d5 = 4 3.0_wp / 144 0.0_wp real ( wp ), parameter :: d6 = 227 2.0_wp / 656 1.0_wp real ( wp ), parameter :: d7 = 7993 7.0_wp / 111391 2.0_wp real ( wp ), parameter :: d8 = 329 3.0_wp / 55695 6.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkbs54 !***************************************************************************************** !***************************************************************************************** !> ! Sharp & Smart 5(4) method. ! !### Reference ! * P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\", ! Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. module procedure rkss54 real ( wp ), parameter :: a2 = 1 6.0_wp / 10 5.0_wp real ( wp ), parameter :: a3 = 8.0_wp / 3 5.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 2 0.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 7.0_wp / 9.0_wp real ( wp ), parameter :: b21 = 1 6.0_wp / 10 5.0_wp real ( wp ), parameter :: b31 = 2.0_wp / 3 5.0_wp real ( wp ), parameter :: b32 = 6.0_wp / 3 5.0_wp real ( wp ), parameter :: b41 = 879 3.0_wp / 4096 0.0_wp real ( wp ), parameter :: b42 = - 510 3.0_wp / 819 2.0_wp real ( wp ), parameter :: b43 = 1757 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b51 = 34 7.0_wp / 145 8.0_wp real ( wp ), parameter :: b52 = - 7.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 339 5.0_wp / 1004 4.0_wp real ( wp ), parameter :: b54 = 4979 2.0_wp / 11299 5.0_wp real ( wp ), parameter :: b61 = - 122322410995 9.0_wp / 919977121440 0.0_wp real ( wp ), parameter :: b62 = 123478770 1.0_wp / 252394272 0.0_wp real ( wp ), parameter :: b63 = 56899410192 1.0_wp / 316881008496 0.0_wp real ( wp ), parameter :: b64 = - 10520968388 8.0_wp / 89122783639 5.0_wp real ( wp ), parameter :: b65 = 9.0_wp / 2 5.0_wp real ( wp ), parameter :: b71 = 246250486287 7.0_wp / 830603198880 0.0_wp real ( wp ), parameter :: b72 = - 12399 1.0_wp / 28704 0.0_wp real ( wp ), parameter :: b73 = 10652257849 1.0_wp / 40870951056 0.0_wp real ( wp ), parameter :: b74 = 59061649883 2.0_wp / 80464684891 5.0_wp real ( wp ), parameter :: b75 = - 31913872 6.0_wp / 53408127 5.0_wp real ( wp ), parameter :: b76 = 5275 8.0_wp / 7144 9.0_wp real ( wp ), parameter :: c1 = 109 3.0_wp / 1512 0.0_wp real ( wp ), parameter :: c3 = 6002 5.0_wp / 19099 2.0_wp real ( wp ), parameter :: c4 = 320 0.0_wp / 2070 9.0_wp real ( wp ), parameter :: c5 = 161 1.0_wp / 1196 0.0_wp real ( wp ), parameter :: c6 = 71223 3.0_wp / 285796 0.0_wp real ( wp ), parameter :: c7 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: d1 = 8401821 1.0_wp / 99136800 0.0_wp real ( wp ), parameter :: d3 = 9209897 9.0_wp / 35779168 0.0_wp real ( wp ), parameter :: d4 = 1760694 4.0_wp / 6789100 5.0_wp real ( wp ), parameter :: d5 = 314210 1.0_wp / 23525320 0.0_wp real ( wp ), parameter :: d6 = 2200459680 9.0_wp / 7027009150 0.0_wp real ( wp ), parameter :: d7 = 9.0_wp / 12 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkss54 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 6(5) method. ! This is `RK6(5)8M` from the reference. ! !### Reference ! * P.J. Prince, J.R. Dormand, \"High order embedded Runge-Kutta formulae\", ! Journal of Computational and Applied Mathematics, ! Volume 7, Issue 1, March 1981, Pages 67-75. module procedure rkdp65 real ( wp ), parameter :: a2 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: b31 = - 2.0_wp / 8 1.0_wp real ( wp ), parameter :: b32 = 2 0.0_wp / 8 1.0_wp real ( wp ), parameter :: b41 = 61 5.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 27 0.0_wp / 34 3.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 324 3.0_wp / 550 0.0_wp real ( wp ), parameter :: b52 = - 5 4.0_wp / 5 5.0_wp real ( wp ), parameter :: b53 = 5094 9.0_wp / 7150 0.0_wp real ( wp ), parameter :: b54 = 499 8.0_wp / 1787 5.0_wp real ( wp ), parameter :: b61 = - 2649 2.0_wp / 3712 5.0_wp real ( wp ), parameter :: b62 = 7 2.0_wp / 5 5.0_wp real ( wp ), parameter :: b63 = 280 8.0_wp / 2337 5.0_wp real ( wp ), parameter :: b64 = - 2420 6.0_wp / 3712 5.0_wp real ( wp ), parameter :: b65 = 33 8.0_wp / 45 9.0_wp real ( wp ), parameter :: b71 = 556 1.0_wp / 237 6.0_wp real ( wp ), parameter :: b72 = - 3 5.0_wp / 1 1.0_wp real ( wp ), parameter :: b73 = - 2411 7.0_wp / 3160 3.0_wp real ( wp ), parameter :: b74 = 89998 3.0_wp / 20077 2.0_wp real ( wp ), parameter :: b75 = - 522 5.0_wp / 183 6.0_wp real ( wp ), parameter :: b76 = 392 5.0_wp / 405 6.0_wp real ( wp ), parameter :: b81 = 46546 7.0_wp / 26611 2.0_wp real ( wp ), parameter :: b82 = - 294 5.0_wp / 123 2.0_wp real ( wp ), parameter :: b83 = - 561020 1.0_wp / 1415814 4.0_wp real ( wp ), parameter :: b84 = 1051357 3.0_wp / 321235 2.0_wp real ( wp ), parameter :: b85 = - 42432 5.0_wp / 20563 2.0_wp real ( wp ), parameter :: b86 = 37622 5.0_wp / 45427 2.0_wp real ( wp ), parameter :: c1 = 6 1.0_wp / 86 4.0_wp real ( wp ), parameter :: c3 = 9841 5.0_wp / 32177 6.0_wp real ( wp ), parameter :: c4 = 1680 7.0_wp / 14601 6.0_wp real ( wp ), parameter :: c5 = 137 5.0_wp / 734 4.0_wp real ( wp ), parameter :: c6 = 137 5.0_wp / 540 8.0_wp real ( wp ), parameter :: c7 = - 3 7.0_wp / 112 0.0_wp real ( wp ), parameter :: c8 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: d1 = 82 1.0_wp / 1080 0.0_wp real ( wp ), parameter :: d3 = 1968 3.0_wp / 7182 5.0_wp real ( wp ), parameter :: d4 = 17527 3.0_wp / 91260 0.0_wp real ( wp ), parameter :: d5 = 39 5.0_wp / 367 2.0_wp real ( wp ), parameter :: d6 = 78 5.0_wp / 270 4.0_wp real ( wp ), parameter :: d7 = 3.0_wp / 5 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkdp65 !***************************************************************************************** !***************************************************************************************** !> ! Calvo 6(5) method. ! !### Reference ! * M. Calvo, J.I. Montijano, L. Randez, ! \"A new embedded pair of Runge-Kutta formulas of orders 5 and 6\", ! Computers & Mathematics with Applications, Volume 20, Issue 1, 1990, Pages 15-24 module procedure rkc65 real ( wp ), parameter :: a2 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 1 4.0_wp / 2 5.0_wp real ( wp ), parameter :: a6 = 1 9.0_wp / 2 5.0_wp real ( wp ), parameter :: a7 = 3522660 7.0_wp / 3568827 9.0_wp real ( wp ), parameter :: b21 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b43 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b51 = 8672701 5.0_wp / 19685155 3.0_wp real ( wp ), parameter :: b52 = - 6012907 3.0_wp / 5262471 2.0_wp real ( wp ), parameter :: b53 = 95743643 4.0_wp / 137835237 7.0_wp real ( wp ), parameter :: b54 = 8388683 2.0_wp / 14784244 1.0_wp real ( wp ), parameter :: b61 = - 8686084 9.0_wp / 4562896 7.0_wp real ( wp ), parameter :: b62 = 11102288 5.0_wp / 2571648 7.0_wp real ( wp ), parameter :: b63 = 10804668 2.0_wp / 10116766 9.0_wp real ( wp ), parameter :: b64 = - 14175674 6.0_wp / 3600546 1.0_wp real ( wp ), parameter :: b65 = 7313986 2.0_wp / 6017063 3.0_wp real ( wp ), parameter :: b71 = 7775959 1.0_wp / 1609646 7.0_wp real ( wp ), parameter :: b72 = - 4925280 9.0_wp / 645255 5.0_wp real ( wp ), parameter :: b73 = - 38168011 1.0_wp / 5157298 4.0_wp real ( wp ), parameter :: b74 = 87926957 9.0_wp / 6678883 1.0_wp real ( wp ), parameter :: b75 = - 9045312 1.0_wp / 3372216 2.0_wp real ( wp ), parameter :: b76 = 11117955 2.0_wp / 15715582 7.0_wp real ( wp ), parameter :: b81 = 23756426 3.0_wp / 3928029 5.0_wp real ( wp ), parameter :: b82 = - 10052323 9.0_wp / 1067794 0.0_wp real ( wp ), parameter :: b83 = - 26557484 6.0_wp / 2733024 7.0_wp real ( wp ), parameter :: b84 = 31797841 1.0_wp / 1898871 3.0_wp real ( wp ), parameter :: b85 = - 12449438 5.0_wp / 3545362 7.0_wp real ( wp ), parameter :: b86 = 8682244 4.0_wp / 10013863 5.0_wp real ( wp ), parameter :: b87 = - 1287352 3.0_wp / 72423262 5.0_wp real ( wp ), parameter :: b91 = 1757234 9.0_wp / 28926252 3.0_wp real ( wp ), parameter :: b93 = 5751301 1.0_wp / 20186425 0.0_wp real ( wp ), parameter :: b94 = 1558730 6.0_wp / 35450157 1.0_wp real ( wp ), parameter :: b95 = 7178302 1.0_wp / 23498286 5.0_wp real ( wp ), parameter :: b96 = 2967200 0.0_wp / 18048016 7.0_wp real ( wp ), parameter :: b97 = 6556762 1.0_wp / 12706095 2.0_wp real ( wp ), parameter :: b98 = - 7907457 0.0_wp / 21055759 7.0_wp real ( wp ), parameter :: c1 = 1757234 9.0_wp / 28926252 3.0_wp real ( wp ), parameter :: c3 = 5751301 1.0_wp / 20186425 0.0_wp real ( wp ), parameter :: c4 = 1558730 6.0_wp / 35450157 1.0_wp real ( wp ), parameter :: c5 = 7178302 1.0_wp / 23498286 5.0_wp real ( wp ), parameter :: c6 = 2967200 0.0_wp / 18048016 7.0_wp real ( wp ), parameter :: c7 = 6556762 1.0_wp / 12706095 2.0_wp real ( wp ), parameter :: c8 = - 7907457 0.0_wp / 21055759 7.0_wp real ( wp ), parameter :: d1 = 1523166 5.0_wp / 51083033 4.0_wp real ( wp ), parameter :: d3 = 5945299 1.0_wp / 11605044 8.0_wp real ( wp ), parameter :: d4 = - 2839851 7.0_wp / 12243773 8.0_wp real ( wp ), parameter :: d5 = 5667382 4.0_wp / 13701055 9.0_wp real ( wp ), parameter :: d6 = 6800384 9.0_wp / 42667358 3.0_wp real ( wp ), parameter :: d7 = 709763 1.0_wp / 3756402 1.0_wp real ( wp ), parameter :: d8 = - 7122642 9.0_wp / 58309374 2.0_wp real ( wp ), parameter :: d9 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkc65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. ! !### Reference ! * J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\", ! Annals of Num. Math 1 1994, 225-244. ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Rational coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Efficient.00000144617.081204.RATOnWeb) ! * [Floating point coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Efficient.00000144617.081204.CoeffsOnlyFLOAT) ! !@note This is a first-same-as-last (FSAL) step. module procedure rkv65e real ( wp ), parameter :: a2 = 3.0_wp / 5 0.0_wp real ( wp ), parameter :: a3 = 143 9.0_wp / 1500 0.0_wp real ( wp ), parameter :: a4 = 143 9.0_wp / 1000 0.0_wp real ( wp ), parameter :: a5 = 497 3.0_wp / 1000 0.0_wp real ( wp ), parameter :: a6 = 38 9.0_wp / 40 0.0_wp real ( wp ), parameter :: a7 = 199 9.0_wp / 200 0.0_wp real ( wp ), parameter :: b21 = . 6e-1_wp real ( wp ), parameter :: b31 = . 192399629629629629629629629629629629629 6e-1_wp real ( wp ), parameter :: b32 = . 766933703703703703703703703703703703703 7e-1_wp real ( wp ), parameter :: b41 = . 3597 5e-1_wp real ( wp ), parameter :: b43 = . 107925_wp real ( wp ), parameter :: b51 = 1.318683415233148260919747276431735612861_wp real ( wp ), parameter :: b53 = - 5.042058063628562225427761634715637693344_wp real ( wp ), parameter :: b54 = 4.220674648395413964508014358283902080483_wp real ( wp ), parameter :: b61 = - 4 1.87259166432751461803757780644346812905_wp real ( wp ), parameter :: b63 = 15 9.4325621631374917700365669070346830453_wp real ( wp ), parameter :: b64 = - 12 2.1192135650100309202516203389242140663_wp real ( wp ), parameter :: b65 = 5.531743066200053768252631238332999150076_wp real ( wp ), parameter :: b71 = - 5 4.43015693531650433250642051294142461271_wp real ( wp ), parameter :: b73 = 20 7.0672513650184644273657173866509835987_wp real ( wp ), parameter :: b74 = - 15 8.6108137845899991828742424365058599469_wp real ( wp ), parameter :: b75 = 6.991816585950242321992597280791793907096_wp real ( wp ), parameter :: b76 = - . 185972310622032339776517179954929462369 2e-1_wp real ( wp ), parameter :: b81 = - 5 4.66374178728197680241215648050386959351_wp real ( wp ), parameter :: b83 = 20 7.9528062553893734515824816699834244238_wp real ( wp ), parameter :: b84 = - 15 9.2889574744995071508959805871426654216_wp real ( wp ), parameter :: b85 = 7.018743740796944434698170760964252490817_wp real ( wp ), parameter :: b86 = - . 183387859050457230647278200514173826836 1e-1_wp real ( wp ), parameter :: b87 = - . 511948499788209907787543249724516839584 0e-3_wp ! real(wp),parameter :: b91 = .3438957868357036009278820124728322386520e-1_wp ! FSAL ! real(wp),parameter :: b94 = .2582624555633503404659558098586120858767_wp ! real(wp),parameter :: b95 = .4209371189673537150642551514069801967032_wp ! real(wp),parameter :: b96 = 4.405396469669310170148836816197095664891_wp ! real(wp),parameter :: b97 = -176.4831190242986576151740942499002125029_wp ! real(wp),parameter :: b98 = 172.3641334014150730294022582711902413315_wp real ( wp ), parameter :: c1 = . 343895786835703600927882012472832238652 0e-1_wp real ( wp ), parameter :: c4 = . 2582624555633503404659558098586120858767_wp real ( wp ), parameter :: c5 = . 4209371189673537150642551514069801967032_wp real ( wp ), parameter :: c6 = 4.405396469669310170148836816197095664891_wp real ( wp ), parameter :: c7 = - 17 6.4831190242986576151740942499002125029_wp real ( wp ), parameter :: c8 = 17 2.3641334014150730294022582711902413315_wp real ( wp ), parameter :: d1 = . 490996764838248973090685492797122583647 9e-1_wp real ( wp ), parameter :: d4 = . 2251112229516524153401395320539875329485_wp real ( wp ), parameter :: d5 = . 4694682253029562039431948525047387412553_wp real ( wp ), parameter :: d6 = . 8065792249988867707634161808995217981443_wp real ( wp ), parameter :: d8 = - . 6071194891777959797672951465256217122488_wp real ( wp ), parameter :: d9 = . 568611394404756924114760317876613815359 4e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkv65e !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Famelis Runge-Kutta 6(5) method. ! !### Reference ! * Ch. Tsitouras and I. Th. Famelis, ! [Phase-Fitted modified Runge-Kutta pairs of orders 6(5)](https://www.researchgate.net/publication/251740152_Phase-Fitted_modified_Runge-Kutta_pairs_of_orders_65), ! ICNAAM 2006, Crete, 2006. ! * [More precise rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK6/RKcoeff6g_5.pdf) ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. ! !@note This is a first-same-as-last (FSAL) step. module procedure rktf65 real ( wp ), parameter :: a2 = 9.28961748633879781420765027322404371584699453551912568306010928961748633879781420765e-2_wp real ( wp ), parameter :: a3 = 1.44578313253012048192771084337349397590361445783132530120481927710843373493975903614e-1_wp real ( wp ), parameter :: a4 = 2.16867469879518072289156626506024096385542168674698795180722891566265060240963855422e-1_wp real ( wp ), parameter :: a5 = 5.68000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 7.11864406779661016949152542372881355932203389830508474576271186440677966101694915254e-1_wp real ( wp ), parameter :: a7 = 9.95000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 9.28961748633879781420765027322404371584699453551912568306010928961748633879781420765e-2_wp real ( wp ), parameter :: b31 = 3.20715889781663863106572284887245651635599805316233039884555941697335052470690700435e-2_wp real ( wp ), parameter :: b32 = 1.12506724274845661882113855848624832426801465251509226132026333541109868246906833571e-1_wp real ( wp ), parameter :: b41 = 5.42168674698795180722891566265060240963855421686746987951807228915662650602409638554e-2_wp real ( wp ), parameter :: b43 = 1.62650602409638554216867469879518072289156626506024096385542168674698795180722891566e-1_wp real ( wp ), parameter :: b51 = 6.56598126617283950617283950617283950617283950617283950617283950617283950617283950617e-1_wp real ( wp ), parameter :: b53 = - 2.4972770465185185185185185185185185185185185185185185185185185185185185185185185185e0_wp real ( wp ), parameter :: b54 = 2.40867891990123456790123456790123456790123456790123456790123456790123456790123456790e0_wp real ( wp ), parameter :: b61 = - 1.7212338830272756350112289300338046256920059840520750991645177506321959252208613366e0_wp real ( wp ), parameter :: b63 = 7.22310751192021126636920155870658124799459070542113115974697356535677039490201029989e0_wp real ( wp ), parameter :: b64 = - 5.4959191727393518000813340726320306436524484390690989489777480799761402436788850115e0_wp real ( wp ), parameter :: b65 = 7.05909950626077185672513986332135377282067107530551362971563451692243740099430963481e-1_wp real ( wp ), parameter :: b71 = 4.12867189716161527469018071566157538750756968750429124243842122794843113666860197270e0_wp real ( wp ), parameter :: b73 = - 1.6914025304289438220281346004343739703895247887189472122417356767305063273262951589e1_wp real ( wp ), parameter :: b74 = 1.43289813217405868844323023574174855877382144987680899683823277400972814702596244738e1_wp real ( wp ), parameter :: b75 = - 1.5533550903735309941352947451105003919180320410408681830389632181656533578398372284e0_wp real ( wp ), parameter :: b76 = 1.00472717576076705529415767637517912056749574195795909463557101742500402417456237099e0_wp real ( wp ), parameter :: b81 = 4.46860784284429599022330889710676757001193443328341367781153268526799285074027050787e0_wp real ( wp ), parameter :: b83 = - 1.8345441869429650066499014099391358577583747335752433112108627235199546393109090809e1_wp real ( wp ), parameter :: b84 = 1.55237707233543199854527260736987323920859616527670939779256214402670438227794675418e1_wp real ( wp ), parameter :: b85 = - 1.7228800213316940986071454499455146268823602061289992205388429896934101951354882736e0_wp real ( wp ), parameter :: b86 = 1.08151571740214517180934640319081789154027660669157008569533046194596896725782768317e0_wp real ( wp ), parameter :: b87 = - 5.5723928394169823792218246594446491720651508606454087850143625880490525329866504633e-3_wp ! real(wp),parameter :: b91 = 6.42309093721083246173486105540744934898802830008152394733186013531402447815498986849e-2_wp ! FSAL ! real(wp),parameter :: b94 = 3.32861824699421109595374929094856793240150741775741341700388991831307262888094726546e-1_wp ! real(wp),parameter :: b95 = 2.67859229165778080498089104036336501876704241846808785499560813816788199727204331902e-1_wp ! real(wp),parameter :: b96 = 1.79863899670938711343662526258687438581919457377762276997401953795124106054682426881e-1_wp ! real(wp),parameter :: b97 = 1.51075784805762160255845148219838318965956604578826959670696217369891977986727762107e0_wp ! real(wp),parameter :: b98 = -1.3555737109658678286129266521423384168482207697893972403776325344952795933188090051e0_wp real ( wp ), parameter :: c1 = 6.42309093721083246173486105540744934898802830008152394733186013531402447815498986849e-2_wp real ( wp ), parameter :: c4 = 3.32861824699421109595374929094856793240150741775741341700388991831307262888094726546e-1_wp real ( wp ), parameter :: c5 = 2.67859229165778080498089104036336501876704241846808785499560813816788199727204331902e-1_wp real ( wp ), parameter :: c6 = 1.79863899670938711343662526258687438581919457377762276997401953795124106054682426881e-1_wp real ( wp ), parameter :: c7 = 1.51075784805762160255845148219838318965956604578826959670696217369891977986727762107e0_wp real ( wp ), parameter :: c8 = - 1.3555737109658678286129266521423384168482207697893972403776325344952795933188090051e0_wp real ( wp ), parameter :: d1 = 6.22980954171238844288765383876964441563622264193747564518688416336360055072506207144e-2_wp real ( wp ), parameter :: d4 = 3.40203519635783669970356076069438053031579043631460538976870898652474922063170157204e-1_wp real ( wp ), parameter :: d5 = 2.35997541364108988248916956975923713134336326558729708330181566604979639253608698633e-1_wp real ( wp ), parameter :: d6 = 2.20640276396042514942275961685396046511990069015617783025687162561106239011510198458e-1_wp real ( wp ), parameter :: d7 = 1.15044133952868915480448599961883762022583301353216360785466101429534020477553812807e0_wp real ( wp ), parameter :: d8 = - 1.0029141056750815457282448660706252103934340124906797279726028170808703439444111364e0_wp real ( wp ), parameter :: d9 = - 6.6666666666666666666666666666666666666666666666666666666666666666666666666666666667e-3_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rktf65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. ! !### Reference ! * J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\", ! Annals of Num. Math 1 1994, 225-244. ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Rational coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Robust.00010102836.081204.CoeffsOnlyRAT) ! * [Floating point coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Robust.00010102836.081204.CoeffsOnlyFLOAT) ! !@note This is a first-same-as-last (FSAL) step. module procedure rkv65r real ( wp ), parameter :: a2 = . 18_wp real ( wp ), parameter :: a3 = . 1666666666666666666666666666666666666667_wp real ( wp ), parameter :: a4 = . 25_wp real ( wp ), parameter :: a5 = . 53_wp real ( wp ), parameter :: a6 = . 6_wp real ( wp ), parameter :: a7 = . 8_wp real ( wp ), parameter :: b21 = . 18_wp real ( wp ), parameter :: b31 = . 895061728395061728395061728395061728395 1e-1_wp real ( wp ), parameter :: b32 = . 771604938271604938271604938271604938271 6e-1_wp real ( wp ), parameter :: b41 = . 62 5e-1_wp real ( wp ), parameter :: b43 = . 1875_wp real ( wp ), parameter :: b51 = . 316516_wp real ( wp ), parameter :: b53 = - 1.044948_wp real ( wp ), parameter :: b54 = 1.258432_wp real ( wp ), parameter :: b61 = . 2723261273648562625722506556667430550251_wp real ( wp ), parameter :: b63 = - . 8251336032388663967611336032388663967611_wp real ( wp ), parameter :: b64 = 1.048091767881241565452091767881241565452_wp real ( wp ), parameter :: b65 = . 1047157079927685687367911796908817762840_wp real ( wp ), parameter :: b71 = - . 1669941859971651431432960727896179733320_wp real ( wp ), parameter :: b73 = . 6317085020242914979757085020242914979757_wp real ( wp ), parameter :: b74 = . 1746104455277387608214675883848816179643_wp real ( wp ), parameter :: b75 = - 1.066535645908606612252519473401868067778_wp real ( wp ), parameter :: b76 = 1.227210884353741496598639455782312925170_wp real ( wp ), parameter :: b81 = . 3642375168690958164642375168690958164642_wp real ( wp ), parameter :: b83 = - . 2040485829959514170040485829959514170040_wp real ( wp ), parameter :: b84 = - . 3488373781606864313631230924464007170774_wp real ( wp ), parameter :: b85 = 3.261932303285686744333360874714258172905_wp real ( wp ), parameter :: b86 = - 2.755102040816326530612244897959183673469_wp real ( wp ), parameter :: b87 = . 6818181818181818181818181818181818181818_wp ! real(wp),parameter :: b91 = .7638888888888888888888888888888888888889e-1_wp ! FSAL ! real(wp),parameter :: b92 = 0 ! real(wp),parameter :: b93 = 0 ! real(wp),parameter :: b94 = .3694083694083694083694083694083694083694_wp ! real(wp),parameter :: b95 = 0 ! real(wp),parameter :: b96 = .2480158730158730158730158730158730158730_wp ! real(wp),parameter :: b97 = .2367424242424242424242424242424242424242_wp ! real(wp),parameter :: b98 = .6944444444444444444444444444444444444444e-1_wp real ( wp ), parameter :: c1 = . 763888888888888888888888888888888888888 9e-1_wp real ( wp ), parameter :: c4 = . 3694083694083694083694083694083694083694_wp real ( wp ), parameter :: c6 = . 2480158730158730158730158730158730158730_wp real ( wp ), parameter :: c7 = . 2367424242424242424242424242424242424242_wp real ( wp ), parameter :: c8 = . 694444444444444444444444444444444444444 4e-1_wp real ( wp ), parameter :: d1 = . 587002096436058700209643605870020964360 6e-1_wp real ( wp ), parameter :: d4 = . 4807256235827664399092970521541950113379_wp real ( wp ), parameter :: d5 = - . 8534124207691908557883209486122831308356_wp real ( wp ), parameter :: d6 = 1.204648526077097505668934240362811791383_wp real ( wp ), parameter :: d8 = - . 592423730721603062028593943487560508837 1e-1_wp real ( wp ), parameter :: d9 = . 1685804345378813463919846898570302825622_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkv65r !***************************************************************************************** !***************************************************************************************** !> ! Verner 6(5) method. ! !### References ! * A Contrast of a New RK56 pair with DP56, by Jim Verner, ! Department of Mathematics. Simon Fraser University, Burnaby, Canada, 2006. ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK6/RKcoeff6e_3.pdf) module procedure rkv65 real ( wp ), parameter :: a2 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b31 = 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b32 = 1 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b41 = 29 1.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 2 7.0_wp / 4 9.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 8 6.0_wp / 29 7.0_wp real ( wp ), parameter :: b52 = - 1 4.0_wp / 3 3.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp / 14 3.0_wp real ( wp ), parameter :: b54 = 196 0.0_wp / 386 1.0_wp real ( wp ), parameter :: b61 = - 26 7.0_wp / 2252 8.0_wp real ( wp ), parameter :: b62 = 18 9.0_wp / 70 4.0_wp real ( wp ), parameter :: b63 = 6309 9.0_wp / 58572 8.0_wp real ( wp ), parameter :: b64 = 5865 3.0_wp / 36608 0.0_wp real ( wp ), parameter :: b65 = 461 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b71 = 1094 9.0_wp / 691 2.0_wp real ( wp ), parameter :: b72 = - 6 9.0_wp / 3 2.0_wp real ( wp ), parameter :: b73 = - 9089 1.0_wp / 6809 6.0_wp real ( wp ), parameter :: b74 = 11293 1.0_wp / 2592 0.0_wp real ( wp ), parameter :: b75 = - 6986 1.0_wp / 1792 0.0_wp real ( wp ), parameter :: b76 = 2637 8.0_wp / 1077 3.0_wp real ( wp ), parameter :: b81 = 150 1.0_wp / 1900 8.0_wp real ( wp ), parameter :: b82 = - 2 1.0_wp / 8 8.0_wp real ( wp ), parameter :: b83 = 21951 9.0_wp / 34777 6.0_wp real ( wp ), parameter :: b84 = 16380 7.0_wp / 92664 0.0_wp real ( wp ), parameter :: b85 = - 41 7.0_wp / 64 0.0_wp real ( wp ), parameter :: b86 = 154 4.0_wp / 153 9.0_wp real ( wp ), parameter :: c1 = 7 9.0_wp / 108 0.0_wp real ( wp ), parameter :: c3 = 1968 3.0_wp / 6916 0.0_wp real ( wp ), parameter :: c4 = 1680 7.0_wp / 8424 0.0_wp real ( wp ), parameter :: c6 = 281 6.0_wp / 769 5.0_wp real ( wp ), parameter :: c7 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: c8 = 18 7.0_wp / 280 0.0_wp real ( wp ), parameter :: d1 = 76 3.0_wp / 1080 0.0_wp real ( wp ), parameter :: d3 = 5904 9.0_wp / 19760 0.0_wp real ( wp ), parameter :: d4 = 8883 7.0_wp / 52650 0.0_wp real ( wp ), parameter :: d5 = 24 3.0_wp / 400 0.0_wp real ( wp ), parameter :: d6 = 1235 2.0_wp / 3847 5.0_wp real ( wp ), parameter :: d8 = 2.0_wp / 2 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkv65 !***************************************************************************************** !***************************************************************************************** !> ! Verner 6(5) 'DVERK' method. module procedure dverk65 real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 4.0_wp / 1 5.0_wp real ( wp ), parameter :: a4 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a5 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 1 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 4.0_wp / 7 5.0_wp real ( wp ), parameter :: b32 = 1 6.0_wp / 7 5.0_wp real ( wp ), parameter :: b41 = 5.0_wp / 6.0_wp real ( wp ), parameter :: b42 = - 8.0_wp / 3.0_wp real ( wp ), parameter :: b43 = 5.0_wp / 2.0_wp real ( wp ), parameter :: b51 = - 16 5.0_wp / 6 4.0_wp real ( wp ), parameter :: b52 = 5 5.0_wp / 6.0_wp real ( wp ), parameter :: b53 = - 42 5.0_wp / 6 4.0_wp real ( wp ), parameter :: b54 = 8 5.0_wp / 9 6.0_wp real ( wp ), parameter :: b61 = 1 2.0_wp / 5.0_wp real ( wp ), parameter :: b62 = - 8.0_wp real ( wp ), parameter :: b63 = 401 5.0_wp / 61 2.0_wp real ( wp ), parameter :: b64 = - 1 1.0_wp / 3 6.0_wp real ( wp ), parameter :: b65 = 8 8.0_wp / 25 5.0_wp real ( wp ), parameter :: b71 = - 826 3.0_wp / 1500 0.0_wp real ( wp ), parameter :: b72 = 12 4.0_wp / 7 5.0_wp real ( wp ), parameter :: b73 = - 64 3.0_wp / 68 0.0_wp real ( wp ), parameter :: b74 = - 8 1.0_wp / 25 0.0_wp real ( wp ), parameter :: b75 = 248 4.0_wp / 1062 5.0_wp real ( wp ), parameter :: b81 = 350 1.0_wp / 172 0.0_wp real ( wp ), parameter :: b82 = - 30 0.0_wp / 4 3.0_wp real ( wp ), parameter :: b83 = 29727 5.0_wp / 5263 2.0_wp real ( wp ), parameter :: b84 = - 31 9.0_wp / 232 2.0_wp real ( wp ), parameter :: b85 = 2406 8.0_wp / 8406 5.0_wp real ( wp ), parameter :: b87 = 385 0.0_wp / 2670 3.0_wp real ( wp ), parameter :: c1 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: c3 = 87 5.0_wp / 224 4.0_wp real ( wp ), parameter :: c4 = 2 3.0_wp / 7 2.0_wp real ( wp ), parameter :: c5 = 26 4.0_wp / 195 5.0_wp real ( wp ), parameter :: c7 = 12 5.0_wp / 1159 2.0_wp real ( wp ), parameter :: c8 = 4 3.0_wp / 61 6.0_wp real ( wp ), parameter :: d1 = 1 3.0_wp / 16 0.0_wp real ( wp ), parameter :: d3 = 237 5.0_wp / 598 4.0_wp real ( wp ), parameter :: d4 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: d5 = 1 2.0_wp / 8 5.0_wp real ( wp ), parameter :: d6 = 3.0_wp / 4 4.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b87 * f7 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure dverk65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV76.IIa.Efficient.00001675585.081206.OnWeb) module procedure rkv76e real ( wp ), parameter :: a2 = . 5e-2_wp real ( wp ), parameter :: a3 = . 1088888888888888888888888888888888888889_wp real ( wp ), parameter :: a4 = . 1633333333333333333333333333333333333333_wp real ( wp ), parameter :: a5 = . 4555_wp real ( wp ), parameter :: a6 = . 6095094489978381317087004421486024949638_wp real ( wp ), parameter :: a7 = . 884_wp real ( wp ), parameter :: a8 = . 925_wp real ( wp ), parameter :: b21 = . 5e-2_wp real ( wp ), parameter :: b31 = - 1.076790123456790123456790123456790123457_wp real ( wp ), parameter :: b32 = 1.185679012345679012345679012345679012346_wp real ( wp ), parameter :: b41 = . 408333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b43 = . 1225_wp real ( wp ), parameter :: b51 = . 6389139236255726780508121615993336109954_wp real ( wp ), parameter :: b53 = - 2.455672638223656809662640566430653894211_wp real ( wp ), parameter :: b54 = 2.272258714598084131611828404831320283215_wp real ( wp ), parameter :: b61 = - 2.661577375018757131119259297861818119279_wp real ( wp ), parameter :: b63 = 1 0.80451388645613769565396655365532838482_wp real ( wp ), parameter :: b64 = - 8.353914657396199411968048547819291691541_wp real ( wp ), parameter :: b65 = . 8204875949566569791420417341743839209619_wp real ( wp ), parameter :: b71 = 6.067741434696770992718360183877276714679_wp real ( wp ), parameter :: b73 = - 2 4.71127363591108579734203485290746001803_wp real ( wp ), parameter :: b74 = 2 0.42751793078889394045773111748346612697_wp real ( wp ), parameter :: b75 = - 1.906157978816647150624096784352757010879_wp real ( wp ), parameter :: b76 = 1.006172249242068014790040335899474187268_wp real ( wp ), parameter :: b81 = 1 2.05467007625320299509109452892778311648_wp real ( wp ), parameter :: b83 = - 4 9.75478495046898932807257615331444758322_wp real ( wp ), parameter :: b84 = 4 1.14288863860467663259698416710157354209_wp real ( wp ), parameter :: b85 = - 4.461760149974004185641911603484815375051_wp real ( wp ), parameter :: b86 = 2.042334822239174959821717077708608543738_wp real ( wp ), parameter :: b87 = - 0.9834843665406107379530801693870224403537e-1_wp real ( wp ), parameter :: b91 = 1 0.13814652288180787641845141981689030769_wp real ( wp ), parameter :: b93 = - 4 2.64113603171750214622846006736635730625_wp real ( wp ), parameter :: b94 = 3 5.76384003992257007135021178023160054034_wp real ( wp ), parameter :: b95 = - 4.348022840392907653340370296908245943710_wp real ( wp ), parameter :: b96 = 2.009862268377035895441943593011827554771_wp real ( wp ), parameter :: b97 = . 3487490460338272405953822853053145879140_wp real ( wp ), parameter :: b98 = - . 2714390051048312842371587140910297407572_wp real ( wp ), parameter :: b101 = - 4 5.03007203429867712435322405073769635151_wp real ( wp ), parameter :: b103 = 18 7.3272437654588840752418206154201997384_wp real ( wp ), parameter :: b104 = - 15 4.0288236935018690596728621034510402582_wp real ( wp ), parameter :: b105 = 1 8.56465306347536233859492332958439136765_wp real ( wp ), parameter :: b106 = - 7.141809679295078854925420496823551192821_wp real ( wp ), parameter :: b107 = 1.308808578161378625114762706007696696508_wp real ( wp ), parameter :: c1 = . 471556184862722217043176510883817567956 9e-1_wp real ( wp ), parameter :: c4 = . 2575056429843415189596436101037687580986_wp real ( wp ), parameter :: c5 = . 2621665397741262047713863095764527711129_wp real ( wp ), parameter :: c6 = . 1521609265673855740323133199165117535523_wp real ( wp ), parameter :: c7 = . 4939969170032484246907175893227876844296_wp real ( wp ), parameter :: c8 = - . 2943031171403250441557244744092703429139_wp real ( wp ), parameter :: c9 = . 813174723249510999973459944013676189247 8e-1_wp real ( wp ), parameter :: d1 = . 446086066063411762873181759747919778143 2e-1_wp real ( wp ), parameter :: d4 = . 2671640378571372680509102260943837899738_wp real ( wp ), parameter :: d5 = . 2201018300177293019979715776650753096323_wp real ( wp ), parameter :: d6 = . 2188431703143156830983120833512893824578_wp real ( wp ), parameter :: d7 = . 2289871705411202883378173889763552365362_wp real ( wp ), parameter :: d10 = . 202951846633562822276705479381043035855 4e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rkv76e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV76.IIa.Robust.000027015646.081206.CoeffsOnlyFLOAT) module procedure rkv76r real ( wp ), parameter :: a2 = . 5e-2_wp real ( wp ), parameter :: a3 = . 1088888888888888888888888888888888888889_wp real ( wp ), parameter :: a4 = . 1633333333333333333333333333333333333333_wp real ( wp ), parameter :: a5 = . 455_wp real ( wp ), parameter :: a6 = . 6059617471462913245758145021744683294809_wp real ( wp ), parameter :: a7 = . 835_wp real ( wp ), parameter :: a8 = . 915_wp real ( wp ), parameter :: b21 = . 5e-2_wp real ( wp ), parameter :: b31 = - 1.076790123456790123456790123456790123457_wp real ( wp ), parameter :: b32 = 1.185679012345679012345679012345679012346_wp real ( wp ), parameter :: b41 = . 408333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b43 = . 1225_wp real ( wp ), parameter :: b51 = . 6360714285714285714285714285714285714286_wp real ( wp ), parameter :: b53 = - 2.444464285714285714285714285714285714286_wp real ( wp ), parameter :: b54 = 2.263392857142857142857142857142857142857_wp real ( wp ), parameter :: b61 = - 2.535121107934924522925638355466021548721_wp real ( wp ), parameter :: b63 = 1 0.29937465444926792043851446075602491361_wp real ( wp ), parameter :: b64 = - 7.951303288599057994949321745826687653648_wp real ( wp ), parameter :: b65 = . 7930114892310059220122601427111526182380_wp real ( wp ), parameter :: b71 = 1.001876581252463296196919658309499980821_wp real ( wp ), parameter :: b73 = - 4.166571282442379833131393800547097145319_wp real ( wp ), parameter :: b74 = 3.834343292912864241255266521825137866520_wp real ( wp ), parameter :: b75 = - . 5023333356071084754746433022861176561240_wp real ( wp ), parameter :: b76 = . 6676847438841607711538509226985769541026_wp real ( wp ), parameter :: b81 = 2 7.25501835463076713033396381917500571735_wp real ( wp ), parameter :: b83 = - 4 2.00461727841063835531864544390929536961_wp real ( wp ), parameter :: b84 = - 1 0.53571312661948991792108160054652610372_wp real ( wp ), parameter :: b85 = 8 0.49553671141193714798365215892682663420_wp real ( wp ), parameter :: b86 = - 6 7.34388227179051346854907596321297564093_wp real ( wp ), parameter :: b87 = 1 3.04865761077793746347118702956696476271_wp real ( wp ), parameter :: b91 = - 3.039737805711496514694365865875576322688_wp real ( wp ), parameter :: b93 = 1 0.13816141032980111185794619070970015044_wp real ( wp ), parameter :: b94 = - 6.429305674864721572146282562955529806444_wp real ( wp ), parameter :: b95 = - 1.586437148340827658711531285379861057947_wp real ( wp ), parameter :: b96 = 1.892178184196842441086430890913135336502_wp real ( wp ), parameter :: b97 = . 196993354076088690612923601633364428380 1e-1_wp real ( wp ), parameter :: b98 = . 544169898279332354651027242479525729779 0e-2_wp real ( wp ), parameter :: b101 = - 1.444951891677773513735100317935571236052_wp real ( wp ), parameter :: b103 = 8.031891385995591922411703322301956043504_wp real ( wp ), parameter :: b104 = - 7.583174166340134682079888302367158860498_wp real ( wp ), parameter :: b105 = 3.581616935319007421124768544245287869686_wp real ( wp ), parameter :: b106 = - 2.436972263219952941118380906569375238373_wp real ( wp ), parameter :: b107 = . 8515899999232617933968976603248614217339_wp real ( wp ), parameter :: c1 = . 474258378337067560835691727175745346989 3e-1_wp real ( wp ), parameter :: c4 = . 2562236165937056265996172745827462344816_wp real ( wp ), parameter :: c5 = . 2695137683307420661947381725807595288676_wp real ( wp ), parameter :: c6 = . 1268662240909278284598913836473917324788_wp real ( wp ), parameter :: c7 = . 2488722594206007162204644942764749276729_wp real ( wp ), parameter :: c8 = . 307448374082006313353043884790991847686 4e-2_wp real ( wp ), parameter :: c9 = . 480238099894969433081890633471431233232 1e-1_wp real ( wp ), parameter :: d1 = . 474852476992996310375312738057279615522 7e-1_wp real ( wp ), parameter :: d4 = . 2559941258869063329715491824590539387050_wp real ( wp ), parameter :: d5 = . 2705847808106768872253089109926813573239_wp real ( wp ), parameter :: d6 = . 1250561868442599291363882232374691792045_wp real ( wp ), parameter :: d7 = . 2520446872374386050718404382019744256218_wp real ( wp ), parameter :: d10 = . 488349715214186145573819713030931375925 9e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rkv76r !***************************************************************************************** !***************************************************************************************** !> ! Sharp & Smart 7(6)) method. ! !### Reference ! * P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\", ! Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. module procedure rkss76 real ( wp ), parameter :: a2 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 2.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a4 = 4.10000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a5 = 5.70000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 8.60000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a7 = 1.89734415567554714447412739459850829747319955773081476233291234325271903458210730096e-1_wp real ( wp ), parameter :: a8 = 7.20000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 8.33333333333333333333333333333333333333333333333333333333333333333333333333333333333e-1_wp real ( wp ), parameter :: b21 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = - 9.5040000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b32 = 1.16640000000000000000000000000000000000000000000000000000000000000000000000000000000e0_wp real ( wp ), parameter :: b41 = 2.08796296296296296296296296296296296296296296296296296296296296296296296296296296296e-2_wp real ( wp ), parameter :: b43 = 3.89120370370370370370370370370370370370370370370370370370370370370370370370370370370e-1_wp real ( wp ), parameter :: b51 = 1.18750000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b53 = 1.16301546391752577319587628865979381443298969072164948453608247422680412371134020619e-1_wp real ( wp ), parameter :: b54 = 3.34948453608247422680412371134020618556701030927835051546391752577319587628865979381e-1_wp real ( wp ), parameter :: b61 = - 1.5500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b63 = 1.26419952627798163356436989147106218572232900382472285320441881685984429300871726173e0_wp real ( wp ), parameter :: b64 = - 1.4923539518900343642611683848797250859106529209621993127147766323024054982817869416e0_wp real ( wp ), parameter :: b65 = 1.24315442561205273069679849340866290018832391713747645951035781544256120527306967985e0_wp real ( wp ), parameter :: b71 = 5.32404818460847244880465705884559948010013316415508489398809027494008261005225044158e-2_wp real ( wp ), parameter :: b73 = 2.63190905005944241395058267679896015089060637096436681624641838124193103498139523636e-1_wp real ( wp ), parameter :: b74 = - 2.2992382584611251312628854152112504080421217996536744225053579460154724416916797118e-1_wp real ( wp ), parameter :: b75 = 1.15020646834503298021503942059822317395934020502096307719511499416916110119759292822e-1_wp real ( wp ), parameter :: b76 = - 1.1793792272865036330907499347198456734463853501634919800207211363690892091042619602e-2_wp real ( wp ), parameter :: b81 = 1.01833250525779410925056563242748813162631092358712093910139906641055533787858600752e-1_wp real ( wp ), parameter :: b83 = 3.67650402264021539690171893675768442020160413827130555257229267948121503927894530089e0_wp real ( wp ), parameter :: b84 = - 1.3855064886371957262483408369918407532890732638371784299323099278110242610274153464e0_wp real ( wp ), parameter :: b85 = 1.10585536543242802574001937437432027003273412482516272090263172771172002666187126910e0_wp real ( wp ), parameter :: b86 = - 1.0442483660597752261508675907091877183025101004713070424083201191960255004658089509e-1_wp real ( wp ), parameter :: b87 = - 2.6742613133552495847033672783119939782776450815708712332119223741033637886546789293e0_wp real ( wp ), parameter :: b91 = - 7.0447278725441551253173322525085182085211898876535016082680181826378260058107213334e-2_wp real ( wp ), parameter :: b93 = 2.57849022691031881978588351318784339446713208794819222430391001640703602812013523694e0_wp real ( wp ), parameter :: b94 = - 1.7350648742705534137364675443051006373149953263240864527861457323256158060409724050e0_wp real ( wp ), parameter :: b95 = 1.42076925842656275743055431879937793726979032667289381452783078677285932226590451543e0_wp real ( wp ), parameter :: b96 = - 2.9994002356151422690421464715731127083992859674624280646321971569589440552603013442e-2_wp real ( wp ), parameter :: b97 = - 1.2738969184577295296576255258337856595600446902141816152083573928383427523639249936e0_wp real ( wp ), parameter :: b98 = - 5.6523078193672326545416641274185392359344306198325340774902191286635758037098793739e-2_wp real ( wp ), parameter :: b101 = 1.12188929566497595110309434330843411185625863434326301999225595935353619019786372693e-1_wp real ( wp ), parameter :: b103 = - 9.4478179712463597825861610011719624575041188851623316508747159935931144002457572402e0_wp real ( wp ), parameter :: b104 = 4.72928685969506458483541566908828462557623316160618665528745761537386487691574498692e0_wp real ( wp ), parameter :: b105 = - 2.1535862973784519387089628138790863673524951190739517405566618338182156484450238408e0_wp real ( wp ), parameter :: b106 = - 1.5003176034455324417891524003264793431625218068048301751161484381435733494665524146e0_wp real ( wp ), parameter :: b107 = 7.32228493516381472239660644916433114018057892752031963313864026830512965942191992469e0_wp real ( wp ), parameter :: b108 = - 1.0171881348813826762245691938848731969668479025856205360601503764094927919654990399e0_wp real ( wp ), parameter :: b109 = 2.95514928252634993696651385667894218804354576106590151218235316235004803476538125126e0_wp real ( wp ), parameter :: b111 = 1.26777165953424622263709262280041924195783046360695933368685779852909039382377368327e-2_wp real ( wp ), parameter :: b113 = - 1.0069960582593041001624297555860950454903273549350063548770708526802347773053466643e1_wp real ( wp ), parameter :: b114 = 4.62534242829213472690316528870584469183038900200033492988915271866480429986075212694e0_wp real ( wp ), parameter :: b115 = - 2.1610283337552771303871477895705714199299596209426922872912146988024763221546690181e0_wp real ( wp ), parameter :: b116 = - 1.6781218510451494897112741151843512565528970972689550849978046265492823347869148500e0_wp real ( wp ), parameter :: b117 = 8.10720558296219407284479196100506119564876298707858160850972380908658055161496706221e0_wp real ( wp ), parameter :: b118 = - 9.9034046697481677826772383527914286511512256496144470729835169541686418859152250889e-1_wp real ( wp ), parameter :: b119 = 3.15422550651861313801611511995610591660252253880816949662233444183429486317261609431e0_wp real ( wp ), parameter :: c1 = 5.49699932022185175241442181883597507655769828815946565807124447154669050002194891238e-2_wp real ( wp ), parameter :: c5 = 5.27017899545901255716693676497458451526562246965950291388111745594043275344112358966e-1_wp real ( wp ), parameter :: c6 = - 5.7640010460253178146313005308307447324854309728047707823605247362054750175374841292e-1_wp real ( wp ), parameter :: c7 = 2.99473766075857495911574410718252874676717226006797736321538429237884690787951256718e-1_wp real ( wp ), parameter :: c8 = - 4.3511367243178106005606352407152054011086352330218025896985334826437712480556570901e-1_wp real ( wp ), parameter :: c9 = 1.06972120095994204935876677034564950812746194295206963084848042699967266056102464470e0_wp real ( wp ), parameter :: c10 = 6.03309172503935230080145014048744282630882217762450220670627753378570948660063724257e-2_wp real ( wp ), parameter :: d1 = 5.51948596604973952360558600324258025823235723557842084969195331387651217650789597054e-2_wp real ( wp ), parameter :: d5 = 5.38771472959210564343392307526371633391618262286599376534904900758161647057057668278e-1_wp real ( wp ), parameter :: d6 = - 7.2002415738222743602899270061101901552733320251540477745765896611188358469552535128e-1_wp real ( wp ), parameter :: d7 = 2.98535385184885222079230265390696358266728601821898916299256942162002807672289159564e-1_wp real ( wp ), parameter :: d8 = - 4.8443496217457505118337730236228616963449840154387472665426235404619128753787634184e-1_wp real ( wp ), parameter :: d9 = 1.24611378035303235082118128195796776952198421286248671471499632269996834100646561750e0_wp real ( wp ), parameter :: d11 = 6.58436213991769547325102880658436213991769547325102880658436213991769547325102880658e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 real ( wp ), parameter :: e11 = - d11 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b111 * f1 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 ), f11 ) xf = x + h * ( c1 * f1 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 ) xerr = h * ( e1 * f1 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 ) end associate end procedure rkss76 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV87.IIa.Efficient.000000282866.081208.FLOAT40OnWeb) module procedure rkv87e real ( wp ), parameter :: a2 = . 5e-1_wp real ( wp ), parameter :: a3 = . 1065625_wp real ( wp ), parameter :: a4 = . 15984375_wp real ( wp ), parameter :: a5 = . 39_wp real ( wp ), parameter :: a6 = . 465_wp real ( wp ), parameter :: a7 = . 155_wp real ( wp ), parameter :: a8 = . 943_wp real ( wp ), parameter :: a9 = . 9018020417358569582597079406783721499560_wp real ( wp ), parameter :: a10 = . 909_wp real ( wp ), parameter :: a11 = . 94_wp real ( wp ), parameter :: b21 = . 5e-1_wp real ( wp ), parameter :: b31 = - . 6993164062 5e-2_wp real ( wp ), parameter :: b32 = . 1135556640625_wp real ( wp ), parameter :: b41 = . 39960937 5e-1_wp real ( wp ), parameter :: b43 = . 1198828125_wp real ( wp ), parameter :: b51 = . 3613975628004575124052940721184028345129_wp real ( wp ), parameter :: b53 = - 1.341524066700492771819987788202715834917_wp real ( wp ), parameter :: b54 = 1.370126503900035259414693716084313000404_wp real ( wp ), parameter :: b61 = . 490472027972027972027972027972027972028 0e-1_wp real ( wp ), parameter :: b64 = . 2350972042214404739862988335493427143122_wp real ( wp ), parameter :: b65 = . 1808555929813567288109039636534544884850_wp real ( wp ), parameter :: b71 = . 616928904428904428904428904428904428904 4e-1_wp real ( wp ), parameter :: b74 = . 1123656831464027662262557035130015442303_wp real ( wp ), parameter :: b75 = - . 388504607145136676704904810811124456745 6e-1_wp real ( wp ), parameter :: b76 = . 197918871252204585537918871252204585537 9e-1_wp real ( wp ), parameter :: b81 = - 1.767630240222326875735597119572145586714_wp real ( wp ), parameter :: b84 = - 6 2.5_wp real ( wp ), parameter :: b85 = - 6.061889377376669100821361459659331999758_wp real ( wp ), parameter :: b86 = 5.650823198222763138561298030600840174201_wp real ( wp ), parameter :: b87 = 6 5.62169641937623283799566054863063741227_wp real ( wp ), parameter :: b91 = - 1.180945066554970799825116282628297957882_wp real ( wp ), parameter :: b94 = - 4 1.50473441114320841606641502701994225874_wp real ( wp ), parameter :: b95 = - 4.434438319103725011225169229846100211776_wp real ( wp ), parameter :: b96 = 4.260408188586133024812193710744693240761_wp real ( wp ), parameter :: b97 = 4 3.75364022446171584987676829438379303004_wp real ( wp ), parameter :: b98 = . 787142548991231068744647504422630755086 0e-2_wp real ( wp ), parameter :: b101 = - 1.281405999441488405459510291182054246266_wp real ( wp ), parameter :: b104 = - 4 5.04713996013986630220754257136007322267_wp real ( wp ), parameter :: b105 = - 4.731362069449576477311464265491282810943_wp real ( wp ), parameter :: b106 = 4.514967016593807841185851584597240996214_wp real ( wp ), parameter :: b107 = 4 7.44909557172985134869022392235929015114_wp real ( wp ), parameter :: b108 = . 105922829711166113568739395551654287522 8e-1_wp real ( wp ), parameter :: b109 = - . 574684226384461625443231847828629623202 1e-2_wp real ( wp ), parameter :: b111 = - 1.724470134262485191756709817484481861731_wp real ( wp ), parameter :: b114 = - 6 0.92349008483054016518434619253765246063_wp real ( wp ), parameter :: b115 = - 5.951518376222392455202832767061854868290_wp real ( wp ), parameter :: b116 = 5.556523730698456235979791650843592496839_wp real ( wp ), parameter :: b117 = 6 3.98301198033305336837536378635995939281_wp real ( wp ), parameter :: b118 = . 146420282504149615927592139175945267600 3e-1_wp real ( wp ), parameter :: b119 = . 646040877235820360362186514497765071489 2e-1_wp real ( wp ), parameter :: b1110 = - . 793032316900887898402445254869337329144 7e-1_wp real ( wp ), parameter :: b121 = - 3.301622667747079016353994789790983625569_wp real ( wp ), parameter :: b124 = - 11 8.0112723597525085666923303957898868510_wp real ( wp ), parameter :: b125 = - 1 0.14142238845611248642783916034510897595_wp real ( wp ), parameter :: b126 = 9.139311332232057923544012273556827000619_wp real ( wp ), parameter :: b127 = 12 3.3759428284042683684847180986501894364_wp real ( wp ), parameter :: b128 = 4.623244378874580474839807625067630924792_wp real ( wp ), parameter :: b129 = - 3.383277738068201923652550971536811240814_wp real ( wp ), parameter :: b1210 = 4.527592100324618189451265339351129035325_wp real ( wp ), parameter :: b1211 = - 5.828495485811622963193088019162985703755_wp real ( wp ), parameter :: b131 = - 3.039515033766309030040102851821200251056_wp real ( wp ), parameter :: b134 = - 10 9.2608680894176254686444192322164623352_wp real ( wp ), parameter :: b135 = - 9.290642497400293449717665542656897549158_wp real ( wp ), parameter :: b136 = 8.430504981764911142134299253836167803454_wp real ( wp ), parameter :: b137 = 11 4.2010010378331313557424041095523427476_wp real ( wp ), parameter :: b138 = - . 9637271342145479358162375658987901652762_wp real ( wp ), parameter :: b139 = - 5.034884088802189791198680336183332323118_wp real ( wp ), parameter :: b1310 = 5.958130824002923177540402165388172072794_wp real ( wp ), parameter :: c1 = . 442798941900795107471674666809851886211 1e-1_wp real ( wp ), parameter :: c6 = . 3541049391724448744815552028733568354121_wp real ( wp ), parameter :: c7 = . 2479692154956437828667629415370663023884_wp real ( wp ), parameter :: c8 = - 1 5.69420203883808405099207034271191213468_wp real ( wp ), parameter :: c9 = 2 5.08406496555856261343930031237186278518_wp real ( wp ), parameter :: c10 = - 3 1.73836778626027646833156112007297739997_wp real ( wp ), parameter :: c11 = 2 2.93828327398878395231483560344797018313_wp real ( wp ), parameter :: c12 = - . 2361324633071542145259900641263517600737_wp real ( wp ), parameter :: d1 = . 443126152290897921248643651020902976489 3e-1_wp real ( wp ), parameter :: d6 = . 3546095642343226447863179350895055038855_wp real ( wp ), parameter :: d7 = . 2478480431366653069619986721504458660016_wp real ( wp ), parameter :: d8 = 4.448134732475784492725128317159648871312_wp real ( wp ), parameter :: d9 = 1 9.84688636611873369930932399297687935291_wp real ( wp ), parameter :: d10 = - 2 3.58162337746561841969517960870394965085_wp real ( wp ), parameter :: d13 = - . 3601679437289775162124536737746202409110_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv87e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV87.IIa.Robust.00000754677.081208.CoeffsOnlyFLOAT) module procedure rkv87r real ( wp ), parameter :: a2 = . 25_wp real ( wp ), parameter :: a3 = . 1128884514435695538057742782152230971129_wp real ( wp ), parameter :: a4 = . 1693326771653543307086614173228346456693_wp real ( wp ), parameter :: a5 = . 424_wp real ( wp ), parameter :: a6 = . 509_wp real ( wp ), parameter :: a7 = . 867_wp real ( wp ), parameter :: a8 = . 15_wp real ( wp ), parameter :: a9 = . 7090680365138684008060140010282474786750_wp real ( wp ), parameter :: a10 = . 32_wp real ( wp ), parameter :: a11 = . 45_wp real ( wp ), parameter :: b21 = . 25_wp real ( wp ), parameter :: b31 = . 874008465049152320526863275948774119770 5e-1_wp real ( wp ), parameter :: b32 = . 254876049386543217530879506203456851358 1e-1_wp real ( wp ), parameter :: b41 = . 423331692913385826771653543307086614173 2e-1_wp real ( wp ), parameter :: b43 = . 1269995078740157480314960629921259842520_wp real ( wp ), parameter :: b51 = . 4260950588874226149488144523757227409094_wp real ( wp ), parameter :: b53 = - 1.598795284659152326542773323065718111709_wp real ( wp ), parameter :: b54 = 1.596700225771729711593958870689995370799_wp real ( wp ), parameter :: b61 = . 507193372967139295150906181385136392393 3e-1_wp real ( wp ), parameter :: b64 = . 2543337726460040758275471440887777803137_wp real ( wp ), parameter :: b65 = . 2039468900572819946573622377727085804470_wp real ( wp ), parameter :: b71 = - . 2900037471752311097038837928542589612409_wp real ( wp ), parameter :: b74 = 1.344187391026078988943868110941433700318_wp real ( wp ), parameter :: b75 = - 2.864777943361442730961110382703656282947_wp real ( wp ), parameter :: b76 = 2.677594299510594851721126064616481543870_wp real ( wp ), parameter :: b81 = . 985350113379935464697404029807270142847 6e-1_wp real ( wp ), parameter :: b85 = . 2219268063075138484202403649819738790358_wp real ( wp ), parameter :: b86 = - . 1814062291180699431269033828807395245747_wp real ( wp ), parameter :: b87 = . 109444114725625482369226149180386312541 5e-1_wp real ( wp ), parameter :: b91 = . 3871105254573114467944461816516637340565_wp real ( wp ), parameter :: b94 = - 1.442445497485527757125674555307792776717_wp real ( wp ), parameter :: b95 = 2.905398189069950931769134644923384844174_wp real ( wp ), parameter :: b96 = - 1.853771069630105929084333267581197802518_wp real ( wp ), parameter :: b97 = . 1400364809872815426949732510977124147922_wp real ( wp ), parameter :: b98 = . 5727394081149581657574677462444770648875_wp real ( wp ), parameter :: b101 = - . 1612440344443930810063001619791348059544_wp real ( wp ), parameter :: b104 = - . 1733960295735898408357840447396256789490_wp real ( wp ), parameter :: b105 = - 1.301289281406514740601681274517249252974_wp real ( wp ), parameter :: b106 = 1.137950375173861730855879213143100347212_wp real ( wp ), parameter :: b107 = - . 317476496639668801069235211380430246989 8e-1_wp real ( wp ), parameter :: b108 = . 9335129382493366643981106448605688485659_wp real ( wp ), parameter :: b109 = - . 837863183347338527033008556296164332015 0e-1_wp real ( wp ), parameter :: b111 = - . 191994448815895332815108046514835760731 4e-1_wp real ( wp ), parameter :: b114 = . 2733085726526428490794232625401612427562_wp real ( wp ), parameter :: b115 = - . 6753497320694437291969161121094238085624_wp real ( wp ), parameter :: b116 = . 3415184981384601607173848997472838271198_wp real ( wp ), parameter :: b117 = - . 679500648033757724789205161985246293919 1e-1_wp real ( wp ), parameter :: b118 = . 965917522476238788842655864912163765097 5e-1_wp real ( wp ), parameter :: b119 = . 1325308251118210118072103846654538995123_wp real ( wp ), parameter :: b1110 = . 3685495936038611344690632995153166681295_wp real ( wp ), parameter :: b121 = . 6091877403645289867688841211158881778458_wp real ( wp ), parameter :: b124 = - 2.272569085898001676899980093141308839972_wp real ( wp ), parameter :: b125 = 4.757898342694029006815525588191478549755_wp real ( wp ), parameter :: b126 = - 5.516106706692758482429468966784424824484_wp real ( wp ), parameter :: b127 = . 2900596369680119270909581856594617437818_wp real ( wp ), parameter :: b128 = . 5691423963359036822910985845480184914563_wp real ( wp ), parameter :: b129 = . 7926795760332167027133991620589332757995_wp real ( wp ), parameter :: b1210 = . 1547372045328882289412619077184989823205_wp real ( wp ), parameter :: b1211 = 1.614970895662181624708321510633454443497_wp real ( wp ), parameter :: b131 = . 8873576220853471966321169405198102270488_wp real ( wp ), parameter :: b134 = - 2.975459782108536755851363280470930158198_wp real ( wp ), parameter :: b135 = 5.600717009488163059799039254835009892383_wp real ( wp ), parameter :: b136 = - 5.915607450536674468001493018994165735184_wp real ( wp ), parameter :: b137 = . 2202968915613492701687914254080763833124_wp real ( wp ), parameter :: b138 = . 1015509782446221666614327134090299699755_wp real ( wp ), parameter :: b139 = 1.151434564738605590978039775212585055356_wp real ( wp ), parameter :: b1310 = 1.929710166527123939613436190080584365307_wp real ( wp ), parameter :: c1 = . 447295646666957142030158404290493824664 7e-1_wp real ( wp ), parameter :: c6 = . 1569103352770819981336869801072664540918_wp real ( wp ), parameter :: c7 = . 1846097340815163774070245187352627789204_wp real ( wp ), parameter :: c8 = . 2251638060208699104247941940035072197092_wp real ( wp ), parameter :: c9 = . 1479461565197023468700517988544914175374_wp real ( wp ), parameter :: c10 = . 760555424449558252697983619103364910127 3e-1_wp real ( wp ), parameter :: c11 = . 1227729023501861961082434631592143738854_wp real ( wp ), parameter :: c12 = . 418119586389916315833848428008718823767 9e-1_wp real ( wp ), parameter :: d1 = . 458471114004959258786647301220102820958 8e-1_wp real ( wp ), parameter :: d6 = . 2623189140415238743744335658484580339239_wp real ( wp ), parameter :: d7 = . 1916937233785261190448573863568842900803_wp real ( wp ), parameter :: d8 = . 2170917232790261833097840742290644856820_wp real ( wp ), parameter :: d9 = . 1273818962483370679680316945065673786790_wp real ( wp ), parameter :: d10 = . 1151053038536532625824051575004319214889_wp real ( wp ), parameter :: d13 = . 405613277984375668418233914365836080500 5e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv87r !***************************************************************************************** !***************************************************************************************** !> ! Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method ! !### References ! * Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras, ! [Runge-Kutta Embedded Methods of Orders 8(7) for Use in Quadruple Precision Computations](https://www.researchgate.net/publication/363396601_Runge-Kutta_Embedded_Methods_of_Orders_87_for_Use_in_Quadruple_Precision_Computations), ! Mathematics, Volume 10, Issue 18, 2022. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/t87.m) ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. module procedure rkk87 real ( wp ), parameter :: a2 = 2.80032137795311131773988246233287895064681826798949202422973107165103409675642981593e-2_wp real ( wp ), parameter :: a3 = 1.17211542455798199481153380377682961936340701290456762390962847695113281163272045568e-1_wp real ( wp ), parameter :: a4 = 1.75817313683697299221730070566524442904511051935685143586444271542669921744908068353e-1_wp real ( wp ), parameter :: a5 = 4.12418774972264624675725499028219180367525003545123161749372304663713787609586013029e-1_wp real ( wp ), parameter :: a6 = 4.85788040125653655249646480463893555030416915791171976577551272195807115944917385569e-1_wp real ( wp ), parameter :: a7 = 1.61945436881864850373469095233292102203653467396439966236482648418795024659046870770e-1_wp real ( wp ), parameter :: a8 = 9.69999622636762726575177046252154115146102466697694310620259374331752600661643542686e-1_wp real ( wp ), parameter :: a9 = 9.67212187169379825484211792872972399851315982484116576998481473839941803252105313177e-1_wp real ( wp ), parameter :: a10 = 9.51733593009250954565256387258796094610870512261999333726263998154934269533352125669e-1_wp real ( wp ), parameter :: a11 = 9.68202771170154148019728796247765727264175032590143665416817858054805198295905065247e-1_wp real ( wp ), parameter :: b21 = 2.80032137795311131773988246233287895064681826798949202422973107165103409675642981593e-2_wp real ( wp ), parameter :: b31 = - 1.2809147513766000602840952300143562083196457175706189219831636475705535103141265693e-1_wp real ( wp ), parameter :: b32 = 2.45303017593458205509562903379118613607705175036823097559603878184775233215504838718e-1_wp real ( wp ), parameter :: b41 = 4.39543284209243248054325176416311107261277629839212858966110678856674804362270170882e-2_wp real ( wp ), parameter :: b43 = 1.31862985262772974416297552924893332178383288951763857689833203657002441308681051264e-1_wp real ( wp ), parameter :: b51 = 3.37793581678770282454466907421349755434169654489904742664883921124336709641723527478e-1_wp real ( wp ), parameter :: b53 = - 1.2272549349642134972638116912742760383098006898941228119302659681159830923493358553e0_wp real ( wp ), parameter :: b54 = 1.30188012825770783948507028288114558866194048988029573253542612869530190101485281039e0_wp real ( wp ), parameter :: b61 = 5.55707180742854953774795421040398153698425834244408078243992150711110988336315378908e-2_wp real ( wp ), parameter :: b64 = 2.51201707056335789089668842569664694678061738700922859182154307406956224053004373812e-1_wp real ( wp ), parameter :: b65 = 1.79015614995032370782498095790188986963634606811801882820741709651062551409519978967e-1_wp real ( wp ), parameter :: b71 = 6.68574347263499831237129311835436351646983012984884556347193166264996297617553477916e-2_wp real ( wp ), parameter :: b74 = 1.18464279145447863166879557612335382759089586154167432866512942838128687075481264338e-1_wp real ( wp ), parameter :: b75 = - 4.9625776043451759740292422000972633501142622216483112027320727273129396510418976777e-2_wp real ( wp ), parameter :: b76 = 2.62494990535187638231690284383855963023506866196027758824536604264425581164307083575e-2_wp real ( wp ), parameter :: b81 = - 2.8828852333227597022830828823050925772450620891223369172510088561729332090076138712e0_wp real ( wp ), parameter :: b84 = - 6.2440208358504107644024024514118804244308557646280655968919670956442898657820780678e1_wp real ( wp ), parameter :: b85 = - 1.8568693804204652514452785270528995249754499915069250253336433143578163151508120889e0_wp real ( wp ), parameter :: b86 = 3.63680272715359047470913994410370911642713568016445118939856192986207517504148311731e0_wp real ( wp ), parameter :: b87 = 6.45131598677305048496184230256252416917236861835199785338289493414147153759342124993e1_wp real ( wp ), parameter :: b91 = - 2.8044177030062210609793681802747767950835025205736626228179150569096325843989251959e0_wp real ( wp ), parameter :: b94 = - 6.0724923514423992066404703993882607779493861739697985128789442636875454172217394054e1_wp real ( wp ), parameter :: b95 = - 1.8439925449308251307668788876911848442475862438554757484077098049668682602503860260e0_wp real ( wp ), parameter :: b96 = 3.58341131683436481398169260904220163311107056209428641899333714250541234007157548631e0_wp real ( wp ), parameter :: b97 = 6.27562314336350305301529075880419713175762252340352806429712952136086493920793363741e1_wp real ( wp ), parameter :: b98 = 9.03199061022739500562657637369442031043920598379602859131908802359360137694011980530e-4_wp real ( wp ), parameter :: b101 = - 2.3867982748517262502656630171168908345533985055664349630981323816949508696589885131e0_wp real ( wp ), parameter :: b104 = - 5.1627063109123959312754417147040225909854829131526049890819790306938208226330016825e1_wp real ( wp ), parameter :: b105 = - 1.7536886231138950479955440820659955467185829948904221201507369859127252396249986529e0_wp real ( wp ), parameter :: b106 = 3.28049564858832505325605350268523413528007142886883523265902376116967563208653997102e0_wp real ( wp ), parameter :: b107 = 5.34320383180959473568498403628072891122624268061087757470806360734926014535143237753e1_wp real ( wp ), parameter :: b108 = - 5.1871871749054814179692202838627648419279746926926280632135852213870053073114332763e-2_wp real ( wp ), parameter :: b109 = 5.86215051636139696546789708280127234169485458303572483088290904612000509294669736233e-2_wp real ( wp ), parameter :: b111 = - 2.8321844833678190185701414338307927128819672795892717761836464805524068227918002961e0_wp real ( wp ), parameter :: b114 = - 6.1331782300299804156579640111028383230359362036389968935124318342451005168121921975e1_wp real ( wp ), parameter :: b115 = - 1.8486956144396106169929005145135397640092170913037834243348598217810735996138171447e0_wp real ( wp ), parameter :: b116 = 3.60245017376559155660368881029952545634233977218873589569763598469965203717427900757e0_wp real ( wp ), parameter :: b117 = 6.33778491267616171592057963772550300254984410272010439289876706968447695603368885389e1_wp real ( wp ), parameter :: b118 = - 1.4415990912159637680387758372857367088383577073617671128542010599339480760810185327e-2_wp real ( wp ), parameter :: b119 = 1.79850128395124994545750132486994455015114960352855140561364324582618209513891071121e-2_wp real ( wp ), parameter :: b1110 = - 3.0031531771736374212615868099161882544231529622685172138561311528231108610020573246e-3_wp real ( wp ), parameter :: b121 = - 4.0538618880188790999955490264156166727875270359794492495465581102083340028760864442e0_wp real ( wp ), parameter :: b124 = - 8.9573424620688719282465667174595500838253854698064448723443082397797973834679560630e1_wp real ( wp ), parameter :: b125 = - 2.1741602779971559275874048256900391711850691989074830707636990301813342017567123130e0_wp real ( wp ), parameter :: b126 = 4.90277984566299792538628476237120023643679128602934227568174295156160923256501166825e0_wp real ( wp ), parameter :: b127 = 9.21308811959261498386202635372829188598935945642923099199446915685906551410074148629e1_wp real ( wp ), parameter :: b128 = - 1.0615798848368367252894309217989593007445778391108496729169226136688468696047739072e2_wp real ( wp ), parameter :: b129 = 7.15244888413933960825621793700326950628446023762240029384782852503289700766263846501e2_wp real ( wp ), parameter :: b1210 = - 5.8741641553458552194866804448440052315485267257872985945866582180724510668125792910e1_wp real ( wp ), parameter :: b1211 = - 5.5057747263167612955576982434494393109010422446397491970269616705184666943368933333e2_wp real ( wp ), parameter :: b131 = - 1.5426576117927492437318562966731433591238073288653428133646285261236434041035073113e1_wp real ( wp ), parameter :: b134 = - 4.0842463342275502766697135673815027343155742825350936594898511656878424252559774704e2_wp real ( wp ), parameter :: b135 = - 1.3703330210475051981990819170722577088815078067066750833460437452985770323423290388e1_wp real ( wp ), parameter :: b136 = 3.86861748380283839981840260187136546795985692447349074847554981151691738530542460349e1_wp real ( wp ), parameter :: b137 = 4.11064481162365098634151552138274804840423912301682160479008282157089539192861116480e2_wp real ( wp ), parameter :: b138 = - 5.2625896422984832125592493280526052943397760170789326525937264023403370769397788590e3_wp real ( wp ), parameter :: b139 = 3.59120401468351311263204092337603786279414890192167416431431463233495380766373955611e4_wp real ( wp ), parameter :: b1310 = - 2.9428565975170828789337889297586264433907248673913937095047691721267811559650558183e3_wp real ( wp ), parameter :: b1311 = - 2.7717790023268800945373425815230530802580454445165684044343605511598675223912861429e4_wp real ( wp ), parameter :: c1 = 4.62710144559749507643438665696565266477463923324303941594264880671698479184226674443e-2_wp ! T87bvec real ( wp ), parameter :: c6 = 3.70024261130579576116287766947369066170603597694346848542347561458083670963945787412e-1_wp real ( wp ), parameter :: c7 = 2.59046906438325331026392759493100306344056209570957698029069680004143772202534147226e-1_wp real ( wp ), parameter :: c8 = 4.39526151941350658964709597497950710839169490812990167038362808341439048915871691690e2_wp real ( wp ), parameter :: c9 = 2.54699783254442554735577328130608901983844079828777855737604201012040528247471881063e-3_wp real ( wp ), parameter :: c10 = 3.71160265008765610052766362243075634874924739787417318444668226976710753590848050226e1_wp real ( wp ), parameter :: c11 = - 4.6957326399687634573980555517438556136604535869046208947272277883667432727498150998e2_wp real ( wp ), parameter :: c12 = - 6.8840856231271330609815727620309531232087818518011356960217496959521261426131545711e0_wp real ( wp ), parameter :: c13 = 1.37281997918834547346514047866805411030176899063475546305931321540062434963579604579e-1_wp real ( wp ), parameter :: e1 = 5.85295842711462028451365622251323842688965073989360183197454435266584210000889266151e-6_wp ! T87evec real ( wp ), parameter :: e6 = 9.39126876188594677381173972498082533162562941166681876536458073485843968573614935432e-5_wp real ( wp ), parameter :: e7 = - 2.1858808218216614235946904150275890682710865952635557843966398644681448317233753310e-5_wp real ( wp ), parameter :: e8 = 3.82147409595844443746138596500996871329379548062006046484595468670810794523045735063e2_wp real ( wp ), parameter :: e9 = 7.57594006256575145190136681251802140063882902269863054941867158087541929651242123261e2_wp real ( wp ), parameter :: e10 = - 5.0572248451354316398326863204362055571090849938158216870898444305578120258688628657e0_wp real ( wp ), parameter :: e11 = - 1.1340723721698801541760405363985770050927554242983877738142540298190990694395498870e3_wp real ( wp ), parameter :: e12 = - 6.2562494403371433261049312272180260925647282293121510390454736461360125268267236809e-1_wp real ( wp ), parameter :: e13 = 1.37281997918834547346514047866805411030176899063475546305931321540062434963579604579e-2_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkk87 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV98.IIa.Efficient.000000349.081209.FLOAT6040OnWeb) module procedure rkv98e real ( wp ), parameter :: a2 = . 346 2e-1_wp real ( wp ), parameter :: a3 = . 970243506387804459482836167710061751763 3e-1_wp real ( wp ), parameter :: a4 = . 1455365259581706689224254251565092627645_wp real ( wp ), parameter :: a5 = . 561_wp real ( wp ), parameter :: a6 = . 2290079115904850126662751771814700052182_wp real ( wp ), parameter :: a7 = . 5449920884095149873337248228185299947818_wp real ( wp ), parameter :: a8 = . 645_wp real ( wp ), parameter :: a9 = . 4837500000000000000000000000000000000000_wp real ( wp ), parameter :: a10 = . 675 7e-1_wp real ( wp ), parameter :: a11 = . 2500_wp real ( wp ), parameter :: a12 = . 6590650618730998549405331618649220295334_wp real ( wp ), parameter :: a13 = . 8206_wp real ( wp ), parameter :: a14 = . 9012_wp real ( wp ), parameter :: b21 = . 346 2e-1_wp real ( wp ), parameter :: b31 = - . 38933543885728732701704268722928447853 2e-1_wp real ( wp ), parameter :: b32 = . 1359578945245091786499878854939346230295_wp real ( wp ), parameter :: b41 = . 363841314895426672306063562891273156911 1e-1_wp real ( wp ), parameter :: b43 = . 1091523944686280016918190688673819470733_wp real ( wp ), parameter :: b51 = 2.025763914393969636805657604282571047511_wp real ( wp ), parameter :: b53 = - 7.638023836496292020387602153091964592952_wp real ( wp ), parameter :: b54 = 6.173259922102322383581944548809393545442_wp real ( wp ), parameter :: b61 = . 511227558940606087279227088164828839719 7e-1_wp real ( wp ), parameter :: b64 = . 1770823794555021537929910813839068684087_wp real ( wp ), parameter :: b65 = . 8027762409222501453613869810802528375 9e-3_wp real ( wp ), parameter :: b71 = . 1316006357975216279279871693164256985334_wp real ( wp ), parameter :: b74 = - . 2957276252669636417685183174672273730699_wp real ( wp ), parameter :: b75 = . 87813780356429523742112470405388666708 2e-1_wp real ( wp ), parameter :: b76 = . 6213052975225274774321435005639430026100_wp real ( wp ), parameter :: b81 = . 716666666666666666666666666666666666666 7e-1_wp real ( wp ), parameter :: b86 = . 3305533578915319409260346730051472207728_wp real ( wp ), parameter :: b87 = . 2427799754418013924072986603281861125606_wp real ( wp ), parameter :: b91 = . 718066406250000000000000000000000000000 0e-1_wp real ( wp ), parameter :: b96 = . 3294380283228177160744825466257672816401_wp real ( wp ), parameter :: b97 = . 1165190029271822839255174533742327183599_wp real ( wp ), parameter :: b98 = - . 340136718750000000000000000000000000000 0e-1_wp real ( wp ), parameter :: b101 = . 483675764634064698661128771884408577354 9e-1_wp real ( wp ), parameter :: b106 = . 392898992567616397433319004205704700285 2e-1_wp real ( wp ), parameter :: b107 = . 1054740945890344608263649267140088017604_wp real ( wp ), parameter :: b108 = - . 214386528464831266598264229383053399621 4e-1_wp real ( wp ), parameter :: b109 = - . 1041229174627194437759832813847147895623_wp real ( wp ), parameter :: b111 = - . 266456148720147863533728924384973734053 4e-1_wp real ( wp ), parameter :: b116 = . 333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b117 = - . 1631072244872467239162704487554706387141_wp real ( wp ), parameter :: b118 = . 339608168412776119948795493001552292824 4e-1_wp real ( wp ), parameter :: b119 = . 1572319413814626097110769806810024118077_wp real ( wp ), parameter :: b1110 = . 2152267478031879552303534778794770376960_wp real ( wp ), parameter :: b121 = . 368900924870862233478635986322763398971 8e-1_wp real ( wp ), parameter :: b126 = - . 1465181576725542928653609891758501156785_wp real ( wp ), parameter :: b127 = . 2242577768172024345345469822625833796001_wp real ( wp ), parameter :: b128 = . 229440571706607263709089790275379080303 4e-1_wp real ( wp ), parameter :: b129 = - . 3585005290572876135739442488933033433 4e-2_wp real ( wp ), parameter :: b1210 = . 866922331644438550686920361904445390605 3e-1_wp real ( wp ), parameter :: b1211 = . 4383840651968337846196219974168630120572_wp real ( wp ), parameter :: b131 = - . 4866012215113340846662212357570395295088_wp real ( wp ), parameter :: b136 = - 6.304602650282852990657772792012007122988_wp real ( wp ), parameter :: b137 = - . 281245618289472564778284183790118418111_wp real ( wp ), parameter :: b138 = - 2.679019236219849057687906597489223155566_wp real ( wp ), parameter :: b139 = . 518815663924157511565311164615012522024_wp real ( wp ), parameter :: b1310 = 1.365353187603341710683633635235238678626_wp real ( wp ), parameter :: b1311 = 5.885091088503946585721274891680604830712_wp real ( wp ), parameter :: b1312 = 2.802808786272062889819965117517532194812_wp real ( wp ), parameter :: b141 = . 4185367457753471441471025246471931649633_wp real ( wp ), parameter :: b146 = 6.724547581906459363100870806514855026676_wp real ( wp ), parameter :: b147 = - . 425444280164611790606983409697113064616_wp real ( wp ), parameter :: b148 = 3.343279153001265577811816947557982637749_wp real ( wp ), parameter :: b149 = . 617081663117537759528421117507709784737_wp real ( wp ), parameter :: b1410 = - . 929966123939932833937749523988800852013_wp real ( wp ), parameter :: b1411 = - 6.099948804751010722472962837945508844846_wp real ( wp ), parameter :: b1412 = - 3.002206187889399044804158084895173690015_wp real ( wp ), parameter :: b1413 = . 2553202529443445472336424602988558373637_wp real ( wp ), parameter :: b151 = - . 779374086122884664644623040843840506343_wp real ( wp ), parameter :: b156 = - 1 3.93734253810777678786523664804936051203_wp real ( wp ), parameter :: b157 = 1.252048853379357320949735183924200895136_wp real ( wp ), parameter :: b158 = - 1 4.69150040801686878191527989293072091588_wp real ( wp ), parameter :: b159 = - . 494705058533141685655191992136962873577_wp real ( wp ), parameter :: b1510 = 2.242974909146236657906984549543692874755_wp real ( wp ), parameter :: b1511 = 1 3.36789380382864375813864978592679139881_wp real ( wp ), parameter :: b1512 = 1 4.39665048665068644512236935340272139005_wp real ( wp ), parameter :: b1513 = - . 7975813331776800379127866056663258667437_wp real ( wp ), parameter :: b1514 = . 4409353709534277758753793068298041158235_wp real ( wp ), parameter :: b161 = 2.058051337466886442151242368989994043993_wp real ( wp ), parameter :: b166 = 2 2.35793772796803295519317565842520212899_wp real ( wp ), parameter :: b167 = . 90949810997556332745009198137971890783_wp real ( wp ), parameter :: b168 = 3 5.89110098240264104710550686568482456493_wp real ( wp ), parameter :: b169 = - 3.442515027624453437985000403608480262211_wp real ( wp ), parameter :: b1610 = - 4.865481358036368826566013387928704014496_wp real ( wp ), parameter :: b1611 = - 1 8.90980381354342625688427480879773032857_wp real ( wp ), parameter :: b1612 = - 3 4.26354448030451782929251177395134170515_wp real ( wp ), parameter :: b1613 = 1.264756521695642578827783499806516664686_wp real ( wp ), parameter :: c1 = . 146119768584231525205154191501878471345 9e-1_wp real ( wp ), parameter :: c8 = - . 3915211862331339089410228267288242030810_wp real ( wp ), parameter :: c9 = . 2310932500289506415909675644868993669908_wp real ( wp ), parameter :: c10 = . 1274766769992852382560589467488989175618_wp real ( wp ), parameter :: c11 = . 2246434176204157731566981937082069688984_wp real ( wp ), parameter :: c12 = . 5684352689748512932705226972873692126743_wp real ( wp ), parameter :: c13 = . 582587155721582720081476802186342090215 5e-1_wp real ( wp ), parameter :: c14 = . 1364317403482215641609022744494239843327_wp real ( wp ), parameter :: c15 = . 305701398308279739772100506792036964666 4e-1_wp real ( wp ), parameter :: d1 = . 199699651488677308551850841809886875646 4e-1_wp real ( wp ), parameter :: d8 = 2.191499304949330054530747099310837524864_wp real ( wp ), parameter :: d9 = . 885707184820843803083372203178635886295 3e-1_wp real ( wp ), parameter :: d10 = . 1140560234865965622484956605091432032674_wp real ( wp ), parameter :: d11 = . 2533163805345107065564577734569651977347_wp real ( wp ), parameter :: d12 = - 2.056564386240941011158999594595981300493_wp real ( wp ), parameter :: d13 = . 3408096799013119935160094894224543812830_wp real ( wp ), parameter :: d16 = . 483423137382395831437672673977287171490 2e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv98e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV98.IIa.Robust.000000351.081209.CoeffsOnlyFLOAT6040) module procedure rkv98r real ( wp ), parameter :: a2 = . 4e-1_wp real ( wp ), parameter :: a3 = . 964873601378736124523503937966635674370 8e-1_wp real ( wp ), parameter :: a4 = . 1447310402068104186785255906949953511556_wp real ( wp ), parameter :: a5 = . 576_wp real ( wp ), parameter :: a6 = . 2272326564618766017153738192188229509142_wp real ( wp ), parameter :: a7 = . 5407673435381233982846261807811770490858_wp real ( wp ), parameter :: a8 = . 64_wp real ( wp ), parameter :: a9 = . 48_wp real ( wp ), parameter :: a10 = . 675 4e-1_wp real ( wp ), parameter :: a11 = . 25_wp real ( wp ), parameter :: a12 = . 6770920153543242682384311058159603931192_wp real ( wp ), parameter :: a13 = . 8115_wp real ( wp ), parameter :: a14 = . 906_wp real ( wp ), parameter :: b21 = . 4e-1_wp real ( wp ), parameter :: b31 = - . 19885273191822909765024151146608912934 5e-1_wp real ( wp ), parameter :: b32 = . 1163726333296965222173745449432724803716_wp real ( wp ), parameter :: b41 = . 361827600517026046696313976737488377889 0e-1_wp real ( wp ), parameter :: b43 = . 1085482801551078140088941930212465133667_wp real ( wp ), parameter :: b51 = 2.272114264290177409193144938921415409241_wp real ( wp ), parameter :: b53 = - 8.526886447976398578316416192982602292786_wp real ( wp ), parameter :: b54 = 6.830772183686221169123271254061186883545_wp real ( wp ), parameter :: b61 = . 509438553538937439451266856678343412397 8e-1_wp real ( wp ), parameter :: b64 = . 1755865049809071110203693328749561646990_wp real ( wp ), parameter :: b65 = . 7022961270757467498778006760324449753 5e-3_wp real ( wp ), parameter :: b71 = . 1424783668683284782770955365543878809824_wp real ( wp ), parameter :: b74 = - . 3541799434668684104094753917518523845155_wp real ( wp ), parameter :: b75 = . 759531545029510088900153420277855015993 2e-1_wp real ( wp ), parameter :: b76 = . 6765157656337123215269906939508560510196_wp real ( wp ), parameter :: b81 = . 711111111111111111111111111111111111111 1e-1_wp real ( wp ), parameter :: b86 = . 3279909287605898328568406057725491803016_wp real ( wp ), parameter :: b87 = . 2408979601282990560320482831163397085872_wp real ( wp ), parameter :: b91 = . 712 5e-1_wp real ( wp ), parameter :: b96 = . 3268842451575245554847578757216915662785_wp real ( wp ), parameter :: b97 = . 1156157548424754445152421242783084337215_wp real ( wp ), parameter :: b98 = - . 337 5e-1_wp real ( wp ), parameter :: b101 = . 482267732246581017838711208767361111111 1e-1_wp real ( wp ), parameter :: b106 = . 394855998049540011076954970418610816767 7e-1_wp real ( wp ), parameter :: b107 = . 1058851161934658144373823566907778072121_wp real ( wp ), parameter :: b108 = - . 215200632047430934666442871093750000000 0e-1_wp real ( wp ), parameter :: b109 = - . 1045374260183348238623046875000000000000_wp real ( wp ), parameter :: b111 = - . 260911343575492341221092868996201106517 9e-1_wp real ( wp ), parameter :: b116 = . 333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b117 = - . 1652504006638105086724681598195267241410_wp real ( wp ), parameter :: b118 = . 343466411836861665831941989567883877664 7e-1_wp real ( wp ), parameter :: b119 = . 1595758283215209043195814910843067811951_wp real ( wp ), parameter :: b1110 = . 2140857321828193385584684233447183324979_wp real ( wp ), parameter :: b121 = - . 36284233962556585907650997909126710552 8e-1_wp real ( wp ), parameter :: b126 = - 1.096167597427208807028761474420297770752_wp real ( wp ), parameter :: b127 = . 1826035504321331052308236240517254331348_wp real ( wp ), parameter :: b128 = . 70822544441706832561302868545562512374 1e-1_wp real ( wp ), parameter :: b129 = - . 23136470184824312699992973848263040714 6e-1_wp real ( wp ), parameter :: b1210 = . 2711204726320932916455631550463654973432_wp real ( wp ), parameter :: b1211 = 1.308133749422980744437146904349994472286_wp real ( wp ), parameter :: b131 = - . 5074635056416974879347823927726392374259_wp real ( wp ), parameter :: b136 = - 6.631342198657237090355284142048733580937_wp real ( wp ), parameter :: b137 = - . 252748010090880105270020973014860316405_wp real ( wp ), parameter :: b138 = - . 4952612380036095562991116175550167835424_wp real ( wp ), parameter :: b139 = . 293252554525388690285739720360003594753_wp real ( wp ), parameter :: b1310 = 1.440108693768280908474851998204423941413_wp real ( wp ), parameter :: b1311 = 6.237934498647055877243623886838802127716_wp real ( wp ), parameter :: b1312 = . 7270192054526987638549835199880202544289_wp real ( wp ), parameter :: b141 = . 6130118256955931701496387847232542148725_wp real ( wp ), parameter :: b146 = 9.088803891640463313341034206647776279557_wp real ( wp ), parameter :: b147 = - . 407378815629344868103315381138325162923_wp real ( wp ), parameter :: b148 = 1.790733389490374687043894756399015035977_wp real ( wp ), parameter :: b149 = . 714927166761755073724875250629602731782_wp real ( wp ), parameter :: b1410 = - 1.438580857841722850237810322456327208949_wp real ( wp ), parameter :: b1411 = - 8.263329312064740580595954649844133476994_wp real ( wp ), parameter :: b1412 = - 1.537570570808865115231450725068826856201_wp real ( wp ), parameter :: b1413 = . 3453832827564871699090880801079644428793_wp real ( wp ), parameter :: b151 = - 1.211697910343873872490625222495537087293_wp real ( wp ), parameter :: b156 = - 1 9.05581871559595277753334676575234493500_wp real ( wp ), parameter :: b157 = 1.26306067538987510135943101851905310045_wp real ( wp ), parameter :: b158 = - 6.913916969178458046793476128409110926069_wp real ( wp ), parameter :: b159 = - . 676462266509498065300115641383621209887_wp real ( wp ), parameter :: b1510 = 3.367860445026607887090352785684064242560_wp real ( wp ), parameter :: b1511 = 1 8.00675164312590810020103216906571965203_wp real ( wp ), parameter :: b1512 = 6.838828926794279896350389904990814350968_wp real ( wp ), parameter :: b1513 = - 1.031516451921950498420447675652291096155_wp real ( wp ), parameter :: b1514 = . 4129106232130622755368055554332539084021_wp real ( wp ), parameter :: b161 = 2.157389007494053627033175177985666660692_wp real ( wp ), parameter :: b166 = 2 3.80712219809580523172312179815279712750_wp real ( wp ), parameter :: b167 = . 88627792492165554903036801415266308369_wp real ( wp ), parameter :: b168 = 1 3.13913039759876381480201677314222971522_wp real ( wp ), parameter :: b169 = - 2.604415709287714883747369630937415176632_wp real ( wp ), parameter :: b1610 = - 5.193859949783872300189266203049579105962_wp real ( wp ), parameter :: b1611 = - 2 0.41234071154150778768154893536134356354_wp real ( wp ), parameter :: b1612 = - 1 2.30085625250572261314889445241581039623_wp real ( wp ), parameter :: b1613 = 1.521553095008539362178397458330791655267_wp real ( wp ), parameter :: c1 = . 145888527840553971910153958225575291703 4e-1_wp real ( wp ), parameter :: c8 = . 202419788788933265056666668319565609782 5e-2_wp real ( wp ), parameter :: c9 = . 2178047084569716646796256135839225745895_wp real ( wp ), parameter :: c10 = . 1274895340854389692868677968654808668201_wp real ( wp ), parameter :: c11 = . 2244617745463131861258531547137348031621_wp real ( wp ), parameter :: c12 = . 1787254491259903095100090833796054447157_wp real ( wp ), parameter :: c13 = . 759434475809655717290830341651317307628 3e-1_wp real ( wp ), parameter :: c14 = . 1294845879197561516869001434704642286297_wp real ( wp ), parameter :: c15 = . 294774476126194171400791113159071660520 2e-1_wp real ( wp ), parameter :: d1 = . 203466665522443459970788509883290698664 9e-1_wp real ( wp ), parameter :: d8 = 1.069617650982700109541321983413338230042_wp real ( wp ), parameter :: d9 = . 768083471130318727867313026185035053033 8e-1_wp real ( wp ), parameter :: d10 = . 1130778186885240437498706751119241126785_wp real ( wp ), parameter :: d11 = . 2552587357981962194892445789565762186511_wp real ( wp ), parameter :: d12 = - . 9825898086919164036191607912120918904022_wp real ( wp ), parameter :: d13 = . 3981545824421514217762002137442675068982_wp real ( wp ), parameter :: d16 = . 493260071150683902787131863791532469620 8e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + & b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + & b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + & b1511 * f11 + b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + & b1611 * f11 + b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv98r !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW6(4) Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp64.m](http://users.uoa.gr/~tsitourasc/rktp64.m)) module procedure rktp64 real ( wp ), parameter :: b21 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b41 = 6 6.0_wp / 34 3.0_wp real ( wp ), parameter :: b42 = - 72 9.0_wp / 137 2.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 1333 9.0_wp / 4915 2.0_wp real ( wp ), parameter :: b52 = - 461 7.0_wp / 1638 4.0_wp real ( wp ), parameter :: b53 = 542 7.0_wp / 5324 8.0_wp real ( wp ), parameter :: b54 = 9520 7.0_wp / 15974 4.0_wp real ( wp ), parameter :: b61 = - 693 5.0_wp / 5712 2.0_wp real ( wp ), parameter :: b62 = 2308 5.0_wp / 4833 4.0_wp real ( wp ), parameter :: b63 = 3336336 0.0_wp / 27364294 1.0_wp real ( wp ), parameter :: b64 = 97216 0.0_wp / 11844246 7.0_wp real ( wp ), parameter :: b65 = 17268736 0.0_wp / 61043425 3.0_wp real ( wp ), parameter :: b71 = 61 1.0_wp / 189 1.0_wp real ( wp ), parameter :: b72 = - 461 7.0_wp / 756 4.0_wp real ( wp ), parameter :: b73 = 604100 7.0_wp / 1317648 8.0_wp real ( wp ), parameter :: b74 = 1270883 6.0_wp / 2210011 7.0_wp real ( wp ), parameter :: b75 = - 3584000 0.0_wp / 6246162 1.0_wp real ( wp ), parameter :: b76 = 659759 1.0_wp / 797245 6.0_wp real ( wp ), parameter :: a2 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 1 1.0_wp / 1 6.0_wp real ( wp ), parameter :: a6 = 1 0.0_wp / 1 3.0_wp real ( wp ), parameter :: c1 = 13 1.0_wp / 180 0.0_wp ! 6th order formula real ( wp ), parameter :: c3 = 112193 1.0_wp / 390208 0.0_wp real ( wp ), parameter :: c4 = 31933 3.0_wp / 168292 8.0_wp real ( wp ), parameter :: c5 = 26214 4.0_wp / 247732 5.0_wp real ( wp ), parameter :: c6 = 408422 3.0_wp / 1517760 0.0_wp real ( wp ), parameter :: c7 = 189 1.0_wp / 2520 0.0_wp real ( wp ), parameter :: d1 = 269425 3.0_wp / 2610036 0.0_wp ! 4th order formula real ( wp ), parameter :: d3 = 8364732 3.0_wp / 53580436 0.0_wp real ( wp ), parameter :: d4 = 69120228 1.0_wp / 178906104 0.0_wp real ( wp ), parameter :: d5 = - 127554764 8.0_wp / 1056520822 5.0_wp real ( wp ), parameter :: d6 = 2.0_wp / 5.0_wp real ( wp ), parameter :: d7 = 189 1.0_wp / 2520 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rktp64 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg's 7(8) algorithm. ! !### Reference ! * E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order ! Runge-Kutta Formulas with Stepsize Control\", ! [NASA TR R-2870](https://ntrs.nasa.gov/citations/19680027281). module procedure rkf78 real ( wp ), parameter :: a1 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a4 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a6 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a8 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b10 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b20 = 1.0_wp / 3 6.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b30 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 8.0_wp real ( wp ), parameter :: b40 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: b42 = - 2 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b43 = 2 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b50 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b54 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b60 = - 2 5.0_wp / 10 8.0_wp real ( wp ), parameter :: b63 = 12 5.0_wp / 10 8.0_wp real ( wp ), parameter :: b64 = - 6 5.0_wp / 2 7.0_wp real ( wp ), parameter :: b65 = 12 5.0_wp / 5 4.0_wp real ( wp ), parameter :: b70 = 3 1.0_wp / 30 0.0_wp real ( wp ), parameter :: b74 = 6 1.0_wp / 22 5.0_wp real ( wp ), parameter :: b75 = - 2.0_wp / 9.0_wp real ( wp ), parameter :: b76 = 1 3.0_wp / 90 0.0_wp real ( wp ), parameter :: b80 = 2.0_wp real ( wp ), parameter :: b83 = - 5 3.0_wp / 6.0_wp real ( wp ), parameter :: b84 = 70 4.0_wp / 4 5.0_wp real ( wp ), parameter :: b85 = - 10 7.0_wp / 9.0_wp real ( wp ), parameter :: b86 = 6 7.0_wp / 9 0.0_wp real ( wp ), parameter :: b87 = 3.0_wp real ( wp ), parameter :: b90 = - 9 1.0_wp / 10 8.0_wp real ( wp ), parameter :: b93 = 2 3.0_wp / 10 8.0_wp real ( wp ), parameter :: b94 = - 97 6.0_wp / 13 5.0_wp real ( wp ), parameter :: b95 = 31 1.0_wp / 5 4.0_wp real ( wp ), parameter :: b96 = - 1 9.0_wp / 6 0.0_wp real ( wp ), parameter :: b97 = 1 7.0_wp / 6.0_wp real ( wp ), parameter :: b98 = - 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b100 = 238 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b103 = - 34 1.0_wp / 16 4.0_wp real ( wp ), parameter :: b104 = 449 6.0_wp / 102 5.0_wp real ( wp ), parameter :: b105 = - 30 1.0_wp / 8 2.0_wp real ( wp ), parameter :: b106 = 213 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b107 = 4 5.0_wp / 8 2.0_wp real ( wp ), parameter :: b108 = 4 5.0_wp / 16 4.0_wp real ( wp ), parameter :: b109 = 1 8.0_wp / 4 1.0_wp real ( wp ), parameter :: b110 = 3.0_wp / 20 5.0_wp real ( wp ), parameter :: b115 = - 6.0_wp / 4 1.0_wp real ( wp ), parameter :: b116 = - 3.0_wp / 20 5.0_wp real ( wp ), parameter :: b117 = - 3.0_wp / 4 1.0_wp real ( wp ), parameter :: b118 = 3.0_wp / 4 1.0_wp real ( wp ), parameter :: b119 = 6.0_wp / 4 1.0_wp real ( wp ), parameter :: b120 = - 177 7.0_wp / 410 0.0_wp real ( wp ), parameter :: b123 = - 34 1.0_wp / 16 4.0_wp real ( wp ), parameter :: b124 = 449 6.0_wp / 102 5.0_wp real ( wp ), parameter :: b125 = - 28 9.0_wp / 8 2.0_wp real ( wp ), parameter :: b126 = 219 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b127 = 5 1.0_wp / 8 2.0_wp real ( wp ), parameter :: b128 = 3 3.0_wp / 16 4.0_wp real ( wp ), parameter :: b129 = 1 2.0_wp / 4 1.0_wp !real(wp),parameter :: b1211 = 1.0_wp real ( wp ), parameter :: c5 = 3 4.0_wp / 10 5.0_wp real ( wp ), parameter :: c6 = 9.0_wp / 3 5.0_wp real ( wp ), parameter :: c7 = 9.0_wp / 3 5.0_wp real ( wp ), parameter :: c8 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: c9 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: c11 = 4 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c12 = 4 1.0_wp / 84 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 )) call me % f ( t , x , f0 ) call me % f ( t + h * a1 , x + f0 * b10 * h , f1 ) call me % f ( t + h * a2 , x + ( f0 * b20 + f1 * b21 ) * h , f2 ) call me % f ( t + h * a3 , x + ( f0 * b30 + f2 * b32 ) * h , f3 ) call me % f ( t + h * a4 , x + ( f0 * b40 + f2 * b42 + f3 * b43 ) * h , f4 ) call me % f ( t + h * a5 , x + ( f0 * b50 + f3 * b53 + f4 * b54 ) * h , f5 ) call me % f ( t + h * a6 , x + ( f0 * b60 + f3 * b63 + f4 * b64 + f5 * b65 ) * h , f6 ) call me % f ( t + h * a7 , x + ( f0 * b70 + f4 * b74 + f5 * b75 + f6 * b76 ) * h , f7 ) call me % f ( t + h * a8 , x + ( f0 * b80 + f3 * b83 + f4 * b84 + f5 * b85 + f6 * b86 + & f7 * b87 ) * h , f8 ) call me % f ( t + h * a9 , x + ( f0 * b90 + f3 * b93 + f4 * b94 + f5 * b95 + f6 * b96 + & f7 * b97 + f8 * b98 ) * h , f9 ) call me % f ( t + h , x + ( f0 * b100 + f3 * b103 + f4 * b104 + f5 * b105 + & f6 * b106 + f7 * b107 + f8 * b108 + f9 * b109 ) * h , f10 ) call me % f ( t , x + ( f0 * b110 + f5 * b115 + f6 * b116 + f7 * b117 + f8 * b118 + & f9 * b119 ) * h , f11 ) call me % f ( t + h , x + ( f0 * b120 + f3 * b123 + f4 * b124 + f5 * b125 + f6 * b126 + & f7 * b127 + f8 * b128 + f9 * b129 + f11 ) * h , f12 ) xf = x + h * ( f5 * c5 + f6 * c6 + f7 * c7 + f8 * c8 + f9 * c9 + f11 * c11 + f12 * c12 ) xerr = ( 4 1.0_wp / 84 0.0_wp ) * h * ( f0 + f10 - f11 - f12 ) ! is this negative ? does it matter ? end associate end procedure rkf78 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince RK8(7)13M method. ! !### Reference ! * P.J. Prince and J.R. Dormand, J. Comp. Appl. Math.,7, pp. 67-75, 1981 ! * [rksuite_90](http://www.netlib.org/ode/rksuite/) module procedure rkdp87 real ( wp ), parameter :: b21 = 1.0_wp / 1 8.0_wp ! 5.55555555555555555555555555556e-2_wp real ( wp ), parameter :: b31 = 1.0_wp / 4 8.0_wp ! 2.08333333333333333333333333333e-2_wp real ( wp ), parameter :: b32 = 1.0_wp / 1 6.0_wp ! 6.25e-2_wp real ( wp ), parameter :: b41 = 1.0_wp / 3 2.0_wp ! 3.125e-2_wp real ( wp ), parameter :: b43 = 3.0_wp / 3 2.0_wp ! 9.375e-2_wp real ( wp ), parameter :: b51 = 5.0_wp / 1 6.0_wp ! 3.125e-1_wp real ( wp ), parameter :: b53 = - 7 5.0_wp / 6 4.0_wp ! -1.171875_wp real ( wp ), parameter :: b54 = 7 5.0_wp / 6 4.0_wp ! 1.171875_wp real ( wp ), parameter :: b61 = 3.0_wp / 8 0.0_wp ! 3.75e-2_wp real ( wp ), parameter :: b64 = 3.0_wp / 1 6.0_wp ! 1.875e-1_wp real ( wp ), parameter :: b65 = 3.0_wp / 2 0.0_wp ! 1.5e-1_wp real ( wp ), parameter :: b71 = 2944384 1.0_wp / 61456390 6.0_wp ! 4.79101371111111111111111111111e-2_wp real ( wp ), parameter :: b74 = 7773653 8.0_wp / 69253834 7.0_wp ! 1.12248712777777777777777777778e-1_wp real ( wp ), parameter :: b75 = - 2869388 3.0_wp / 112500000 0.0_wp ! -2.55056737777777777777777777778e-2_wp real ( wp ), parameter :: b76 = 2312428 3.0_wp / 180000000 0.0_wp ! 1.28468238888888888888888888889e-2_wp real ( wp ), parameter :: b81 = 1601614 1.0_wp / 94669291 1.0_wp ! 1.6917989787292281181431107136e-2_wp real ( wp ), parameter :: b84 = 6156418 0.0_wp / 15873263 7.0_wp ! 3.87848278486043169526545744159e-1_wp real ( wp ), parameter :: b85 = 2278971 3.0_wp / 63344577 7.0_wp ! 3.59773698515003278967008896348e-2_wp real ( wp ), parameter :: b86 = 54581573 6.0_wp / 277105722 9.0_wp ! 1.96970214215666060156715256072e-1_wp real ( wp ), parameter :: b87 = - 18019366 7.0_wp / 104330755 5.0_wp ! -1.72713852340501838761392997002e-1_wp real ( wp ), parameter :: b91 = 3963270 8.0_wp / 57359108 3.0_wp ! 6.90957533591923006485645489846e-2_wp real ( wp ), parameter :: b94 = - 43363636 6.0_wp / 68370161 5.0_wp ! -6.34247976728854151882807874972e-1_wp real ( wp ), parameter :: b95 = - 42173997 5.0_wp / 261629230 1.0_wp ! -1.61197575224604080366876923982e-1_wp real ( wp ), parameter :: b96 = 10030283 1.0_wp / 72342305 9.0_wp ! 1.38650309458825255419866950133e-1_wp real ( wp ), parameter :: b97 = 79020416 4.0_wp / 83981308 7.0_wp ! 9.4092861403575626972423968413e-1_wp real ( wp ), parameter :: b98 = 80063531 0.0_wp / 378307128 7.0_wp ! 2.11636326481943981855372117132e-1_wp real ( wp ), parameter :: b101 = 24612199 3.0_wp / 134084778 7.0_wp ! 1.83556996839045385489806023537e-1_wp real ( wp ), parameter :: b104 = - 3769504279 5.0_wp / 1526876624 6.0_wp ! -2.46876808431559245274431575997_wp real ( wp ), parameter :: b105 = - 30912174 4.0_wp / 106122780 3.0_wp ! -2.91286887816300456388002572804e-1_wp real ( wp ), parameter :: b106 = - 1299208 3.0_wp / 49076693 5.0_wp ! -2.6473020233117375688439799466e-2_wp real ( wp ), parameter :: b107 = 600594349 3.0_wp / 210894786 9.0_wp ! 2.84783876419280044916451825422_wp real ( wp ), parameter :: b108 = 39300621 7.0_wp / 139667345 7.0_wp ! 2.81387331469849792539403641827e-1_wp real ( wp ), parameter :: b109 = 12387233 1.0_wp / 100102978 9.0_wp ! 1.23744899863314657627030212664e-1_wp real ( wp ), parameter :: b111 = - 102846818 9.0_wp / 84618001 4.0_wp ! -1.21542481739588805916051052503_wp real ( wp ), parameter :: b114 = 847823578 3.0_wp / 50851285 2.0_wp ! 1.66726086659457724322804132886e1_wp real ( wp ), parameter :: b115 = 131172949 5.0_wp / 143242282 3.0_wp ! 9.15741828416817960595718650451e-1_wp real ( wp ), parameter :: b116 = - 1030412999 5.0_wp / 170130438 2.0_wp ! -6.05660580435747094755450554309_wp real ( wp ), parameter :: b117 = - 4877792505 9.0_wp / 304793956 0.0_wp ! -1.60035735941561781118417064101e1_wp real ( wp ), parameter :: b118 = 1533672624 8.0_wp / 103282464 9.0_wp ! 1.4849303086297662557545391898e1_wp real ( wp ), parameter :: b119 = - 4544286818 1.0_wp / 339846769 6.0_wp ! -1.33715757352898493182930413962e1_wp real ( wp ), parameter :: b1110 = 306599347 3.0_wp / 59717265 3.0_wp ! 5.13418264817963793317325361166_wp real ( wp ), parameter :: b121 = 18589217 7.0_wp / 71811604 3.0_wp ! 2.58860916438264283815730932232e-1_wp real ( wp ), parameter :: b124 = - 318509451 7.0_wp / 66710734 1.0_wp ! -4.77448578548920511231011750971_wp real ( wp ), parameter :: b125 = - 47775541 4.0_wp / 109805351 7.0_wp ! -4.3509301377703250944070041181e-1_wp real ( wp ), parameter :: b126 = - 70363537 8.0_wp / 23073921 1.0_wp ! -3.04948333207224150956051286631_wp real ( wp ), parameter :: b127 = 573156678 7.0_wp / 102754552 7.0_wp ! 5.57792003993609911742367663447_wp real ( wp ), parameter :: b128 = 523286660 2.0_wp / 85006656 3.0_wp ! 6.15583158986104009733868912669_wp real ( wp ), parameter :: b129 = - 409366453 5.0_wp / 80868825 7.0_wp ! -5.06210458673693837007740643391_wp real ( wp ), parameter :: b1210 = 396213724 7.0_wp / 180595741 8.0_wp ! 2.19392617318067906127491429047_wp real ( wp ), parameter :: b1211 = 6568635 8.0_wp / 48791008 3.0_wp ! 1.34627998659334941535726237887e-1_wp real ( wp ), parameter :: b131 = 40386385 4.0_wp / 49106310 9.0_wp ! 8.22427599626507477963168204773e-1_wp real ( wp ), parameter :: b134 = - 506849239 3.0_wp / 43474006 7.0_wp ! -1.16586732572776642839765530355e1_wp real ( wp ), parameter :: b135 = - 41142199 7.0_wp / 54304380 5.0_wp ! -7.57622116690936195881116154088e-1_wp real ( wp ), parameter :: b136 = 65278362 7.0_wp / 91429660 4.0_wp ! 7.13973588159581527978269282765e-1_wp real ( wp ), parameter :: b137 = 1117396282 5.0_wp / 92532055 6.0_wp ! 1.20757749868900567395661704486e1_wp real ( wp ), parameter :: b138 = - 1315899084 1.0_wp / 618472703 4.0_wp ! -2.12765911392040265639082085897_wp real ( wp ), parameter :: b139 = 393664762 9.0_wp / 197804968 0.0_wp ! 1.99016620704895541832807169835_wp real ( wp ), parameter :: b1310 = - 16052805 9.0_wp / 68517852 5.0_wp ! -2.34286471544040292660294691857e-1_wp real ( wp ), parameter :: b1311 = 24863810 3.0_wp / 141353106 0.0_wp ! 1.7589857770794226507310510589e-1_wp ! order 8 real ( wp ), parameter :: c1 = 1400545 1.0_wp / 33548006 4.0_wp ! 4.17474911415302462220859284685e-2_wp real ( wp ), parameter :: c6 = - 5923849 3.0_wp / 106827782 5.0_wp ! -5.54523286112393089615218946547e-2_wp real ( wp ), parameter :: c7 = 18160676 7.0_wp / 75886773 1.0_wp ! 2.39312807201180097046747354249e-1_wp real ( wp ), parameter :: c8 = 56129298 5.0_wp / 79784573 2.0_wp ! 7.0351066940344302305804641089e-1_wp real ( wp ), parameter :: c9 = - 104189143 0.0_wp / 137134352 9.0_wp ! -7.59759613814460929884487677085e-1_wp real ( wp ), parameter :: c10 = 76041723 9.0_wp / 115116529 9.0_wp ! 6.60563030922286341461378594838e-1_wp real ( wp ), parameter :: c11 = 11882064 3.0_wp / 75113808 7.0_wp ! 1.58187482510123335529614838601e-1_wp real ( wp ), parameter :: c12 = - 52874774 9.0_wp / 222060717 0.0_wp ! -2.38109538752862804471863555306e-1_wp real ( wp ), parameter :: c13 = 1.0_wp / 4.0_wp ! 2.5e-1_wp ! order 7 real ( wp ), parameter :: d1 = 1345193 2.0_wp / 45517662 3.0_wp ! 2.9553213676353496981964883112e-2_wp real ( wp ), parameter :: d6 = - 80871984 6.0_wp / 97600014 5.0_wp ! -8.28606276487797039766805612689e-1_wp real ( wp ), parameter :: d7 = 175700446 8.0_wp / 564515932 1.0_wp ! 3.11240900051118327929913751627e-1_wp real ( wp ), parameter :: d8 = 65604533 9.0_wp / 26589118 6.0_wp ! 2.46734519059988698196468570407_wp real ( wp ), parameter :: d9 = - 386757472 1.0_wp / 151851720 6.0_wp ! -2.54694165184190873912738007542_wp real ( wp ), parameter :: d10 = 46588586 8.0_wp / 32273653 5.0_wp ! 1.44354858367677524030187495069_wp real ( wp ), parameter :: d11 = 5301123 8.0_wp / 66751671 9.0_wp ! 7.94155958811272872713019541622e-2_wp real ( wp ), parameter :: d12 = 2.0_wp / 4 5.0_wp ! 4.44444444444444444444444444445e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 real ( wp ), parameter :: a2 = 1.0_wp / 1 8.0_wp ! 5.55555555555555555555555555556e-2_wp real ( wp ), parameter :: a3 = 1.0_wp / 1 2.0_wp ! 8.33333333333333333333333333334e-2_wp real ( wp ), parameter :: a4 = 1.0_wp / 8.0_wp ! 1.25e-1_wp real ( wp ), parameter :: a5 = 5.0_wp / 1 6.0_wp ! 3.125e-1_wp real ( wp ), parameter :: a6 = 3.0_wp / 8.0_wp ! 3.75e-1_wp real ( wp ), parameter :: a7 = 5 9.0_wp / 40 0.0_wp ! 1.475e-1_wp real ( wp ), parameter :: a8 = 9 3.0_wp / 20 0.0_wp ! 4.65e-1_wp real ( wp ), parameter :: a9 = 549002324 8.0_wp / 971916982 1.0_wp ! 5.64865451382259575398358501426e-1_wp real ( wp ), parameter :: a10 = 1 3.0_wp / 2 0.0_wp ! 6.5e-1_wp real ( wp ), parameter :: a11 = 120114681 1.0_wp / 129901979 8.0_wp ! 9.24656277640504446745013574318e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkdp87 !***************************************************************************************** !***************************************************************************************** !> ! Verner's 7(8) algorithm. ! !### Reference ! * [Mathematics Source Library](http://www.mymathlib.com/diffeq/embedded_runge_kutta/embedded_verner_7_8.html) module procedure rkv78 real ( wp ), parameter :: c1 = 1 3.0_wp / 28 8.0_wp real ( wp ), parameter :: c6 = 3 2.0_wp / 12 5.0_wp real ( wp ), parameter :: c7 = 3121 3.0_wp / 14400 0.0_wp real ( wp ), parameter :: c8 = 240 1.0_wp / 1237 5.0_wp real ( wp ), parameter :: c9 = 170 1.0_wp / 1408 0.0_wp real ( wp ), parameter :: c10 = 240 1.0_wp / 1920 0.0_wp real ( wp ), parameter :: c11 = 1 9.0_wp / 45 0.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 6.0_wp / 7.0_wp real ( wp ), parameter :: a8 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a9 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a10 = 2.0_wp / 7.0_wp real ( wp ), parameter :: a12 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b31 = 5.0_wp / 7 2.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 7 2.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 3 2.0_wp real ( wp ), parameter :: b43 = 3.0_wp / 3 2.0_wp real ( wp ), parameter :: b51 = 10 6.0_wp / 12 5.0_wp real ( wp ), parameter :: b53 = - 40 8.0_wp / 12 5.0_wp real ( wp ), parameter :: b54 = 35 2.0_wp / 12 5.0_wp real ( wp ), parameter :: b61 = 1.0_wp / 4 8.0_wp real ( wp ), parameter :: b64 = 8.0_wp / 3 3.0_wp real ( wp ), parameter :: b65 = 12 5.0_wp / 52 8.0_wp real ( wp ), parameter :: b71 = - 1389 3.0_wp / 2641 1.0_wp real ( wp ), parameter :: b74 = 3993 6.0_wp / 2641 1.0_wp real ( wp ), parameter :: b75 = - 6412 5.0_wp / 2641 1.0_wp real ( wp ), parameter :: b76 = 6072 0.0_wp / 2641 1.0_wp real ( wp ), parameter :: b81 = 3 7.0_wp / 39 2.0_wp real ( wp ), parameter :: b85 = 162 5.0_wp / 940 8.0_wp real ( wp ), parameter :: b86 = - 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b87 = 6 1.0_wp / 672 0.0_wp real ( wp ), parameter :: b91 = 1717 6.0_wp / 2551 5.0_wp real ( wp ), parameter :: b94 = - 4710 4.0_wp / 2551 5.0_wp real ( wp ), parameter :: b95 = 132 5.0_wp / 50 4.0_wp real ( wp ), parameter :: b96 = - 4179 2.0_wp / 2551 5.0_wp real ( wp ), parameter :: b97 = 2023 7.0_wp / 14580 0.0_wp real ( wp ), parameter :: b98 = 431 2.0_wp / 607 5.0_wp real ( wp ), parameter :: b101 = - 2383 4.0_wp / 18007 5.0_wp real ( wp ), parameter :: b104 = - 7782 4.0_wp / 198082 5.0_wp real ( wp ), parameter :: b105 = - 63663 5.0_wp / 63386 4.0_wp real ( wp ), parameter :: b106 = 25404 8.0_wp / 30012 5.0_wp real ( wp ), parameter :: b107 = - 18 3.0_wp / 700 0.0_wp real ( wp ), parameter :: b108 = 8.0_wp / 1 1.0_wp real ( wp ), parameter :: b109 = - 32 4.0_wp / 377 3.0_wp real ( wp ), parameter :: b111 = 1273 3.0_wp / 760 0.0_wp real ( wp ), parameter :: b114 = - 2003 2.0_wp / 522 5.0_wp real ( wp ), parameter :: b115 = 45648 5.0_wp / 8025 6.0_wp real ( wp ), parameter :: b116 = - 4259 9.0_wp / 712 5.0_wp real ( wp ), parameter :: b117 = 33922 7.0_wp / 91200 0.0_wp real ( wp ), parameter :: b118 = - 102 9.0_wp / 418 0.0_wp real ( wp ), parameter :: b119 = 170 1.0_wp / 140 8.0_wp real ( wp ), parameter :: b1110 = 514 5.0_wp / 243 2.0_wp real ( wp ), parameter :: b121 = - 2706 1.0_wp / 20412 0.0_wp real ( wp ), parameter :: b124 = 4044 8.0_wp / 28066 5.0_wp real ( wp ), parameter :: b125 = - 135377 5.0_wp / 119750 4.0_wp real ( wp ), parameter :: b126 = 1766 2.0_wp / 2551 5.0_wp real ( wp ), parameter :: b127 = - 7168 7.0_wp / 116640 0.0_wp real ( wp ), parameter :: b128 = 9 8.0_wp / 22 5.0_wp real ( wp ), parameter :: b129 = 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b1210 = 377 3.0_wp / 1166 4.0_wp real ( wp ), parameter :: b131 = 1120 3.0_wp / 868 0.0_wp real ( wp ), parameter :: b134 = - 3814 4.0_wp / 1193 5.0_wp real ( wp ), parameter :: b135 = 235442 5.0_wp / 45830 4.0_wp real ( wp ), parameter :: b136 = - 8404 6.0_wp / 1627 5.0_wp real ( wp ), parameter :: b137 = 67330 9.0_wp / 163680 0.0_wp real ( wp ), parameter :: b138 = 470 4.0_wp / 852 5.0_wp real ( wp ), parameter :: b139 = 947 7.0_wp / 1091 2.0_wp real ( wp ), parameter :: b1310 = - 102 9.0_wp / 99 2.0_wp real ( wp ), parameter :: b1312 = 72 9.0_wp / 34 1.0_wp real ( wp ), parameter :: e1 = - 660 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e6 = - 13516 8.0_wp / 316800 0.0_wp real ( wp ), parameter :: e7 = - 1440 6.0_wp / 316800 0.0_wp real ( wp ), parameter :: e8 = 5762 4.0_wp / 316800 0.0_wp real ( wp ), parameter :: e9 = 5467 5.0_wp / 316800 0.0_wp real ( wp ), parameter :: e10 = - 39616 5.0_wp / 316800 0.0_wp real ( wp ), parameter :: e11 = - 13376 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e12 = 43740 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e13 = 13640 0.0_wp / 316800 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( a2 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 + b1312 * f12 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv78 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"Maple\" (dverk78). ! !### Reference ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8c_2.pdf) module procedure dverk78 real ( wp ), parameter :: a2 = 6.25000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 1.05164319248826291079812206572769953051643192488262910798122065727699530516431924883e-1_wp real ( wp ), parameter :: a4 = 1.57746478873239436619718309859154929577464788732394366197183098591549295774647887324e-1_wp real ( wp ), parameter :: a5 = 3.90000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 4.66666666666666666666666666666666666666666666666666666666666666666666666666666666667e-1_wp real ( wp ), parameter :: a7 = 1.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a8 = 9.60000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 8.92267261582876569617601634626813346131102801365312428359450025561131899210951871087e-1_wp real ( wp ), parameter :: a10 = 9.16666666666666666666666666666666666666666666666666666666666666666666666666666666667e-1_wp real ( wp ), parameter :: a11 = 9.50000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 6.25000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = 1.66880469042738433732284158786836826908241310145694196477771165333157001476779298640e-2_wp real ( wp ), parameter :: b32 = 8.84762723445524477065837906940862703608190614736934911503449491943838303687539950186e-2_wp real ( wp ), parameter :: b41 = 3.94366197183098591549295774647887323943661971830985915492957746478873239436619718310e-2_wp real ( wp ), parameter :: b43 = 1.18309859154929577464788732394366197183098591549295774647887323943661971830985915493e-1_wp real ( wp ), parameter :: b51 = 3.76656086575255102040816326530612244897959183673469387755102040816326530612244897959e-1_wp real ( wp ), parameter :: b53 = - 1.4062762954400510204081632653061224489795918367346938775510204081632653061224489796e0_wp real ( wp ), parameter :: b54 = 1.41962020886479591836734693877551020408163265306122448979591836734693877551020408163e0_wp real ( wp ), parameter :: b61 = 4.78355492244381133270022158911047799936688825577714466603355492244381133270022158911e-2_wp real ( wp ), parameter :: b64 = 2.34464677432637812666112645898374622854105368760715435467810644685518346322874319640e-1_wp real ( wp ), parameter :: b65 = 1.84366440009590740673551804877187263818892415348179784538520472756710207016790131136e-1_wp real ( wp ), parameter :: b71 = 6.11454257142857142857142857142857142857142857142857142857142857142857142857142857143e-2_wp real ( wp ), parameter :: b74 = 1.12966312083735007492797513828957773063162531957288289301243638495099728858422070298e-1_wp real ( wp ), parameter :: b75 = - 3.6523126216152081630500698710681045165713080391277981385292799325019115669575763968e-2_wp real ( wp ), parameter :: b76 = 1.84113884181313598519888991674375578168362627197039777983348751156336725254394079556e-2_wp real ( wp ), parameter :: b81 = - 1.1290190344812819716873002143964435191540855755186649222833121580618541079059519076e0_wp real ( wp ), parameter :: b84 = - 1.4000000000000000000000000000000000000000000000000000000000000000000000000000000000e0_wp real ( wp ), parameter :: b85 = - 8.8802928704648604017469555116668654703824580186941491818867912879961932084706688647e0_wp real ( wp ), parameter :: b86 = 7.13094409677757261060034674920714023333661544255001489279410558828850531341195834447e0_wp real ( wp ), parameter :: b87 = 5.23836780816856976283390897685616875619992815166279921137599785776954200296466242780e0_wp real ( wp ), parameter :: b91 = - 6.1529353321310240531758577059630882789056716837277145620689461335329804789378294402e-1_wp real ( wp ), parameter :: b94 = - 4.9518730627307206123980419770218646265183975456624504456109720877843836846893436386e0_wp real ( wp ), parameter :: b95 = - 5.1425568821223535028317455499886772909974359615422348128021564911695375075220376057e0_wp real ( wp ), parameter :: b96 = 4.40119257638430388133537282166699561228064232903290937377378080578921781089684014377e0_wp real ( wp ), parameter :: b97 = 7.19135317060505642064565222344470796214151883455022732703393848995802890190295274383e0_wp real ( wp ), parameter :: b98 = 9.44499265969278818394988712196051711534231335963244217175392212110442651632317187457e-3_wp real ( wp ), parameter :: b101 = - 8.0487754950012651630611680571217899707181954913548370272898245110488470451176167195e-1_wp real ( wp ), parameter :: b104 = - 4.5929131940948324444453893585077961341346223390010271981133375952914577811961889600e0_wp real ( wp ), parameter :: b105 = - 6.5344796429871976349685844664568433689437520794427587560502836549097348190068258330e0_wp real ( wp ), parameter :: b106 = 5.43653721645848061969301952101216405498569628561398967433445354186586889917076802846e0_wp real ( wp ), parameter :: b107 = 7.41428376786239108774181233597389231941925460585428819853117348548056293090948270879e0_wp real ( wp ), parameter :: b108 = 1.62969198761492907780853867652646563859111189149676578185954495159286718271369038020e-2_wp real ( wp ), parameter :: b109 = - 1.8180850948197735826159946407835863974001376137309207124952108889616530525944509467e-2_wp real ( wp ), parameter :: b111 = - 1.0578581056602630497010123299247635673755482083807816057707586430609366121794742310e0_wp real ( wp ), parameter :: b114 = - 2.4902747870066666124482517838284554072812073092990236244911099705917862954551978618e0_wp real ( wp ), parameter :: b115 = - 8.3678653641187673586734269894057729098141483833620036736491918565911809345813949287e0_wp real ( wp ), parameter :: b116 = 6.76706391372510233295677955943576702708643348087685990605145394724880397320088890883e0_wp real ( wp ), parameter :: b117 = 6.10187575754750708348558966187981017887077884162790182554024225466956680755366458148e0_wp real ( wp ), parameter :: b118 = 2.26346926591268273851441242963489920479522697011540597935824660244066631601010686288e-2_wp real ( wp ), parameter :: b119 = 2.42115288970666032926841417691368020854458954458812827759456719481984746605406648566e-2_wp real ( wp ), parameter :: b1110 = - 4.9787636043105826297506384222071115619706586609988170250163869647072076359128202386e-2_wp real ( wp ), parameter :: b121 = - 2.2141388211521594228089507244618610021434452510302869093059447809375117564415940198e0_wp real ( wp ), parameter :: b124 = 4.56355804724646925572212018240182661579238223094527486516681347955670181620817635015e0_wp real ( wp ), parameter :: b125 = - 1.6957036205517104297839745395366915857642603514682315438023365324576286639172315989e1_wp real ( wp ), parameter :: b126 = 1.31105217928641421165649661367441373070008285256157591924114546268073486094645142906e1_wp real ( wp ), parameter :: b127 = 2.65774224749870274100467824154490008698121216459786964112414318137911711432599035412e0_wp real ( wp ), parameter :: b128 = 2.74592934104436868684638073474053713826464018949259425746847719273619536662550065244e0_wp real ( wp ), parameter :: b129 = - 1.1506549223705344448192637136257715209341884980498719927919640966806759385051562199e0_wp real ( wp ), parameter :: b1210 = 2.42302296121448799919236503348925313670760208048083006656846347016299049952947649144e0_wp real ( wp ), parameter :: b1211 = - 4.1789444408283726338625504954661059040264279273698536826180777484478790720345919102e0_wp real ( wp ), parameter :: b131 = - 1.5511316950026916120467765404925329008269305742185819600030671406615107733844590777e0_wp real ( wp ), parameter :: b134 = 5.46092722623409081818657767842421731964760251560133825662023106815177868484348803926e0_wp real ( wp ), parameter :: b135 = - 1.1979220224305761165813607594501926859816750798269770560276587319873047174682994374e1_wp real ( wp ), parameter :: b136 = 9.35213287509985895980770600293832447863564422228774591854591472707049491657923415773e0_wp real ( wp ), parameter :: b137 = - 2.6805151435786875122787398112144651989157843381870119309573397987877093382768663729e-1_wp real ( wp ), parameter :: b138 = - 2.9111005885695086970119200745004024552717605363363761755145270197855298352241438457e-1_wp real ( wp ), parameter :: b139 = - 5.7342608212997377743524954389733665898828809950550624616346021546025114366487668036e-1_wp real ( wp ), parameter :: b1310 = 8.49879473319296398230415986100741386767477221557113401924155562629859407659708957311e-1_wp real ( wp ), parameter :: c1 = 4.46288489653070217415613140881920071523054807312072680684782090651440586079475760217e-2_wp real ( wp ), parameter :: c6 = 3.53849672808056955006078714962021325996588002624194340841646462152138105292559006658e-1_wp real ( wp ), parameter :: c7 = 2.49214137824034653157413522433245474576906451975957952284766070502834548257871008029e-1_wp real ( wp ), parameter :: c8 = - 5.2283384709802500404740481515533751847798124016472832324227905218125681954020960889e0_wp real ( wp ), parameter :: c9 = 5.15116549236861223325928760078465842871662817825128618469086436536651971244098141329e0_wp real ( wp ), parameter :: c10 = - 9.5097928721643673005225329855637374707813853242252723834130793535769142379902016318e0_wp real ( wp ), parameter :: c11 = 1.00596341373431488638526005247320813694813862000943570400067314269066845716409977948e1_wp real ( wp ), parameter :: c12 = - 1.2036094616454238602036053988308595036261658780444717005661665860383856284805907814e-1_wp real ( wp ), parameter :: d1 = 4.46938336974745394582507450063655006984853368676139647920294768627190144403875012741e-2_wp real ( wp ), parameter :: d6 = 3.54849078534857257151115499384161010948488673442599070019549247826104344436599329295e-1_wp real ( wp ), parameter :: d7 = 2.48972827546254539183557734416986167348192069231072959065041272432884166102268412123e-1_wp real ( wp ), parameter :: d8 = 2.66563173304884358413831674493708561666064947673721173917129352743937890031432599813e0_wp real ( wp ), parameter :: d9 = 3.92326394871838972220877485800106547858756064671589732933492272245546934442704232603e0_wp real ( wp ), parameter :: d10 = - 5.6804277609880002002190441358794913525295674525389817820177718907811376030065962976e0_wp real ( wp ), parameter :: d13 = - 5.5698366055781944192097144586617242171380875045541328036506435623541816671402726928e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + & b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + & b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure dverk78 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW7(5) Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp75.m](http://users.uoa.gr/~tsitourasc/rktp75.m)) module procedure rktp75 real ( wp ), parameter :: b21 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b43 = 1.0_wp / 8.0_wp real ( wp ), parameter :: b51 = 218397 1.0_wp / 400000 0.0_wp real ( wp ), parameter :: b53 = - 834081 3.0_wp / 400000 0.0_wp real ( wp ), parameter :: b54 = 396842 1.0_wp / 200000 0.0_wp real ( wp ), parameter :: b61 = 69576821 2.0_wp / 746374441 1.0_wp real ( wp ), parameter :: b63 = - 180354917 5.0_wp / 700794249 6.0_wp real ( wp ), parameter :: b64 = 347450705 3.0_wp / 679087729 0.0_wp real ( wp ), parameter :: b65 = 218819889 9.0_wp / 1526492776 3.0_wp real ( wp ), parameter :: b71 = - 1189493485 7.0_wp / 839062363 4.0_wp real ( wp ), parameter :: b73 = 5309478027 6.0_wp / 980051200 3.0_wp real ( wp ), parameter :: b74 = - 841537622 9.0_wp / 227704950 3.0_wp real ( wp ), parameter :: b75 = - 1864756769 7.0_wp / 1013831790 7.0_wp real ( wp ), parameter :: b76 = 2755149489 3.0_wp / 1190595021 7.0_wp real ( wp ), parameter :: b81 = 3082805795 1.0_wp / 765464408 5.0_wp real ( wp ), parameter :: b83 = - 451170 4.0_wp / 32472 9.0_wp real ( wp ), parameter :: b84 = 1621785161 8.0_wp / 165117717 5.0_wp real ( wp ), parameter :: b85 = 28276818683 9.0_wp / 4069406438 4.0_wp real ( wp ), parameter :: b86 = - 10440078053 7.0_wp / 1586925761 9.0_wp real ( wp ), parameter :: b87 = 540924163 9.0_wp / 960017720 8.0_wp real ( wp ), parameter :: b91 = - 13377572054 6.0_wp / 3675338383 5.0_wp real ( wp ), parameter :: b93 = 4960869551 1.0_wp / 406659084 8.0_wp real ( wp ), parameter :: b94 = - 5989647520 1.0_wp / 790125981 3.0_wp real ( wp ), parameter :: b95 = - 4803552765 1.0_wp / 572737942 6.0_wp real ( wp ), parameter :: b96 = 8626671855 1.0_wp / 1018895104 8.0_wp real ( wp ), parameter :: b97 = - 775161811 4.0_wp / 2357580249 5.0_wp real ( wp ), parameter :: b98 = 228927494 2.0_wp / 846440572 5.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 8 9.0_wp / 20 0.0_wp real ( wp ), parameter :: a6 = 5648 2.0_wp / 11506 9.0_wp real ( wp ), parameter :: a7 = 7 4.0_wp / 9 5.0_wp real ( wp ), parameter :: a8 = 8.0_wp / 9.0_wp real ( wp ), parameter :: c1 = 59798872 6.0_wp / 1237443691 5.0_wp ! 7th order formula real ( wp ), parameter :: c4 = 313831215 8.0_wp / 1196840811 9.0_wp real ( wp ), parameter :: c5 = 48088284 3.0_wp / 785066564 5.0_wp real ( wp ), parameter :: c6 = 98855888 5.0_wp / 351225327 1.0_wp real ( wp ), parameter :: c7 = 530263696 1.0_wp / 2642594028 6.0_wp real ( wp ), parameter :: c8 = 125948943 3.0_wp / 1216358603 0.0_wp real ( wp ), parameter :: c9 = 101664771 2.0_wp / 2389910197 5.0_wp real ( wp ), parameter :: d1 = 142194031 3.0_wp / 4619354707 7.0_wp ! 5th order formula real ( wp ), parameter :: d4 = 194306860 1.0_wp / 591121704 6.0_wp real ( wp ), parameter :: d5 = - 380714088 0.0_wp / 820536635 9.0_wp real ( wp ), parameter :: d6 = 937722088 8.0_wp / 1157767163 5.0_wp real ( wp ), parameter :: d7 = 58618688 3.0_wp / 518718638 5.0_wp real ( wp ), parameter :: d8 = 111409502 3.0_wp / 801479112 1.0_wp !real(wp),parameter :: d9 = 1016647712.0_wp / 23899101975.0_wp ! == c9 real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t * h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rktp75 !***************************************************************************************** !***************************************************************************************** !> ! Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) ! !### Reference ! * M. Tanaka, S. Muramatsu and S. Yamashita, ! \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\", ! Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK7/RKcoeff7d_4.pdf) ! * [Tanyam7](https://github.com/SciML/OrdinaryDiffEq.jl/blob/f8f06c586c7a5616d7c251bce2d9e0fef0823eb4/src/tableaus/high_order_rk_tableaus.jl) ! !@note The floating point coefficients here were generated from the rational ones from the 3rd reference. module procedure rktmy7 real ( wp ), parameter :: a1 = 7.81664651011384679726388269101836941032920932418419855605785254026460056610810379655e-2_wp real ( wp ), parameter :: a2 = 1.17249697651707701958958240365275541154938139862762978340867788103969008491621556948e-1_wp real ( wp ), parameter :: a3 = 1.75874546477561552938437360547913311732407209794144467511301682155953512737432335422e-1_wp real ( wp ), parameter :: a4 = 4.98740110191398804083870799279316917774238190981016789826879390030550695876961641904e-1_wp real ( wp ), parameter :: a5 = 7.72121690184483890484305252570415231459539559725240465368497233385136757456140428136e-1_wp real ( wp ), parameter :: a6 = 9.91185669604776798407733864088711970429343190218936593687802104065965311344896218368e-1_wp real ( wp ), parameter :: a7 = 9.99501958209766146741222013447128336314037987005636927534919520974350847802956557173e-1_wp real ( wp ), parameter :: b21 = 7.81664651011384679726388269101836941032920932418419855605785254026460056610810379655e-2_wp real ( wp ), parameter :: b31 = 2.93124244129269254897395600913188852887345349656907445852169470259922521229053892370e-2_wp real ( wp ), parameter :: b32 = 8.79372732387807764692186802739566558662036048970722337556508410779767563687161677111e-2_wp real ( wp ), parameter :: b41 = 4.39686366193903882346093401369783279331018024485361168778254205389883781843580838556e-2_wp real ( wp ), parameter :: b43 = 1.31905909858171164703828020410934983799305407345608350633476261616965134553074251567e-1_wp real ( wp ), parameter :: b51 = 7.36183483773838301137467440432293617773745769566559352064158169276511636772818047624e-1_wp real ( wp ), parameter :: b53 = - 2.8337999624233305489833449285093928914333838008174765752291037107738552931533021862e0_wp real ( wp ), parameter :: b54 = 2.59635658884089105192974828735641619143387622223193401299182493152789435225744578050e0_wp real ( wp ), parameter :: b61 = - 1.2062819391370865506697620184830239019171754039710073663311602518203645149254198062e1_wp real ( wp ), parameter :: b63 = 4.82083810017524271975659667922264091479441542231216831647946440093325968906031102739e1_wp real ( wp ), parameter :: b64 = - 3.8058630464634340873444069083787729069064369254270820186967532356616235833794046365e1_wp real ( wp ), parameter :: b65 = 2.68519054443726307306002772896197417175150863058445115085298809887242084990127458112e0_wp real ( wp ), parameter :: b71 = 1.05219572763201983263505214763646609723666799568263028237820996736734142311884342584e2_wp real ( wp ), parameter :: b73 = - 4.1792888626241254423220090632342880293119367792924845836746399438762371771451577296e2_wp real ( wp ), parameter :: b74 = 3.32315550449933288661672145724565517116512854686499482568452142501473088581714784505e2_wp real ( wp ), parameter :: b75 = - 1.9827591183572936803332556016677309852484292769162933988083092149281072338147267880e1_wp real ( wp ), parameter :: b76 = 1.21253990245498590876383571598269791392765963386781814296174940276352447040880996631e0_wp real ( wp ), parameter :: b81 = 1.14677557186317412777743962690232735459737977190570736656211705995064581461317681933e2_wp real ( wp ), parameter :: b83 = - 4.5556121698960972374080326255401158427067549223697915892004464775745251977067045545e2_wp real ( wp ), parameter :: b84 = 3.62240955539231418592330010344238763220304805879492791461256324311641976192069398751e2_wp real ( wp ), parameter :: b85 = - 2.1671904421828087451986108533232639587308358187016768553336461965905412178073526990e1_wp real ( wp ), parameter :: b86 = 1.31891320071378062521147328839749773179746572184191322809881380227032622170542838742e0_wp real ( wp ), parameter :: b87 = - 4.8025566150346557548532221776442175423603809038769446508148646446010785455700778379e-3_wp real ( wp ), parameter :: b91 = 1.15213348705537687993035352351751211261221390205532219553682499922866411003708635464e2_wp real ( wp ), parameter :: b93 = - 4.5769356568613233007695763193867218928825178792989579576839091929408867970634224781e2_wp real ( wp ), parameter :: b94 = 3.63936882188627343156610348429345771832876086443132263964527166628432626799709477320e2_wp real ( wp ), parameter :: b95 = - 2.1776682078900292925704872499507823559172972633117930893260468010116663302476870140e1_wp real ( wp ), parameter :: b96 = 1.32506708878784683255232611830210096225232882939350575184015801179589744903384223122e0_wp real ( wp ), parameter :: b97 = - 4.5181909867689836302434492066200005706653127046344820697054796285731244656302707584e-3_wp real ( wp ), parameter :: b98 = - 5.3202693348599590527901201245120835437960233962812632873177926101911916720679884551e-4_wp real ( wp ), parameter :: b101 = 1.15189282458001936117920705886017744028740693856879151180637835667882356288187386531e2_wp real ( wp ), parameter :: b103 = - 4.5759802227164297152415973359923257831016657330505652256715384079434141772791111922e2_wp real ( wp ), parameter :: b104 = 3.63861025631214796441099277168858079581214448605485290879259097757252663203289829524e2_wp real ( wp ), parameter :: b105 = - 2.1772127540275557896757277605910244539671287153847928139832256704010642220109132278e1_wp real ( wp ), parameter :: b106 = 1.32488046450743160713676531081866548206715403286785238191455539176685996800150702540e0_wp real ( wp ), parameter :: b107 = - 4.5057252106918316437819055679743451410766257174024328014118092080515035470892820222e-3_wp real ( wp ), parameter :: b108 = - 5.3301659494291359595525498369189704335941061044130202397950934176800791138229684609e-4_wp real ( wp ), parameter :: c1 = 5.12601424974468664207334896467928192605824917480148880826975913119881823951586777925e-2_wp real ( wp ), parameter :: c4 = 2.75216384562126285009146859937694605711798961533809877651595696709236573932734806466e-1_wp real ( wp ), parameter :: c5 = 3.36966503407105433969810392957648333413899278562014739968412391495966278358775981408e-1_wp real ( wp ), parameter :: c6 = 1.89860722449065759713312922673232536516903910783954769517234286153030491598156826344e-1_wp real ( wp ), parameter :: c7 = 8.46109941851440210639662306074261643772685843568635085555647158979307742068711096848e0_wp real ( wp ), parameter :: c8 = - 1.3015941672640542180639580507865346065998831988530342657791656834495604969014688205e2_wp real ( wp ), parameter :: c9 = 1.21845013554975275354886178352695475927358276806989281447140156789492750743174944785e2_wp real ( wp ), parameter :: d1 = 5.10024175903771829479213461329816195478958717593517724635264723499155306525942551495e-2_wp real ( wp ), parameter :: d4 = 2.76139295046665466902620362521695093962636297177632180749087744362855793802931918925e-1_wp real ( wp ), parameter :: d5 = 3.33788602069686023554754031916460354879718501346567668959954157311633875576165846369e-1_wp real ( wp ), parameter :: d6 = 2.01965311390813930477691388976007742664325756050214204738992402177761682278944674291e-1_wp real ( wp ), parameter :: d7 = 5.75507545904181112023147975998801190281904137375217710125886160168224573401735815006e0_wp real ( wp ), parameter :: d8 = - 8.5617971085139353724114466889535156713873617800085942928170422377884412616327994845e1_wp real ( wp ), parameter :: d10 = 8.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e1_wp real ( wp ), parameter :: e1 = d1 - c1 ! -2.5772490706968347281214351381119971268661998866311561917111896207265174256442264298e-4_wp real ( wp ), parameter :: e4 = d4 - c4 ! 9.22910484539181893473502584000488250837335643822303097492047653619219870197112458608e-4_wp real ( wp ), parameter :: e5 = d5 - c5 ! -3.1779013374194104150563610411879785341807772154470710084582341843324027826101350395e-3_wp real ( wp ), parameter :: e6 = d6 - c6 ! 1.21045889417481707643784663027752061474218452662594352217581160247311906807878479474e-2_wp real ( wp ), parameter :: e7 = d7 - c7 ! -2.7060239594725909861651433007546045349078170619341737542976099881108316866697528184e0_wp real ( wp ), parameter :: e8 = d8 - c8 ! 4.45414456412660680822813381891183039461147020852174836497461459670716370738188872008e1_wp real ( wp ), parameter :: e9 = - c9 ! -1.2184501355497527535488617835269547592735827680698928144714015678949275074317494479e2_wp real ( wp ), parameter :: e10 = d10 ! 8.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + a1 * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rktmy7 !***************************************************************************************** !***************************************************************************************** !> ! Tanaka/Muramatsu/Yamashita 7th order (stable alternate) ! !### Reference ! * M. Tanaka, S. Muramatsu and S. Yamashita, ! \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\", ! Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK7/RKcoeff7d_3.pdf) module procedure rktmy7s real ( wp ), parameter :: a2 = 8.86136910904712762297901616787065703474372205022359821121431028551771585827313381493e-2_wp real ( wp ), parameter :: a3 = 1.32920536635706914344685242518059855521155830753353973168214654282765737874097007224e-1_wp real ( wp ), parameter :: a4 = 1.99380804953560371517027863777089783281733746130030959752321981424148606811145510836e-1_wp real ( wp ), parameter :: a5 = 2.51937984496124031007751937984496124031007751937984496124031007751937984496124031008e-1_wp real ( wp ), parameter :: a6 = 2.26466433020936656065704702091900664344459244867723201401086840088319283348150590416e-2_wp real ( wp ), parameter :: a7 = 6.78260869565217391304347826086956521739130434782608695652173913043478260869565217391e-1_wp real ( wp ), parameter :: a8 = 7.66129032258064516129032258064516129032258064516129032258064516129032258064516129032e-1_wp real ( wp ), parameter :: b21 = 8.86136910904712762297901616787065703474372205022359821121431028551771585827313381493e-2_wp real ( wp ), parameter :: b31 = 3.32301341589267285861713106295149638802889576883384932920536635706914344685242518060e-2_wp real ( wp ), parameter :: b32 = 9.96904024767801857585139318885448916408668730650154798761609907120743034055727554180e-2_wp real ( wp ), parameter :: b41 = 4.98452012383900928792569659442724458204334365325077399380804953560371517027863777090e-2_wp ! real(wp),parameter :: b42 = 0 real ( wp ), parameter :: b43 = 1.49535603715170278637770897832817337461300309597523219814241486068111455108359133127e-1_wp real ( wp ), parameter :: b51 = 5.51347401967803154774903010020881505852005989293761620647741487589886184464539035017e-2_wp ! real(wp),parameter :: b52 = 0 real ( wp ), parameter :: b53 = 1.12885720141989326660141409395828560302843986115057948865980980005720662021597769579e-1_wp real ( wp ), parameter :: b54 = 8.39175241573543888701202275865794131429631668935503851932758789872287040280723579274e-2_wp real ( wp ), parameter :: b61 = 1.53780353659624250311801512696108169293868598553255672534718580953857479599369970368e-2_wp ! real(wp),parameter :: b62 = 0 real ( wp ), parameter :: b63 = 3.20168833857685908914047299444587333329182280459513826892095134179082200072969961132e-2_wp real ( wp ), parameter :: b64 = - 4.2539659878681657073856959205351592650720670439267341724969304281964049361468337347e-2_wp real ( wp ), parameter :: b65 = 1.77913844290443067578425482004721088228615070247627119223966167775020097290494032391e-2_wp real ( wp ), parameter :: b71 = - 1.5256873392554910892888395407304491271001202239387133944183533057047079677113113410e1_wp ! real(wp),parameter :: b72 = 0 real ( wp ), parameter :: b73 = - 4.0883456759270366648261512467321799058186499039799239493858442836256593204975747971e-1_wp real ( wp ), parameter :: b74 = - 1.3608204533866463335338410239697411205509650095546743972399822290598206098672910268e1_wp real ( wp ), parameter :: b75 = 1.01149044236967810023853975406104197029605187561685172742777704473133250229308176604e1_wp real ( wp ), parameter :: b76 = 1.98372689398825142836283710571516572858713290039459617328963432417380049457745287151e1_wp real ( wp ), parameter :: b81 = 1.88486645187560529586357925865538054589099172763864914361630595960178420222946575411e0_wp ! real(wp),parameter :: b82 = 0 real ( wp ), parameter :: b83 = 7.38723400736316245047913111275147442586352189973516108074150970202563979482282113515e-2_wp real ( wp ), parameter :: b84 = 8.04572070566500039801983801614661023094256190473761133022111517088062229540462605430e-1_wp real ( wp ), parameter :: b85 = 4.63664644831429482283531761249424920698038820301953813871953906173904815616778436120e-3_wp real ( wp ), parameter :: b86 = - 2.2571634399585372828168228383264979022555589706647864119944165313232196821070240573e0_wp real ( wp ), parameter :: b87 = 2.55344963252550543952665407380963468836953509868134018667928934680410062297215831041e-1_wp real ( wp ), parameter :: b91 = - 5.9346254587724754339983223484206523031910583834235199880213406063079393162409202809e0_wp ! real(wp),parameter :: b92 = 0 real ( wp ), parameter :: b93 = - 7.8254437924926937330746887342046970213268979627548332452496248647606158812656995539e-2_wp real ( wp ), parameter :: b94 = - 7.8190850697311404939022123036040717579732265786069442338599154407498020519983830030e0_wp real ( wp ), parameter :: b95 = 6.62838952616537145950452382452961751768395831246709307616126651109617352143730615816e0_wp real ( wp ), parameter :: b96 = 8.02308370728521564415778792242500347174153708508314015132305288664913153021463120273e0_wp real ( wp ), parameter :: b97 = - 9.0428803055994289478315309000341323995405509411440606262203643609271327625942925961e-1_wp real ( wp ), parameter :: b98 = 1.08477976353789865635212288241556328190611363822218538947146933405275575165945217817e0_wp real ( wp ), parameter :: b101 = 1.62179253869109927468375569917595038904177242620112769247150828367984290149786137801e1_wp ! real(wp),parameter :: b102 = 0 real ( wp ), parameter :: b103 = 2.16664888484339819588806336947105292464689479004009761616228992822572035699934314119e-1_wp real ( wp ), parameter :: b104 = 1.28224265684564880927217994602681081201929120394991496951845578168120816842817479071e1_wp real ( wp ), parameter :: b105 = - 8.1089672876336983196919059983906105838229524182068262549575894100211346860455654545e0_wp real ( wp ), parameter :: b106 = - 2.0667128454690444724018643663830140813737619941924668651212413900366570540033662448e1_wp real ( wp ), parameter :: b107 = - 3.1833603946776751327638844301283960383913589487275171654091584194061718372090669796e-1_wp real ( wp ), parameter :: b108 = 8.37414937940089897838775316258873698324382474489810241195049505895239674839838599165e-1_wp ! real(wp),parameter :: b109 = 0 real ( wp ), parameter :: c1 = - 7.0509607576408896307075679328876855284603613449588923698038237210603268019606544968e-1_wp ! real(wp),parameter :: c2 = 0 ! real(wp),parameter :: c3 = 0 real ( wp ), parameter :: c4 = - 1.3042081566303485225649874598063839519475921490266396703180477516076867108693171832e0_wp real ( wp ), parameter :: c5 = 1.48160311264599651661502935631784760949494268493436673049606673336731557372364280543e0_wp real ( wp ), parameter :: c6 = 1.06895075363674788262512061362504155168134693772218655812810426772234205050708971472e0_wp real ( wp ), parameter :: c7 = 6.13577483162844175682242729746843974632226625804493770700993518511008512922114250458e-2_wp real ( wp ), parameter :: c8 = 3.26912547604941692272822108612497316454980622616931033966225739519181388387272903080e-1_wp real ( wp ), parameter :: c9 = 7.04800701904669765545479015650816296991353756685952076379340312537795271551657846090e-2_wp ! real(wp),parameter :: c10 = 0 real ( wp ), parameter :: d1 = - 3.6831507795991271832603276725031327096976142593866411295983627470495355912891936736e-1_wp ! real(wp),parameter :: d2 = 0 ! real(wp),parameter :: d3 = 0 real ( wp ), parameter :: d4 = - 8.0950091191196753949937080390898589767029649084843059799077876945035271299089357243e-1_wp real ( wp ), parameter :: d5 = 1.08173849169813311928266834059595139857072621270843946078873270438439274085083834379e0_wp real ( wp ), parameter :: d6 = 6.13601703165021649508638707253091181092345706628708774027475501516795619531413661207e-1_wp real ( wp ), parameter :: d7 = 1.38925487324489763175454783958272954686752997010110778095994410501506567737198901272e-1_wp real ( wp ), parameter :: d8 = 2.68550307684235725858641739351983634290233000439835698038412427752611344000362033525e-1_wp ! real(wp),parameter :: d9 = 0 real ( wp ), parameter :: d10 = 7.50000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: e1 = c1 - d1 ! real(wp),parameter :: e2 = c2 - d2 ! real(wp),parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rktmy7s !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 8(5) ! !### References ! * E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary ! Differential Equations I. Nonstiff Problems. 2nd edition. ! springer series in computational mathematics, ! springer-verlag (1993) ! * [Original DOP853 by Hairer](https://www.unige.ch/~hairer/prog/nonstiff/dop853.f) ! * [Modernized DOP853](https://github.com/jacobwilliams/dop853) ! * [DP8ConstantCache](https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/src/tableaus/high_order_rk_tableaus.jl) module procedure rkdp85 real ( wp ), parameter :: a7 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a8 = 4.0_wp / 1 3.0_wp real ( wp ), parameter :: a9 = 12 7.0_wp / 19 5.0_wp real ( wp ), parameter :: a10 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a11 = 6.0_wp / 7.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 3.0_wp * a7 real ( wp ), parameter :: a5 = ( 6.0_wp + sqrt ( 6.0_wp )) / 1 0.0_wp * a6 real ( wp ), parameter :: a4 = ( 6.0_wp - sqrt ( 6.0_wp )) / 1 0.0_wp * a6 real ( wp ), parameter :: a3 = 2.0_wp / 3.0_wp * a4 real ( wp ), parameter :: a2 = 2.0_wp / 3.0_wp * a3 real ( wp ), parameter :: b21 = 5.26001519587677318785587544488e-2_wp real ( wp ), parameter :: b31 = 1.97250569845378994544595329183e-2_wp real ( wp ), parameter :: b32 = 5.91751709536136983633785987549e-2_wp real ( wp ), parameter :: b41 = 2.95875854768068491816892993775e-2_wp real ( wp ), parameter :: b43 = 8.87627564304205475450678981324e-2_wp real ( wp ), parameter :: b51 = 2.41365134159266685502369798665e-1_wp real ( wp ), parameter :: b53 = - 8.84549479328286085344864962717e-1_wp real ( wp ), parameter :: b54 = 9.24834003261792003115737966543e-1_wp real ( wp ), parameter :: b61 = 3.7037037037037037037037037037e-2_wp real ( wp ), parameter :: b64 = 1.70828608729473871279604482173e-1_wp real ( wp ), parameter :: b65 = 1.25467687566822425016691814123e-1_wp real ( wp ), parameter :: b71 = 3.7109375e-2_wp real ( wp ), parameter :: b74 = 1.70252211019544039314978060272e-1_wp real ( wp ), parameter :: b75 = 6.02165389804559606850219397283e-2_wp real ( wp ), parameter :: b76 = - 1.7578125e-2_wp real ( wp ), parameter :: b81 = 3.70920001185047927108779319836e-2_wp real ( wp ), parameter :: b84 = 1.70383925712239993810214054705e-1_wp real ( wp ), parameter :: b85 = 1.07262030446373284651809199168e-1_wp real ( wp ), parameter :: b86 = - 1.53194377486244017527936158236e-2_wp real ( wp ), parameter :: b87 = 8.27378916381402288758473766002e-3_wp real ( wp ), parameter :: b91 = 6.24110958716075717114429577812e-1_wp real ( wp ), parameter :: b94 = - 3.36089262944694129406857109825_wp real ( wp ), parameter :: b95 = - 8.68219346841726006818189891453e-1_wp real ( wp ), parameter :: b96 = 2.75920996994467083049415600797e1_wp real ( wp ), parameter :: b97 = 2.01540675504778934086186788979e1_wp real ( wp ), parameter :: b98 = - 4.34898841810699588477366255144e1_wp real ( wp ), parameter :: b101 = 4.77662536438264365890433908527e-1_wp real ( wp ), parameter :: b104 = - 2.48811461997166764192642586468e0_wp real ( wp ), parameter :: b105 = - 5.90290826836842996371446475743e-1_wp real ( wp ), parameter :: b106 = 2.12300514481811942347288949897e1_wp real ( wp ), parameter :: b107 = 1.52792336328824235832596922938e1_wp real ( wp ), parameter :: b108 = - 3.32882109689848629194453265587e1_wp real ( wp ), parameter :: b109 = - 2.03312017085086261358222928593e-2_wp real ( wp ), parameter :: b111 = - 9.3714243008598732571704021658e-1_wp real ( wp ), parameter :: b114 = 5.18637242884406370830023853209e0_wp real ( wp ), parameter :: b115 = 1.09143734899672957818500254654e0_wp real ( wp ), parameter :: b116 = - 8.14978701074692612513997267357e0_wp real ( wp ), parameter :: b117 = - 1.85200656599969598641566180701e1_wp real ( wp ), parameter :: b118 = 2.27394870993505042818970056734e1_wp real ( wp ), parameter :: b119 = 2.49360555267965238987089396762e0_wp real ( wp ), parameter :: b1110 = - 3.0467644718982195003823669022e0_wp real ( wp ), parameter :: b121 = 2.27331014751653820792359768449e0_wp real ( wp ), parameter :: b124 = - 1.05344954667372501984066689879e1_wp real ( wp ), parameter :: b125 = - 2.00087205822486249909675718444e0_wp real ( wp ), parameter :: b126 = - 1.79589318631187989172765950534e1_wp real ( wp ), parameter :: b127 = 2.79488845294199600508499808837e1_wp real ( wp ), parameter :: b128 = - 2.85899827713502369474065508674e0_wp real ( wp ), parameter :: b129 = - 8.87285693353062954433549289258e0_wp real ( wp ), parameter :: b1210 = 1.23605671757943030647266201528e1_wp real ( wp ), parameter :: b1211 = 6.43392746015763530355970484046e-1_wp real ( wp ), parameter :: c1 = 5.42937341165687622380535766363e-2_wp real ( wp ), parameter :: c6 = 4.45031289275240888144113950566_wp real ( wp ), parameter :: c7 = 1.89151789931450038304281599044_wp real ( wp ), parameter :: c8 = - 5.8012039600105847814672114227_wp real ( wp ), parameter :: c9 = 3.1116436695781989440891606237e-1_wp real ( wp ), parameter :: c10 = - 1.52160949662516078556178806805e-1_wp real ( wp ), parameter :: c11 = 2.01365400804030348374776537501e-1_wp real ( wp ), parameter :: c12 = 4.47106157277725905176885569043e-2_wp real ( wp ), parameter :: e1 = 0.1312004499419488073250102996e-01_wp real ( wp ), parameter :: e6 = - 0.1225156446376204440720569753e+01_wp real ( wp ), parameter :: e7 = - 0.4957589496572501915214079952_wp real ( wp ), parameter :: e8 = 0.1664377182454986536961530415e+01_wp real ( wp ), parameter :: e9 = - 0.3503288487499736816886487290_wp real ( wp ), parameter :: e10 = 0.3341791187130174790297318841_wp real ( wp ), parameter :: e11 = 0.8192320648511571246570742613e-01_wp real ( wp ), parameter :: e12 = - 0.2235530786388629525884427845e-01_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 ) end associate end procedure rkdp85 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Matlab version](https://www.mathworks.com/matlabcentral/fileexchange/2911-ode86) ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp86.m](http://users.uoa.gr/~tsitourasc/rktp86.m)) module procedure rktp86 real ( wp ), parameter :: b21 = 9.0_wp / 14 2.0_wp ! 0.06338028169014085_wp real ( wp ), parameter :: b31 = 17842212 3.0_wp / 917857413 7.0_wp ! 0.0194389804273365_wp real ( wp ), parameter :: b32 = 68550133 3.0_wp / 822447320 5.0_wp ! 0.0833489654490278_wp real ( wp ), parameter :: b41 = 1225 7.0_wp / 31798 8.0_wp ! 0.03854547970363662_wp real ( wp ), parameter :: b43 = 1225 7.0_wp / 10599 6.0_wp ! 0.1156364391109098_wp real ( wp ), parameter :: b51 = 258494972 9.0_wp / 655470425 2.0_wp ! 0.394365577701125_wp real ( wp ), parameter :: b53 = - 916390191 6.0_wp / 618400397 3.0_wp ! -1.481871932167337_wp real ( wp ), parameter :: b54 = 2622205779 4.0_wp / 1777642190 7.0_wp ! 1.475103253691018_wp real ( wp ), parameter :: b61 = 441801 1.0_wp / 9605522 5.0_wp ! 0.04599448910769821_wp real ( wp ), parameter :: b64 = 294792210 7.0_wp / 1268738173 6.0_wp ! 0.2323507062639547_wp real ( wp ), parameter :: b65 = 322997341 3.0_wp / 1723496041 4.0_wp ! 0.1874082292858813_wp real ( wp ), parameter :: b71 = 287513953 9.0_wp / 4787726765 1.0_wp ! 0.06005228953244051_wp real ( wp ), parameter :: b74 = 270237721 1.0_wp / 2408453583 2.0_wp ! 0.1122038319463678_wp real ( wp ), parameter :: b75 = - 13570708 9.0_wp / 404223034 1.0_wp ! -0.03357232951906142_wp real ( wp ), parameter :: b76 = 29987414 0.0_wp / 1793332569 1.0_wp ! 0.01672161344565858_wp real ( wp ), parameter :: b81 = - 787217613 7.0_wp / 500351469 4.0_wp ! -1.573329273208686_wp real ( wp ), parameter :: b84 = - 3513610878 9.0_wp / 2668479887 8.0_wp ! -1.316708773022366_wp real ( wp ), parameter :: b85 = - 11443318468 1.0_wp / 976099589 5.0_wp ! -11.72351529618177_wp real ( wp ), parameter :: b86 = 29920499651 7.0_wp / 3285142123 3.0_wp ! 9.10782502817387_wp real ( wp ), parameter :: b87 = 25 4.0_wp / 3 9.0_wp ! 6.512820512820513_wp real ( wp ), parameter :: b91 = - 355995077 7.0_wp / 739997189 8.0_wp ! -0.4810762562439125_wp real ( wp ), parameter :: b94 = - 2929929153 1.0_wp / 440550414 8.0_wp ! -6.650610360746391_wp real ( wp ), parameter :: b95 = - 4243401337 9.0_wp / 936690570 9.0_wp ! -4.530206099782573_wp real ( wp ), parameter :: b96 = 2064287170 0.0_wp / 530063545 3.0_wp ! 3.894414525020157_wp real ( wp ), parameter :: b97 = 1295119705 0.0_wp / 149998501 1.0_wp ! 8.63421764552553_wp real ( wp ), parameter :: b98 = 5952752 3.0_wp / 633162079 3.0_wp ! 0.0094016247886815_wp real ( wp ), parameter :: b101 = - 819672358 2.0_wp / 1057079598 1.0_wp ! -0.7754121446230568_wp real ( wp ), parameter :: b104 = - 4618145400 5.0_wp / 577513277 6.0_wp ! -7.996604718235832_wp real ( wp ), parameter :: b105 = - 19627710601 1.0_wp / 2917942405 2.0_wp ! -6.726558607230183_wp real ( wp ), parameter :: b106 = 6357513534 3.0_wp / 1149186833 3.0_wp ! 5.532184454327406_wp real ( wp ), parameter :: b107 = 12053566306 7.0_wp / 1106078018 7.0_wp ! 10.89757332024991_wp real ( wp ), parameter :: b108 = 19543429 4.0_wp / 972713994 5.0_wp ! 0.02009165028004539_wp real ( wp ), parameter :: b109 = - 61746803 7.0_wp / 1575734610 5.0_wp ! -0.03918604268037686_wp real ( wp ), parameter :: b111 = - 637380905 5.0_wp / 535777945 2.0_wp ! -1.189636324544999_wp real ( wp ), parameter :: b114 = - 15077274965 7.0_wp / 2115108808 0.0_wp ! -7.128368483301215_wp real ( wp ), parameter :: b115 = - 5807665738 3.0_wp / 608946939 4.0_wp ! -9.53722789710108_wp real ( wp ), parameter :: b116 = 925272119 0.0_wp / 122156679 7.0_wp ! 7.57447010898087_wp real ( wp ), parameter :: b117 = 13238130963 1.0_wp / 1174896557 6.0_wp ! 11.26748638207092_wp real ( wp ), parameter :: b118 = 70463390 4.0_wp / 1381369633 1.0_wp ! 0.05100980122305832_wp real ( wp ), parameter :: b119 = 65641703 3.0_wp / 818534965 8.0_wp ! 0.0801941346950826_wp real ( wp ), parameter :: b1110 = - 166980651 6.0_wp / 1055528984 9.0_wp ! -0.1581961783984735_wp real ( wp ), parameter :: b121 = - 272634695 3.0_wp / 695495978 9.0_wp ! -0.3920003904712727_wp real ( wp ), parameter :: b124 = 2490644673 1.0_wp / 635910516 1.0_wp ! 3.916659042493857_wp real ( wp ), parameter :: b125 = - 6527776762 5.0_wp / 2329896046 3.0_wp ! -2.801745928908056_wp real ( wp ), parameter :: b126 = 3912815231 7.0_wp / 1602821527 3.0_wp ! 2.441204566481742_wp real ( wp ), parameter :: b127 = - 4063835789 3.0_wp / 1680405901 6.0_wp ! -2.418365577882472_wp real ( wp ), parameter :: b128 = - 743736117 1.0_wp / 2191111474 3.0_wp ! -0.3394332629003293_wp real ( wp ), parameter :: b129 = 104012570 6.0_wp / 533494910 9.0_wp ! 0.1949645038310337_wp real ( wp ), parameter :: b1210 = - 112986513 4.0_wp / 581290764 5.0_wp ! -0.1943717676250815_wp real ( wp ), parameter :: b1211 = 625344111 8.0_wp / 1054385272 5.0_wp ! 0.5930888149805792_wp real ( wp ), parameter :: a2 = 9.0_wp / 14 2.0_wp ! 0.06338028169014085_wp real ( wp ), parameter :: a3 = 2451 4.0_wp / 23849 1.0_wp ! 0.1027879458763643_wp real ( wp ), parameter :: a4 = 1225 7.0_wp / 7949 7.0_wp ! 0.1541819188145465_wp real ( wp ), parameter :: a5 = 5 0.0_wp / 12 9.0_wp ! 0.3875968992248062_wp real ( wp ), parameter :: a6 = 3 4.0_wp / 7 3.0_wp ! 0.4657534246575343_wp real ( wp ), parameter :: a7 = 2 3.0_wp / 14 8.0_wp ! 0.1554054054054054_wp real ( wp ), parameter :: a8 = 14 2.0_wp / 14 1.0_wp ! 1.00709219858156_wp real ( wp ), parameter :: a9 = 1418317534 5.0_wp / 1618823234 3.0_wp ! 0.876141078561489_wp real ( wp ), parameter :: a10 = 8 3.0_wp / 9 1.0_wp ! 0.912087912087912_wp real ( wp ), parameter :: a11 = 14 3.0_wp / 14 9.0_wp ! 0.959731543624161_wp real ( wp ), parameter :: c1 = 43885319 3.0_wp / 988149683 8.0_wp ! 0.04441161093250152_wp real ( wp ), parameter :: c6 = 1109352542 9.0_wp / 3134201341 4.0_wp ! 0.3539506311373312_wp real ( wp ), parameter :: c7 = 48131144 3.0_wp / 193669576 2.0_wp ! 0.2485219684184965_wp real ( wp ), parameter :: c8 = - 337529455 8.0_wp / 1014542425 3.0_wp ! -0.3326913171720666_wp real ( wp ), parameter :: c9 = 983099386 2.0_wp / 511698105 7.0_wp ! 1.921248828652836_wp real ( wp ), parameter :: c10 = - 13863084994 3.0_wp / 5074747461 7.0_wp ! -2.731778300088252_wp real ( wp ), parameter :: c11 = 715227820 6.0_wp / 510439334 5.0_wp ! 1.401200440989917_wp real ( wp ), parameter :: c12 = 511819592 7.0_wp / 5379865192 6.0_wp ! 0.0951361371292365_wp real ( wp ), parameter :: d1 = 28928309 1.0_wp / 600869651 0.0_wp ! -0.003732456673269437_wp real ( wp ), parameter :: d6 = 303415248 7.0_wp / 791333631 9.0_wp ! -0.02947203216019219_wp real ( wp ), parameter :: d7 = 717056415 8.0_wp / 3026302743 5.0_wp ! 0.01158056612815422_wp real ( wp ), parameter :: d8 = 720630374 7.0_wp / 1675819591 0.0_wp ! -0.7627079959184843_wp real ( wp ), parameter :: d9 = - 105973925 8.0_wp / 847238746 7.0_wp ! 2.046330367018225_wp real ( wp ), parameter :: d10 = 1653412953 1.0_wp / 1155085350 5.0_wp ! -4.163198889384351_wp real ( wp ), parameter :: d11 = - 3.0_wp / 2.0_wp ! 2.901200440989918_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t * h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 ) end associate end procedure rktp86 !***************************************************************************************** !***************************************************************************************** !> ! Enright Verner 8(7) ! !### Reference ! * W. H. Enright, \"The Relative Efficiency of Alternative Defect Control Schemes ! for High-Order Continuous Runge-Kutta Formulas\", ! SIAM Journal on Numerical Analysis, Vol. 30, No. 5. (Oct., 1993), pp. 1419-1445. module procedure rkev87 real ( wp ), parameter :: a2 = 5.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 1.02577772963604852686308492201039861351819757365684575389948006932409012131715771231e-1_wp real ( wp ), parameter :: a4 = 1.53866659445407279029462738301559792027729636048526863084922010398613518197573656846e-1_wp real ( wp ), parameter :: a5 = 3.84600000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 4.61500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a7 = 1.53800000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a8 = 8.57100000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 9.50522279549898543264080746155892215372083974054663210568629277143998134232923935826e-1_wp real ( wp ), parameter :: a10 = 7.22200000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a11 = 9.37500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 5.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = 7.95367668507191489463769912616233707314310387997043291210079553116635514850736965522e-3_wp real ( wp ), parameter :: b32 = 9.46240962785329377916707930748775242786766534857141424778472114012426569832084015753e-2_wp real ( wp ), parameter :: b41 = 3.84666648613518197573656845753899480069324090121317157712305025996533795493934142114e-2_wp real ( wp ), parameter :: b43 = 1.15399994584055459272097053726169844020797227036395147313691507798960138648180242634e-1_wp real ( wp ), parameter :: b51 = 3.84391795249995742463414694148930014496173869183551650147262740706965192166135782038e-1_wp real ( wp ), parameter :: b53 = - 1.4413754967533895577013957427459670216869972115118037596261793190397908645560378797e0_wp real ( wp ), parameter :: b54 = 1.44158370150339381523798104859703700719082334232825210947891657833282567238990209761e0_wp real ( wp ), parameter :: b61 = 4.61679927225245821615407392990543100173216372016370799947874024989156378037664283266e-2_wp real ( wp ), parameter :: b64 = 2.30766671478580119613626743161835287145952544968066036170902600446677938235230248901e-1_wp real ( wp ), parameter :: b65 = 1.84565335798895298224832517539110402836725817830296883834309997054406423961003322773e-1_wp real ( wp ), parameter :: b71 = 5.98340656981684945502396474355291084616704020934744687941026109734450878397200860064e-2_wp real ( wp ), parameter :: b74 = 1.11070988365806962422446377950496848082610655711386443707870631101667161815495770356e-1_wp real ( wp ), parameter :: b75 = - 3.4214310915191931585007005185985812353861433634302098328491649125465037270146208540e-2_wp real ( wp ), parameter :: b76 = 1.71092568512164746123209797999598558095803758294411858265184070503527876149303521772e-2_wp real ( wp ), parameter :: b81 = - 5.3795007752787302261474715462946928642562492201550692194017067742239449282090711696e-1_wp real ( wp ), parameter :: b84 = - 6.9376482130983202468485892167839192961199723756828602894007094394246115740310891917e0_wp real ( wp ), parameter :: b85 = - 4.6624538209733341287003258854737026552374536190626584633882834158844336356509780740e0_wp real ( wp ), parameter :: b86 = 3.99515211159952739816366225688709123778305091676102567472916353273143970250297438270e0_wp real ( wp ), parameter :: b87 = 9.0_wp real ( wp ), parameter :: b91 = - 1.6324274407986590789038658936937338307876068928047009736797164524613917396815405352e0_wp real ( wp ), parameter :: b94 = - 1.0827155649128676300106788103992512405570868288293796026024992785621740125352159452e1_wp real ( wp ), parameter :: b95 = - 1.2412770216529556426254179980877757507654516931216971035750731127725169216761599855e1_wp real ( wp ), parameter :: b96 = 9.72736897958029723333620569705898647991679730938513196401603844136574931065998854059e0_wp real ( wp ), parameter :: b97 = 1.61993509145171614713050347911446705109706857016123854149928694302903467232127746865e1_wp real ( wp ), parameter :: b98 = - 1.0384430809066835611232576348376103150240692462738613298483822870379681784453944854e-1_wp real ( wp ), parameter :: b101 = 4.37969506182387858999383959550753086479857907336724342215547180958125611435049537720e-1_wp real ( wp ), parameter :: b104 = 3.93953188040780609055484179804938065477461949555863432014746148406805874085095872275e0_wp real ( wp ), parameter :: b105 = 2.86077034685671490951716275075256969722509129259119025387241581075503457766785108234e0_wp real ( wp ), parameter :: b106 = - 1.7743107088675159424540294493688191717730257147970606451633813362863675504027539094e0_wp real ( wp ), parameter :: b107 = - 4.8953905177642011781075138200194429107217851579522239829952612873605231471994530162e0_wp real ( wp ), parameter :: b108 = 2.13024858819919749451668262421798635017462468974251987239988291318720261714005089224e-1_wp real ( wp ), parameter :: b109 = - 5.9395365635111487961513501386239991002220291711516275316770143453048494065657506474e-2_wp real ( wp ), parameter :: b111 = - 1.4741971530084051096783684495220401762953156744718612221415953506898842409410764394e0_wp real ( wp ), parameter :: b114 = - 1.0994004568773831856436455451565667915965033574293371252746458409074590501516335418e1_wp real ( wp ), parameter :: b115 = - 1.1347103595550558407033481028962542986773842505250429938230098582640399568841966955e1_wp real ( wp ), parameter :: b116 = 8.95698732805847648932199138433047040420587034365927857662263761085553916622223226594e0_wp real ( wp ), parameter :: b117 = 1.58937788726768491199870127047315726092390614749240868516326055420934681415123903105e1_wp real ( wp ), parameter :: b118 = - 9.8752574205231410895382886685088801840992767797867610760540167194860976207728613471e-2_wp real ( wp ), parameter :: b119 = 4.88850458495220344526104177023129683434865807354905894219062956659502007705067202486e-3_wp real ( wp ), parameter :: b1110 = - 4.0968137822510287105773140969344294040959548433844633187412729158670403045658227312e-3_wp real ( wp ), parameter :: b121 = - 2.6300593327636131335587362170718842216114396527353516008958114998659179172525086061e0_wp real ( wp ), parameter :: b124 = - 9.1742180511635168771961994716051325461520269343576437631118099519514590372371556623e0_wp real ( wp ), parameter :: b125 = - 1.9181392627635586309607750914002594644548673509102310272301267608284090817942461230e1_wp real ( wp ), parameter :: b126 = 1.46425586936966487212372354845143649157868001572824958943201356999170406197491766176e1_wp real ( wp ), parameter :: b127 = 1.75293194641808432064264792329037561372134510518264860784855289743130207876560918202e1_wp real ( wp ), parameter :: b128 = - 3.7191756017725564567993148040646183259986035050825855493662910931190949416983788302e-1_wp real ( wp ), parameter :: b129 = - 7.0099615383151451311120261802995845194696552530300984200157512415971100577511657140e-1_wp real ( wp ), parameter :: b1210 = 5.10160166123419814594373796567007747993680583372732066087135277690995003233586244844e-2_wp real ( wp ), parameter :: b1211 = 8.35689551081652570030668604041209869059346704560318853832715091573927364648452890489e-1_wp real ( wp ), parameter :: b131 = 2.15760322561474994411124388359746470315016189993958868463227784863178137907983232935e-1_wp real ( wp ), parameter :: b134 = 8.34514732667823366560737998962040201361659061600363822667194131727201870364735969189e0_wp real ( wp ), parameter :: b135 = 2.18566238546511021703127210271410825362935054094744855941151130759498192966438607636e0_wp real ( wp ), parameter :: b136 = - 1.6872364802758613307171751762566037387388156104034081739315755043398409544172643181e0_wp real ( wp ), parameter :: b137 = - 8.7118979009844764699498732005474293440649791305528456441763927818947185541425600579e0_wp real ( wp ), parameter :: b138 = 2.44414593429891254272241354773491646097520831036964631654327459178700700237090814351e-2_wp real ( wp ), parameter :: b139 = 8.46378799450539085004935994965690483699123804486085782773911124365252659256135973281e-2_wp real ( wp ), parameter :: b1310 = 5.43485007267475889689554161135858132263172930458903122118464018149985401390772696043e-1_wp real ( wp ), parameter :: c1 = 4.39177036443990264767390168245612938204165409329946310979955485867750206154532516854e-2_wp real ( wp ), parameter :: c6 = 3.51024625301198059003711947067197522471081955372891881652834064609672316461737698276e-1_wp real ( wp ), parameter :: c7 = 2.46142826354923978927496217611357561294520506174049687891933955470328003987048218576e-1_wp real ( wp ), parameter :: c8 = 9.00324493052912782292485743663086167980166191074574843765667123724307486893548248673e-1_wp real ( wp ), parameter :: c9 = 4.54941872725474687205992745995487359662269870465745627778562103310520198596208865435e0_wp real ( wp ), parameter :: c10 = 4.80250151923706131251435406595354490562463095633152715752232119918349986859035476853e-3_wp real ( wp ), parameter :: c11 = - 4.7410543521200460045854095885960988103202068879671787514735082136428459116707380269e0_wp real ( wp ), parameter :: c12 = - 3.5457652500737177548746515059093087677430164120112009787806583305262240211772839944e-1_wp real ( wp ), parameter :: d1 = 4.33210538122143048906481448990561225500794142960488184912531716454290716526337909125e-2_wp real ( wp ), parameter :: d6 = 3.38299786239324428483566710567298525845838208179552347378195505093356569277661366407e-1_wp real ( wp ), parameter :: d7 = 2.48479842819169689968723882111796748697722834015831878169551896051150521744166052704e-1_wp real ( wp ), parameter :: d8 = 2.23788296726381915717640915256391015765072451399129220461423268948426689142758885858e-1_wp real ( wp ), parameter :: d9 = - 4.0201628625024655295655283841782384327701940439930130919929624261829397741432866016e-2_wp real ( wp ), parameter :: d10 = 1.23292316936198306185965165238573766500855475391670951932862563960817353162350588140e-1_wp real ( wp ), parameter :: d13 = 6.30203320917360100491104657686662049681335571576969144866432185626491927618621819940e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkev87 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg 8(9) method. ! !### Reference ! * E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order ! Runge-Kutta Formulas with Stepsize Control\", ! [NASA TR R-2870](https://ntrs.nasa.gov/citations/19680027281). module procedure rkf89 real ( wp ), parameter :: a1 = 0.44368940376498183109599404281370_wp real ( wp ), parameter :: a2 = 0.66553410564747274664399106422055_wp real ( wp ), parameter :: a3 = 0.99830115847120911996598659633083_wp real ( wp ), parameter :: a4 = 0.3155_wp real ( wp ), parameter :: a5 = 0.50544100948169068626516126737384_wp real ( wp ), parameter :: a6 = 0.17142857142857142857142857142857_wp real ( wp ), parameter :: a7 = 0.82857142857142857142857142857143_wp real ( wp ), parameter :: a8 = 0.66543966121011562534953769255586_wp real ( wp ), parameter :: a9 = 0.24878317968062652069722274560771_wp real ( wp ), parameter :: a10 = 0.1090_wp real ( wp ), parameter :: a11 = 0.8910_wp real ( wp ), parameter :: a12 = 0.3995_wp real ( wp ), parameter :: a13 = 0.6005_wp real ( wp ), parameter :: a14 = 1.0_wp real ( wp ), parameter :: a16 = 1.0_wp real ( wp ), parameter :: b1 = 0.44368940376498183109599404281370_wp real ( wp ), parameter :: b20 = 0.16638352641186818666099776605514_wp real ( wp ), parameter :: b21 = 0.49915057923560455998299329816541_wp real ( wp ), parameter :: b30 = 0.24957528961780227999149664908271_wp real ( wp ), parameter :: b32 = 0.74872586885340683997448994724812_wp real ( wp ), parameter :: b40 = 0.20661891163400602426556710393185_wp real ( wp ), parameter :: b42 = 0.17707880377986347040380997288319_wp real ( wp ), parameter :: b43 = - 0.68197715413869494669377076815048e-1_wp real ( wp ), parameter :: b50 = 0.10927823152666408227903890926157_wp real ( wp ), parameter :: b53 = 0.40215962642367995421990563690087e-2_wp real ( wp ), parameter :: b54 = 0.39214118169078980444392330174325_wp real ( wp ), parameter :: b60 = 0.98899281409164665304844765434355e-1_wp real ( wp ), parameter :: b63 = 0.35138370227963966951204487356703e-2_wp real ( wp ), parameter :: b64 = 0.12476099983160016621520625872489_wp real ( wp ), parameter :: b65 = - 0.55745546834989799643742901466348e-1_wp real ( wp ), parameter :: b70 = - 0.36806865286242203724153101080691_wp real ( wp ), parameter :: b74 = - 0.22273897469476007645024020944166e+1_wp real ( wp ), parameter :: b75 = 0.13742908256702910729565691245744e+1_wp real ( wp ), parameter :: b76 = 0.20497390027111603002159354092206e+1_wp real ( wp ), parameter :: b80 = 0.45467962641347150077351950603349e-1_wp real ( wp ), parameter :: b85 = 0.32542131701589147114677469648853_wp real ( wp ), parameter :: b86 = 0.28476660138527908888182420573687_wp real ( wp ), parameter :: b87 = 0.97837801675979152435868397271099e-2_wp real ( wp ), parameter :: b90 = 0.60842071062622057051094145205182e-1_wp real ( wp ), parameter :: b95 = - 0.21184565744037007526325275251206e-1_wp real ( wp ), parameter :: b96 = 0.19596557266170831957464490662983_wp real ( wp ), parameter :: b97 = - 0.42742640364817603675144835342899e-2_wp real ( wp ), parameter :: b98 = 0.17434365736814911965323452558189e-1_wp real ( wp ), parameter :: b100 = 0.54059783296931917365785724111182e-1_wp real ( wp ), parameter :: b106 = 0.11029825597828926530283127648228_wp real ( wp ), parameter :: b107 = - 0.12565008520072556414147763782250e-2_wp real ( wp ), parameter :: b108 = 0.36790043477581460136384043566339e-2_wp real ( wp ), parameter :: b109 = - 0.57780542770972073040840628571866e-1_wp real ( wp ), parameter :: b110 = 0.12732477068667114646645181799160_wp real ( wp ), parameter :: b117 = 0.11448805006396105323658875721817_wp real ( wp ), parameter :: b118 = 0.28773020709697992776202201849198_wp real ( wp ), parameter :: b119 = 0.50945379459611363153735885079465_wp real ( wp ), parameter :: b1110 = - 0.14799682244372575900242144449640_wp real ( wp ), parameter :: b120 = - 0.36526793876616740535848544394333e-2_wp real ( wp ), parameter :: b125 = 0.81629896012318919777819421247030e-1_wp real ( wp ), parameter :: b126 = - 0.38607735635693506490517694343215_wp real ( wp ), parameter :: b127 = 0.30862242924605106450474166025206e-1_wp real ( wp ), parameter :: b128 = - 0.58077254528320602815829374733518e-1_wp real ( wp ), parameter :: b129 = 0.33598659328884971493143451362322_wp real ( wp ), parameter :: b1210 = 0.41066880401949958613549622786417_wp real ( wp ), parameter :: b1211 = - 0.11840245972355985520633156154536e-1_wp real ( wp ), parameter :: b130 = - 0.12375357921245143254979096135669e+1_wp real ( wp ), parameter :: b135 = - 0.24430768551354785358734861366763e+2_wp real ( wp ), parameter :: b136 = 0.54779568932778656050436528991173_wp real ( wp ), parameter :: b137 = - 0.44413863533413246374959896569346e+1_wp real ( wp ), parameter :: b138 = 0.10013104813713266094792617851022e+2_wp real ( wp ), parameter :: b139 = - 0.14995773102051758447170985073142e+2_wp real ( wp ), parameter :: b1310 = 0.58946948523217013620824539651427e+1_wp real ( wp ), parameter :: b1311 = 0.17380377503428984877616857440542e+1_wp real ( wp ), parameter :: b1312 = 0.27512330693166730263758622860276e+2_wp real ( wp ), parameter :: b140 = - 0.35260859388334522700502958875588_wp real ( wp ), parameter :: b145 = - 0.18396103144848270375044198988231_wp real ( wp ), parameter :: b146 = - 0.65570189449741645138006879985251_wp real ( wp ), parameter :: b147 = - 0.39086144880439863435025520241310_wp real ( wp ), parameter :: b148 = 0.26794646712850022936584423271209_wp real ( wp ), parameter :: b149 = - 0.10383022991382490865769858507427e+1_wp real ( wp ), parameter :: b1410 = 0.16672327324258671664727346168501e+1_wp real ( wp ), parameter :: b1411 = 0.49551925855315977067732967071441_wp real ( wp ), parameter :: b1412 = 0.11394001132397063228586738141784e+1_wp real ( wp ), parameter :: b1413 = 0.51336696424658613688199097191534e-1_wp real ( wp ), parameter :: b150 = 0.10464847340614810391873002406755e-2_wp real ( wp ), parameter :: b158 = - 0.67163886844990282237778446178020e-2_wp real ( wp ), parameter :: b159 = 0.81828762189425021265330065248999e-2_wp real ( wp ), parameter :: b1510 = - 0.42640342864483347277142138087561e-2_wp real ( wp ), parameter :: b1511 = 0.28009029474168936545976331153703e-3_wp real ( wp ), parameter :: b1512 = - 0.87835333876238676639057813145633e-2_wp real ( wp ), parameter :: b1513 = 0.10254505110825558084217769664009e-1_wp real ( wp ), parameter :: b160 = - 0.13536550786174067080442168889966e+1_wp real ( wp ), parameter :: b165 = - 0.18396103144848270375044198988231_wp real ( wp ), parameter :: b166 = - 0.65570189449741645138006879985251_wp real ( wp ), parameter :: b167 = - 0.39086144880439863435025520241310_wp real ( wp ), parameter :: b168 = 0.27466285581299925758962207732989_wp real ( wp ), parameter :: b169 = - 0.10464851753571915887035188572676e+1_wp real ( wp ), parameter :: b1610 = 0.16714967667123155012004488306588e+1_wp real ( wp ), parameter :: b1611 = 0.49523916825841808131186990740287_wp real ( wp ), parameter :: b1612 = 0.11481836466273301905225795954930e+1_wp real ( wp ), parameter :: b1613 = 0.41082191313833055603981327527525e-1_wp real ( wp ), parameter :: b1615 = 1.0_wp real ( wp ), parameter :: c0 = 0.32256083500216249913612900960247e-1_wp real ( wp ), parameter :: c8 = 0.25983725283715403018887023171963_wp real ( wp ), parameter :: c9 = 0.92847805996577027788063714302190e-1_wp real ( wp ), parameter :: c10 = 0.16452339514764342891647731842800_wp real ( wp ), parameter :: c11 = 0.17665951637860074367084298397547_wp real ( wp ), parameter :: c12 = 0.23920102320352759374108933320941_wp real ( wp ), parameter :: c13 = 0.39484274604202853746752118829325e-2_wp real ( wp ), parameter :: c14 = 0.30726495475860640406368305522124e-1_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 )) call me % f ( t , x , f0 ) call me % f ( t + h * a1 , x + f0 * b1 * h , f1 ) call me % f ( t + h * a2 , x + ( f0 * b20 + f1 * b21 ) * h , f2 ) call me % f ( t + h * a3 , x + ( f0 * b30 + f2 * b32 ) * h , f3 ) call me % f ( t + h * a4 , x + ( f0 * b40 + f2 * b42 + f3 * b43 ) * h , f4 ) call me % f ( t + h * a5 , x + ( f0 * b50 + f3 * b53 + f4 * b54 ) * h , f5 ) call me % f ( t + h * a6 , x + ( f0 * b60 + f3 * b63 + f4 * b64 + f5 * b65 ) * h , f6 ) call me % f ( t + h * a7 , x + ( f0 * b70 + f4 * b74 + f5 * b75 + f6 * b76 ) * h , f7 ) call me % f ( t + h * a8 , x + ( f0 * b80 + f5 * b85 + f6 * b86 + f7 * b87 ) * h , f8 ) call me % f ( t + h * a9 , x + ( f0 * b90 + f5 * b95 + f6 * b96 + f7 * b97 + f8 * b98 ) * h , f9 ) call me % f ( t + h * a10 , x + ( f0 * b100 + f6 * b106 + f7 * b107 + f8 * b108 + & f9 * b109 ) * h , f10 ) call me % f ( t + h * a11 , x + ( f0 * b110 + f7 * b117 + f8 * b118 + f9 * b119 + & f10 * b1110 ) * h , f11 ) call me % f ( t + h * a12 , x + ( f0 * b120 + f5 * b125 + f6 * b126 + f7 * b127 + & f8 * b128 + f9 * b129 + f10 * b1210 + f11 * b1211 ) * h , f12 ) call me % f ( t + h * a13 , x + ( f0 * b130 + f5 * b135 + f6 * b136 + f7 * b137 + & f8 * b138 + f9 * b139 + f10 * b1310 + f11 * b1311 + f12 * b1312 ) * h , f13 ) call me % f ( t + h * a14 , x + ( f0 * b140 + f5 * b145 + f6 * b146 + f7 * b147 + f8 * b148 + & f9 * b149 + f10 * b1410 + f11 * b1411 + f12 * b1412 + f13 * b1413 ) * h , f14 ) call me % f ( t , x + ( f0 * b150 + f8 * b158 + f9 * b159 + f10 * b1510 + f11 * b1511 + & f12 * b1512 + f13 * b1513 ) * h , f15 ) call me % f ( t + h * a16 , x + ( f0 * b160 + f5 * b165 + f6 * b166 + f7 * b167 + f8 * b168 + & f9 * b169 + f10 * b1610 + f11 * b1611 + f12 * b1612 + f13 * b1613 + & f15 * b1615 ) * h , f16 ) xf = x + h * ( f0 * c0 + f8 * c8 + f9 * c9 + f10 * c10 + f11 * c11 + f12 * c12 + f13 * c13 + f14 * c14 ) xerr = c14 * h * ( f0 + f14 - f15 - f16 ) end associate end procedure rkf89 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Verner 8(9) ! !### Reference ! * J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the ! Local Truncation Error\", SIAM Journal on Numerical Analysis, ! 15(4), 772-790, 1978. module procedure rkv89 real ( wp ), parameter :: s6 = sqrt ( 6.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 2.0_wp * ( 1.0_wp + s6 ) / 1 5.0_wp real ( wp ), parameter :: a6 = ( 6.0_wp + s6 ) / 1 5.0_wp real ( wp ), parameter :: a7 = ( 6.0_wp - s6 ) / 1 5.0_wp real ( wp ), parameter :: a8 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a10 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a11 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a12 = 4.0_wp / 3.0_wp real ( wp ), parameter :: a13 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a15 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 2 7.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b43 = 3.0_wp / 2 4.0_wp real ( wp ), parameter :: b51 = ( 4.0_wp + 9 4.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b53 = - ( 28 2.0_wp + 25 2.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b54 = ( 32 8.0_wp + 20 8.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b61 = ( 9.0_wp - s6 ) / 15 0.0_wp real ( wp ), parameter :: b64 = ( 31 2.0_wp + 3 2.0_wp * s6 ) / 142 5.0_wp real ( wp ), parameter :: b65 = ( 6 9.0_wp + 2 9.0_wp * s6 ) / 57 0.0_wp real ( wp ), parameter :: b71 = ( 92 7.0_wp - 34 7.0_wp * s6 ) / 125 0.0_wp real ( wp ), parameter :: b74 = ( - 1624 8.0_wp + 732 8.0_wp * s6 ) / 937 5.0_wp real ( wp ), parameter :: b75 = ( - 48 9.0_wp + 17 9.0_wp * s6 ) / 375 0.0_wp real ( wp ), parameter :: b76 = ( 1426 8.0_wp - 579 8.0_wp * s6 ) / 937 5.0_wp real ( wp ), parameter :: b81 = 4.0_wp / 5 4.0_wp real ( wp ), parameter :: b86 = ( 1 6.0_wp - s6 ) / 5 4.0_wp real ( wp ), parameter :: b87 = ( 1 6.0_wp + s6 ) / 5 4.0_wp real ( wp ), parameter :: b91 = 3 8.0_wp / 51 2.0_wp real ( wp ), parameter :: b96 = ( 11 8.0_wp - 2 3.0_wp * s6 ) / 51 2.0_wp real ( wp ), parameter :: b97 = ( 11 8.0_wp + 2 3.0_wp * s6 ) / 51 2.0_wp real ( wp ), parameter :: b98 = - 1 8.0_wp / 51 2.0_wp real ( wp ), parameter :: b101 = 1 1.0_wp / 14 4.0_wp real ( wp ), parameter :: b106 = ( 26 6.0_wp - s6 ) / 86 4.0_wp real ( wp ), parameter :: b107 = ( 26 6.0_wp + s6 ) / 86 4.0_wp real ( wp ), parameter :: b108 = - 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b109 = - 8.0_wp / 2 7.0_wp real ( wp ), parameter :: b111 = ( 503 4.0_wp - 27 1.0_wp * s6 ) / 6144 0.0_wp real ( wp ), parameter :: b117 = ( 785 9.0_wp - 162 6.0_wp * s6 ) / 1024 0.0_wp real ( wp ), parameter :: b118 = ( - 223 2.0_wp + 81 3.0_wp * s6 ) / 2048 0.0_wp real ( wp ), parameter :: b119 = ( - 59 4.0_wp + 27 1.0_wp * s6 ) / 96 0.0_wp real ( wp ), parameter :: b1110 = ( 65 7.0_wp - 81 3.0_wp * s6 ) / 512 0.0_wp real ( wp ), parameter :: b121 = ( 599 6.0_wp - 379 4.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b126 = ( - 434 2.0_wp - 33 8.0_wp * s6 ) / 9.0_wp real ( wp ), parameter :: b127 = ( 15492 2.0_wp - 4045 8.0_wp * s6 ) / 13 5.0_wp real ( wp ), parameter :: b128 = ( - 417 6.0_wp + 379 4.0_wp * s6 ) / 4 5.0_wp real ( wp ), parameter :: b129 = ( - 34086 4.0_wp + 24281 6.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b1210 = ( 2630 4.0_wp - 1517 6.0_wp * s6 ) / 4 5.0_wp real ( wp ), parameter :: b1211 = - 2662 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b131 = ( 379 3.0_wp + 216 8.0_wp * s6 ) / 10368 0.0_wp real ( wp ), parameter :: b136 = ( 404 2.0_wp + 226 3.0_wp * s6 ) / 1382 4.0_wp real ( wp ), parameter :: b137 = ( - 23127 8.0_wp + 4071 7.0_wp * s6 ) / 6912 0.0_wp real ( wp ), parameter :: b138 = ( 794 7.0_wp - 216 8.0_wp * s6 ) / 1152 0.0_wp real ( wp ), parameter :: b139 = ( 104 8.0_wp - 54 2.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b1310 = ( - 138 3.0_wp + 54 2.0_wp * s6 ) / 72 0.0_wp real ( wp ), parameter :: b1311 = 262 4.0_wp / 105 3.0_wp real ( wp ), parameter :: b1312 = 3.0_wp / 166 4.0_wp real ( wp ), parameter :: b141 = - 13 7.0_wp / 129 6.0_wp real ( wp ), parameter :: b146 = ( 564 2.0_wp - 33 7.0_wp * s6 ) / 86 4.0_wp real ( wp ), parameter :: b147 = ( 564 2.0_wp + 33 7.0_wp * s6 ) / 86 4.0_wp real ( wp ), parameter :: b148 = - 29 9.0_wp / 4 8.0_wp real ( wp ), parameter :: b149 = 18 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b1410 = - 4 4.0_wp / 9.0_wp real ( wp ), parameter :: b1411 = - 512 0.0_wp / 105 3.0_wp real ( wp ), parameter :: b1412 = - 1 1.0_wp / 46 8.0_wp real ( wp ), parameter :: b1413 = 1 6.0_wp / 9.0_wp real ( wp ), parameter :: b151 = ( 3361 7.0_wp - 216 8.0_wp * s6 ) / 51840 0.0_wp real ( wp ), parameter :: b156 = ( - 384 6.0_wp + 3 1.0_wp * s6 ) / 1382 4.0_wp real ( wp ), parameter :: b157 = ( 15533 8.0_wp - 5280 7.0_wp * s6 ) / 34560 0.0_wp real ( wp ), parameter :: b158 = ( - 1253 7.0_wp + 216 8.0_wp * s6 ) / 5760 0.0_wp real ( wp ), parameter :: b159 = ( 9 2.0_wp + 54 2.0_wp * s6 ) / 202 5.0_wp real ( wp ), parameter :: b1510 = ( - 179 7.0_wp - 54 2.0_wp * s6 ) / 360 0.0_wp real ( wp ), parameter :: b1511 = 32 0.0_wp / 56 7.0_wp real ( wp ), parameter :: b1512 = - 1.0_wp / 192 0.0_wp real ( wp ), parameter :: b1513 = 4.0_wp / 10 5.0_wp real ( wp ), parameter :: b161 = ( - 3648 7.0_wp - 3035 2.0_wp * s6 ) / 27960 0.0_wp real ( wp ), parameter :: b166 = ( - 2966 6.0_wp - 449 9.0_wp * s6 ) / 745 6.0_wp real ( wp ), parameter :: b167 = ( 277918 2.0_wp - 61597 3.0_wp * s6 ) / 18640 0.0_wp real ( wp ), parameter :: b168 = ( - 9432 9.0_wp + 9105 6.0_wp * s6 ) / 9320 0.0_wp real ( wp ), parameter :: b169 = ( - 23219 2.0_wp + 12140 8.0_wp * s6 ) / 1747 5.0_wp real ( wp ), parameter :: b1610 = ( 10122 6.0_wp - 2276 4.0_wp * s6 ) / 582 5.0_wp real ( wp ), parameter :: b1611 = - 16998 4.0_wp / 908 7.0_wp real ( wp ), parameter :: b1612 = - 8 7.0_wp / 3029 0.0_wp real ( wp ), parameter :: b1613 = 49 2.0_wp / 116 5.0_wp real ( wp ), parameter :: b1615 = 126 0.0_wp / 23 3.0_wp real ( wp ), parameter :: c1 = 10 3.0_wp / 168 0.0_wp real ( wp ), parameter :: c8 = - 2 7.0_wp / 14 0.0_wp real ( wp ), parameter :: c9 = 7 6.0_wp / 10 5.0_wp real ( wp ), parameter :: c10 = - 20 1.0_wp / 28 0.0_wp real ( wp ), parameter :: c11 = 102 4.0_wp / 136 5.0_wp real ( wp ), parameter :: c12 = 3.0_wp / 728 0.0_wp real ( wp ), parameter :: c13 = 1 2.0_wp / 3 5.0_wp real ( wp ), parameter :: c14 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: e1 = - 191 1.0_wp / 10920 0.0_wp real ( wp ), parameter :: e8 = 3439 8.0_wp / 10920 0.0_wp real ( wp ), parameter :: e9 = - 6115 2.0_wp / 10920 0.0_wp real ( wp ), parameter :: e10 = 11466 0.0_wp / 10920 0.0_wp real ( wp ), parameter :: e11 = - 11468 8.0_wp / 10920 0.0_wp real ( wp ), parameter :: e12 = - 6 3.0_wp / 10920 0.0_wp real ( wp ), parameter :: e13 = - 1310 4.0_wp / 10920 0.0_wp real ( wp ), parameter :: e14 = - 351 0.0_wp / 10920 0.0_wp real ( wp ), parameter :: e15 = 3931 2.0_wp / 10920 0.0_wp real ( wp ), parameter :: e16 = 605 8.0_wp / 10920 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( a2 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + & b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + & b1511 * f11 + b1512 * f12 + b1513 * f13 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + & b1611 * f11 + b1612 * f12 + b1613 * f13 + b1615 * f15 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv89 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras combined order 9(8) Runge-Kutta scheme A. ! !### Reference ! * Ch. Tsitouras, \"Optimized explicit Runge-Kutta pairs of order 9(8)\", ! Applied Numerical Mathematics, 38 (2001) 123-134. ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK9/RKcoeff9b_1.pdf) module procedure rkt98a real ( wp ), parameter :: a2 = . 204081632653061224489795918367346938775510204081632653061224489795918367346938775510 2e-1_wp real ( wp ), parameter :: a3 = . 881329391499810300863791593924151123085812117736908664603226557868277361675571063543 0e-1_wp real ( wp ), parameter :: a4 = . 1321994087249715451295687390886226684628718176605362996904839836802416042513356595314_wp real ( wp ), parameter :: a5 = . 4285714285714285714285714285714285714285714285714285714285714285714285714285714285714_wp real ( wp ), parameter :: a6 = . 5364755392243287681395100999813264375851395225813758811703296868095847858703057159708_wp real ( wp ), parameter :: a7 = . 2254292226804331366223946619234354671767652393233860235915750750951771188915990459340_wp real ( wp ), parameter :: a8 = . 6349206349206349206349206349206349206349206349206349206349206349206349206349206349206_wp real ( wp ), parameter :: a9 = . 4761904761904761904761904761904761904761904761904761904761904761904761904761904761905_wp real ( wp ), parameter :: a10 = 1.055555555555555555555555555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a11 = . 7777777777777777777777777777777777777777777777777777777777777777777777777777777777778_wp real ( wp ), parameter :: a12 = . 1474169624260994760478401587101660956180420042646161803585052367559161448324216358210_wp real ( wp ), parameter :: a13 = . 9375_wp real ( wp ), parameter :: a14 = . 975_wp real ( wp ), parameter :: b21 = . 204081632653061224489795918367346938775510204081632653061224489795918367346938775510 2e-1_wp real ( wp ), parameter :: b31 = - . 1021687274487683147769723606535303770211896504959152824720881616958241197178852529434_wp real ( wp ), parameter :: b32 = . 1903016665987493448633515200459454893297708622696061489324108174826518558854423592977_wp real ( wp ), parameter :: b41 = . 330498521812428862823921847721556671157179544151340749226209959200604010628339148828 6e-1_wp real ( wp ), parameter :: b43 = . 991495565437286588471765543164670013471538632454022247678629877601812031885017446485 8e-1_wp real ( wp ), parameter :: b51 = . 9439263832171291883556670672811977550046744677129090342789268623214132543830715838461_wp real ( wp ), parameter :: b53 = - 3.630115063093482037077114300073110289641773922761700400575782997067611129391489310214_wp real ( wp ), parameter :: b54 = 3.114760108447781420150018661363341106065670883620219937725427563317626446436989154939_wp real ( wp ), parameter :: b61 = . 205692332861626171178284855640856652230036298375380298403785842739020476295782606761 4e-1_wp real ( wp ), parameter :: b64 = . 2604824183197402987552340723087785980849282464799395547519553603229784733524946656053_wp real ( wp ), parameter :: b65 = . 2554238876184258522664475421084621742772076462638982965779957422127042648882327896893_wp real ( wp ), parameter :: b71 = . 431848370510926302883519425575866900000132380422068978367176934329861651640372635525 2e-1_wp real ( wp ), parameter :: b74 = . 1769284839807689645520842945002498666673573450203833044058383710943493957801668363127_wp real ( wp ), parameter :: b75 = . 771541462187698379431579576727171596732744815738902402125638279015690738504392303475 5e-2_wp real ( wp ), parameter :: b76 = - . 239951297330544201235737090167280545793279189659320267223737222231534943764897696599 0e-2_wp real ( wp ), parameter :: b81 = . 705467372134038800705467372134038800705467372134038800705467372134038800705467372134 0e-1_wp real ( wp ), parameter :: b86 = . 2389860715558522381270320269011306632810238539566724845073599194488366776462554669041_wp real ( wp ), parameter :: b87 = . 3253878261513788024373418708061003772833500437505585560570139782583943629181184308032_wp real ( wp ), parameter :: b91 = . 706845238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: b96 = . 1146981694865827822571846471014964620252663838260725205469644176957364421846758824211_wp real ( wp ), parameter :: b97 = . 3242899257515124558380534481365987760699717114120227175482736775423587959105622128170_wp real ( wp ), parameter :: b98 = - . 334821428571428571428571428571428571428571428571428571428571428571428571428571428571 4e-1_wp real ( wp ), parameter :: b101 = . 3828039568865740740740740740740740740740740740740740740740740740740740740740740740741_wp real ( wp ), parameter :: b106 = - 2 6.28104570763124221540974003468081947028606261133704083478349807677632293296095495655_wp real ( wp ), parameter :: b107 = - 1.748424643449004698170506878899427443294184302243206078796748836803923980619291957032_wp real ( wp ), parameter :: b108 = 8.7107466796875_wp real ( wp ), parameter :: b109 = 1 9.99147527006172839506172839506172839506172839506172839506172839506172839506172839506_wp real ( wp ), parameter :: b111 = . 577578890528468904236566043524326358845924311233659002300157700523052758125109092093 9e-1_wp real ( wp ), parameter :: b116 = . 76_wp real ( wp ), parameter :: b117 = . 4018553287915560050245043972333732847203199147775749045996022855946715894896836169645_wp real ( wp ), parameter :: b118 = . 662658962606279885409907729324041643285414266080101534129138171351881264741719599847 8e-1_wp real ( wp ), parameter :: b119 = - . 5150696954976787388652658281684056884304318728657759205657506333922693112630203285629_wp real ( wp ), parameter :: b1110 = . 696835917042563265389183142797338127475587813460274010099653838788209726443162018202 3e-2_wp real ( wp ), parameter :: b121 = . 699410303590639571568648959758215002260083899978403465631389356931799737435130859164 5e-1_wp real ( wp ), parameter :: b126 = - . 1206166060565470490794750098024428160239891793653556676806869026855595723414769418541_wp real ( wp ), parameter :: b127 = . 1326963017314458683010911057621835709637828919128544554925159376674464191887834137030_wp real ( wp ), parameter :: b128 = . 2031532538077627922059108299487811850373691592058111305356962697560067377203999264697_wp real ( wp ), parameter :: b129 = - . 754864017502388946717723113790252428097011541759511397509420865392276587589345060488 9e-1_wp real ( wp ), parameter :: b1210 = . 378910368643901129564314061820514011055844512791820692999455514721768225183265019059 6e-2_wp real ( wp ), parameter :: b1211 = - . 660597193518262091604224924133572418859865484385011517312114722831474369716959925557 2e-1_wp real ( wp ), parameter :: b131 = . 6878836016002817993752515099013030041019173079702440987327706356852301558017737433194_wp real ( wp ), parameter :: b136 = - 3.658808527366451517196946897056976218504208192589081007775064092270089158621094491595_wp real ( wp ), parameter :: b137 = 5.845503378564669890314102776059891925747966958611333131112559317698644813283634646256_wp real ( wp ), parameter :: b138 = 5.411412752004688858844863696709300082070631013287790747126942423884017249319289413984_wp real ( wp ), parameter :: b139 = - 1.582095988269673568992894109712396974043574141076643374159775089066374202615336309544_wp real ( wp ), parameter :: b1310 = . 994524886570629966778884663541958563480091885847213143911801635213045280598317853297 5e-1_wp real ( wp ), parameter :: b1311 = - 1.329593487105234404098771549303922926244482088345956610970650644487259700977298059950_wp real ( wp ), parameter :: b1312 = - 4.536254218085344054923493892951394749476260046442408298457962714965473684250800727799_wp real ( wp ), parameter :: b141 = . 8075602959459265637003617465986992156750424242709811245269878174761587489984770070790_wp real ( wp ), parameter :: b146 = - 7.835750139557992772198249358151231578755580407654683121798887409512496231362858547948_wp real ( wp ), parameter :: b147 = 6.174200025941229770123184423146954177664197990793732802584504944027199598185299195828_wp real ( wp ), parameter :: b148 = 7.111311052783799148723822283846058963658585479679811643355604800924488305671070483858_wp real ( wp ), parameter :: b149 = 1.126413982652184268358560776506518924191271296281999997786352511455840556312961264408_wp real ( wp ), parameter :: b1410 = . 1138838501589788637237573235699770016403876336825059128989257049544545698305937427348_wp real ( wp ), parameter :: b1411 = - 1.434774678607913207528871735039082294103761283429995473644501054462770211806990144762_wp real ( wp ), parameter :: b1412 = - 5.064314742122892898464863809545209351959607473464534474081890709755483907888716564210_wp real ( wp ), parameter :: b1413 = - . 235296471933197364377016509326850580105356601598184116270966051073914279398364369868 1e-1_wp real ( wp ), parameter :: b151 = . 8101674645254722523232876762637530370910583262175105775933018316393086542069855754015_wp real ( wp ), parameter :: b156 = - 1 1.92841245677955898272791316012006359130670880301152754325896491950568584401093883276_wp real ( wp ), parameter :: b157 = 5.364312898490360554625912421385267920693980736534035810795373384314434259846321616737_wp real ( wp ), parameter :: b158 = 8.059954459759511795757228635532122933456240951117021423047033797467500489813129448587_wp real ( wp ), parameter :: b159 = 4.618063439001721483758160286714057772615332315540952842312029459375380582946251202099_wp real ( wp ), parameter :: b1510 = . 1128601659181894505188796244218558774756228116520111404880300475877949274532116052613_wp real ( wp ), parameter :: b1511 = - 1.315207706945002903017387913180865178001333874822374203640801449667142626811434784416_wp real ( wp ), parameter :: b1512 = - 4.689892399903609125554297739238443813841792924181292032608257980483530407060762654113_wp real ( wp ), parameter :: b1513 = . 672137455432968165303624035800193639281962414042823027684175434586986633868191583703 6e-2_wp real ( wp ), parameter :: b1514 = - . 385672386214142073369060721356868945752191631867662450045859250739299027214450926334 4e-1_wp real ( wp ), parameter :: b161 = . 7081867006810967019347772392865651712376321476396730568850847595024088622008058350820_wp real ( wp ), parameter :: b166 = - 1 1.35112404359189673946143658241126665471485966274613155801176412146453899273199024599_wp real ( wp ), parameter :: b167 = 4.439836852763619566651386303128039432194840880353792439043045399385549660055953598204_wp real ( wp ), parameter :: b168 = 7.160528966855846780330688332694210230082237210593958603950542885510151860241609708315_wp real ( wp ), parameter :: b169 = 4.944752289066181389539519911976094691889352151362799884071179481037363375554630307368_wp real ( wp ), parameter :: b1610 = . 981953561086798742592703501940555170116801219719398366833846605007653188488342792932 0e-1_wp real ( wp ), parameter :: b1611 = - 1.023835739158951766446520340031695827655784562575140398451539531509310691718294156648_wp real ( wp ), parameter :: b1612 = - 3.935185699031579433419722235418354733643010565663948821548988100702690247383937415641_wp real ( wp ), parameter :: b1613 = - . 218626037455164619891723846941877166294185608905101974079563124169593376589851617246 1e-1_wp real ( wp ), parameter :: b1614 = - . 194920799474799113987905947234601097726691600464328452129891198427398074086267482594 0e-1_wp real ( wp ), parameter :: c1 = . 415355600880595916889589892186720192145913255567255167164392084889257990539494502703 3e-1_wp real ( wp ), parameter :: c8 = - . 4252280874169805589327845543703559909471287347438636516704849004566228405918914211737_wp real ( wp ), parameter :: c9 = . 4911269629417608841870622286295630148000839362387724323042417629187646342598357379221_wp real ( wp ), parameter :: c10 = . 4541782417588474254373676812638040365345450854512311037987257309434313503153553995250_wp real ( wp ), parameter :: c11 = 1.006032649094428065183781872196896559026233580812897577690817173850511464781870422371_wp real ( wp ), parameter :: c12 = . 2396980714287725918428584296767300637015778481901015943085981245718488414129283930348_wp real ( wp ), parameter :: c13 = - 4.455491297731407466229188603532881977410859597554953958343743900169006073451667494575_wp real ( wp ), parameter :: c14 = 9.288978775706101824452250592593505318906312756833224753343846524732597445318251252011_wp real ( wp ), parameter :: c15 = - 6.410061645100351588399537404906702274594586970014904598917670494111219851867862508616_wp real ( wp ), parameter :: c16 = . 7692307692307692307692307692307692307692307692307692307692307692307692307692307692308_wp real ( wp ), parameter :: d1 = . 399925013410431153908647389585527432542745264600019810022984242971375057405267468334 8e-1_wp real ( wp ), parameter :: d8 = . 401132578858454596437972704044863001469581177577073836096352120050010438505034064394 4e-1_wp real ( wp ), parameter :: d9 = . 3925127095625233142417946847596602750245079278580359243007567443309335209235627547386_wp real ( wp ), parameter :: d10 = - 1.051197094764485752167499211132792259622314942028765288915320450078532078636064340575_wp real ( wp ), parameter :: d11 = - . 2505083298864024791053208779904093804217869849340728193482139880406203405457882973484_wp real ( wp ), parameter :: d12 = . 2465428288939690633785173766277520619424499467256191777438442341744800285916120244248_wp real ( wp ), parameter :: d13 = 6.839965112378725948727677787215511467384166222758213034610265848044786251996046243769_wp real ( wp ), parameter :: d14 = - 1 6.02665175464198790087906253807353043847748558382750862377249679396395516268962930751_wp real ( wp ), parameter :: d15 = 1 0.0_wp real ( wp ), parameter :: d16 = . 7692307692307692307692307692307692307692307692307692307692307692307692307692307692308_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + & b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + & b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkt98a !***************************************************************************************** !***************************************************************************************** !> ! Sharp 9(8) ! !### Reference ! * Philip W. Sharp, \"High order explicit Runge-Kutta pairs for ephemerides of the Solar System and the Moon\", ! Journal of Applied Mathematics & Decision Sciences, 4(2), 183-192 (2000), ! * https://github.com/SciML/DiffEqDevTools.jl/blob/master/src/ode_tableaus.jl ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. module procedure rks98 real ( wp ), parameter :: a2 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 9.66220283800537781651565568869531890039129854640901213159807057025513165826690659288e-2_wp real ( wp ), parameter :: a4 = 1.44933042570080667247734835330429783505869478196135181973971058553826974874003598893e-1_wp real ( wp ), parameter :: a5 = 3.11111111111111111111111111111111111111111111111111111111111111111111111111111111111e-1_wp real ( wp ), parameter :: a6 = 3.51498773299780208885007017507765081905783415195317477342800010797639951702224305104e-1_wp real ( wp ), parameter :: a7 = 1.47701226700219791114992982492234918094216584804682522657199989202360048297775694896e-1_wp real ( wp ), parameter :: a8 = 4.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 3.12000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a10 = 1.05000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a11 = 5.87002096436058700209643605870020964360587002096436058700209643605870020964360587002e-1_wp real ( wp ), parameter :: a12 = 6.83818495973559057197009883791356922634313147538567178788853669325746483233925079300e-1_wp real ( wp ), parameter :: a13 = 8.79003558718861209964412811387900355871886120996441281138790035587188612099644128114e-1_wp real ( wp ), parameter :: a14 = 9.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = - 1.3677338082684416521484257374903677512719677066274978006646616817250635870287502595e-1_wp real ( wp ), parameter :: b32 = 2.33395409206897943379999130635989964131109756126839901382446873875057675285544091877e-1_wp real ( wp ), parameter :: b41 = 3.62332606425201668119337088326074458764673695490337954934927646384567437185008997233e-2_wp real ( wp ), parameter :: b43 = 1.08699781927560500435801126497822337629402108647101386480478293915370231155502699170e-1_wp real ( wp ), parameter :: b51 = 1.93101200330205381129632393375249728863798118161035750556803447904498441444456645259e-1_wp real ( wp ), parameter :: b53 = - 6.4770998560312388589569152951216097849732130945128175207869408225841451367147303820e-1_wp real ( wp ), parameter :: b54 = 7.65719896384029615877170247248022360744634302401357112633001745465027183338127504049e-1_wp real ( wp ), parameter :: b61 = 4.77439440833806232500188714529354943400951843563751259289256424427344686758530074484e-2_wp real ( wp ), parameter :: b64 = 1.96932175795354826650179476488669790168656892603887237546677770684075728220363810345e-1_wp real ( wp ), parameter :: b65 = 1.06822653421044758984808669566159797397031338235055113867196597670829754806007487311e-1_wp real ( wp ), parameter :: b71 = 5.35653520740100302121103332775188587103176832181869303040831220432325640950516524391e-2_wp real ( wp ), parameter :: b74 = 1.20625588947728919056244246899316675798038285391744744331826391017415590396850177402e-1_wp real ( wp ), parameter :: b75 = - 6.7750756225149701080673518583857606163917837693866673698932599085495183512419090449e-2_wp real ( wp ), parameter :: b76 = 4.12610419036305429273119208992569897497784538886175217202230752272070773182929555031e-2_wp real ( wp ), parameter :: b81 = 4.62222222222222222222222222222222222222222222222222222222222222222222222222222222222e-2_wp real ( wp ), parameter :: b86 = 1.56583674083394386420831384025620810581726829112411811849222219222877791193826581916e-1_wp real ( wp ), parameter :: b87 = 2.13194103694383391356946393752156967196050948665365965928555558554899986583951195862e-1_wp real ( wp ), parameter :: b91 = 4.63125000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b96 = 7.51502406476090389349073807809004819189545346828427154623710864742465169193996381623e-2_wp real ( wp ), parameter :: b97 = 2.12474759352390961065092619219099518081045465317157284537628913525753483080600361838e-1_wp real ( wp ), parameter :: b98 = - 2.1937500000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b101 = 4.71370805167570855745159483211372150835054795000175063898322887854066734358040684850e-2_wp real ( wp ), parameter :: b106 = 2.09088767177245700619002712371830037495557938247264604576291946948488435273048771651e-1_wp real ( wp ), parameter :: b107 = 1.00170199845336072001441249674316806102355300084726572203232579503666601315305977833e-1_wp real ( wp ), parameter :: b108 = - 4.1746535935132619792943174258604390602569938027379993697699660376037253597563110535e-2_wp real ( wp ), parameter :: b109 = - 2.0964951160420623840201673610867966807884877980462868947165715486152445642659570743e-1_wp real ( wp ), parameter :: b111 = 9.62506254804954308501791978456184013295337530291135748904639061412584879741027523020e-2_wp real ( wp ), parameter :: b116 = - 3.2889823940483436676586225555059183413399004899899513082733172247062419719368801086e0_wp real ( wp ), parameter :: b117 = 1.58120592819482939980472941802825082360990331356773185743485106618875616830910113284e-1_wp real ( wp ), parameter :: b118 = 1.38472174110756949611966846419084262312633249684929784010383708600379765979254809143e0_wp real ( wp ), parameter :: b119 = 2.38689153107685450091794555753665319888363091085120276623574076954818022830367973855e0_wp real ( wp ), parameter :: b1110 = - 1.5000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b121 = - 4.1407181780829333826951338677923830282957788550316015757490123469403067795923041646e-1_wp real ( wp ), parameter :: b126 = 2.79362329285576366638884698134000509392713675687003189893845038096478481618920557795e0_wp real ( wp ), parameter :: b127 = - 3.9420148894844370214218382106635188284591903158605020970611433089765204398968285433e0_wp real ( wp ), parameter :: b128 = - 1.8050833493703232778218655623536664178736717202844850014226094729833601601906484738e0_wp real ( wp ), parameter :: b129 = - 8.2411175299103457871280197945625000732690195817565658068273621079502124203745163579e-2_wp real ( wp ), parameter :: b1210 = 3.76724363839931467375143823390080271058360595326428259518770377058250406454692000855e0_wp real ( wp ), parameter :: b1211 = 3.66532796680637812441222026292597668018700554869965598789627155511871004748252089945e-1_wp real ( wp ), parameter :: b131 = 2.57118803244482153847626462807856681730780184786345438393372906485058163365316011894e-1_wp real ( wp ), parameter :: b136 = 3.22367498544415690028414563287198307551779583958713835991093894064695605463707833852e0_wp real ( wp ), parameter :: b137 = 3.95644809715768343577645732188103093651324923567481376817610794743631132119165042871e0_wp real ( wp ), parameter :: b138 = 1.90269610866406552179805731106267938194469931412329236667880503143330311252532589886e0_wp real ( wp ), parameter :: b139 = - 5.2391055401717914982701824261828721839527015786103641427597273886467794920713496236e0_wp real ( wp ), parameter :: b1310 = - 2.6899481313272987041207973348420457663574444684767403019558990390373975528574973750e0_wp real ( wp ), parameter :: b1311 = - 1.6326510182468950685438619936368781848861272140333241607130497353632849427158674841e0_wp real ( wp ), parameter :: b1312 = 1.10077025395445846919296783742614641536163480794527995340824137263302194802498793285e0_wp real ( wp ), parameter :: b141 = 4.08583369788787674770196821641246834353608695949114599877074475305978651235285469124e0_wp real ( wp ), parameter :: b146 = - 2.2271040812705511368267126642675337195508778742206509440033684681620630123740836983e1_wp real ( wp ), parameter :: b147 = 2.14948200377041255968873743962135304520531006690258805591495319234107676337073934764e1_wp real ( wp ), parameter :: b148 = - 1.2574667847036709064117981533059871307009863478980024060295805266513615915043138735e1_wp real ( wp ), parameter :: b149 = 2.54025651049869277589813851770135045700861797774341329374584242615333576062269117780e1_wp real ( wp ), parameter :: b1410 = - 2.4865730830721493170953431486117421078941351149011810402690627604263543458446989032e1_wp real ( wp ), parameter :: b1411 = 1.82479073749516085147180202069097519978378918397970543443181892233252604987304701845e1_wp real ( wp ), parameter :: b1412 = - 9.4291787815393124480125158715016538695138573450523345127986553789149287859337960255e0_wp real ( wp ), parameter :: b1413 = 8.25492056472487433062307536805028087460591469502464576121882769983546032147130645121e-1_wp real ( wp ), parameter :: b151 = - 2.0602212042704652199244807912284589395147988173289204904243925620741467390453149503e0_wp real ( wp ), parameter :: b156 = - 2.3055564596876178326198929677498175792624263330011017577312032231421737767030559692e0_wp real ( wp ), parameter :: b157 = - 1.8379647671170325920306936223300488315443940076512542750939032591666020672221106554e1_wp real ( wp ), parameter :: b158 = 9.80063543421329918398827905876150569685353384114341904048681595591515045410441012888e-1_wp real ( wp ), parameter :: b159 = 6.44589158658994320826489839207649833491520903216082715269469597755156737618623074351e0_wp real ( wp ), parameter :: b1510 = 1.69192749452203241565519919050371391213914448119219462829620457478758678378197682618e1_wp real ( wp ), parameter :: b1511 = - 2.0988423575394962681126735718162381051185885412147351718156202906941587529583151802e0_wp real ( wp ), parameter :: b1512 = 1.32027878990329475096946854788916481157084451169381843791872814006897180501111028426e0_wp real ( wp ), parameter :: b1513 = 1.29768753187020321933985725604863066333871547241993002451338834678114639100987388885e-1_wp real ( wp ), parameter :: b1514 = 4.89900743459928848448110776111870354430304809243733908347583718104632373992549620659e-2_wp real ( wp ), parameter :: b161 = - 1.2158274587431439669291103556715073078571331121887250332403319959071088711190342783e-1_wp real ( wp ), parameter :: b166 = - 1.3009191687212087953937489554001604506419126739405937395616109697496506450739882872e1_wp real ( wp ), parameter :: b167 = - 1.0172115280165551555631444224047088737887421449467885159610413901710577571727155577e1_wp real ( wp ), parameter :: b168 = - 9.1376040597684553208500728397293269920338377345009007549988772949417238792208104990e0_wp real ( wp ), parameter :: b169 = 2.20271190656799492286306009834337099718633750373570345566819174880669811072575443296e1_wp real ( wp ), parameter :: b1610 = 6.06122452890837591335001768945892462299766158185132002339883804559430763723850436801e0_wp real ( wp ), parameter :: b1611 = 9.49756499938619826937987552815088909338119306846899551533354213035888156520270940573e0_wp real ( wp ), parameter :: b1612 = - 4.7967103151651448708172582989203880579450635055043503690520505457817795045514591312e0_wp real ( wp ), parameter :: b1613 = 6.51295494211030686568681751222035336828933052420596087187186975501127983652453403424e-1_wp real ( wp ), parameter :: c1 = 2.96275053023277765257147159271391983963018401625397769109581065606146193195367573656e-2_wp real ( wp ), parameter :: c8 = 7.80838132003046860057542718319735163112389396834314055277737601781852412778315993413e-2_wp real ( wp ), parameter :: c9 = 2.07620199958252939386280504658544994598465755307530373969021587633956273026455132933e-1_wp real ( wp ), parameter :: c10 = 1.69689395533794848088161847963068489566652421567777796351282799972583366756393555465e-1_wp real ( wp ), parameter :: c11 = 1.51705614234815145844037646207281350814128482549399473556449026004053183774844489538e-1_wp real ( wp ), parameter :: c12 = 1.44245948285115701641251053349684808091393327368972824014235232832191510849137389325e-1_wp real ( wp ), parameter :: c13 = 1.66761530218905580484076634450811227110090575704792045335148871651256233134779966440e-1_wp real ( wp ), parameter :: c14 = 1.92534285621243594762130197569399694644610012365298208475543983102390200679811369880e-2_wp real ( wp ), parameter :: c15 = 3.30125647043589625485103058545564456472676564190264834875762168569205517930399726031e-2_wp real ( wp ), parameter :: d1 = 2.98603077327271866543455374899994274225585056921637520652930266673233165901602953218e-2_wp real ( wp ), parameter :: d8 = 6.57755975911182224511842125160987804765191941684313617933281553333569953681029565846e-2_wp real ( wp ), parameter :: d9 = 2.13956779658119140898029891022265645728716698807857092033794693592749028494691587115e-1_wp real ( wp ), parameter :: d10 = 1.68721578796992869389907340999574096253253203866862151079585793545930377244267574219e-1_wp real ( wp ), parameter :: d11 = 1.71768360736786458177293485795001832452979570477507671772344473084105210367066149609e-1_wp real ( wp ), parameter :: d12 = 1.25492680790662476798676554483056276508051861757938232565244001424475853044387070116e-1_wp real ( wp ), parameter :: d13 = 1.89263652417235144013217502395309419983557239873730317305944966458721798394126740078e-1_wp real ( wp ), parameter :: d16 = 3.51610422763585016173454752986945211743637253555094213844648898933374204971976269572e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + & b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + & b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + & b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + & b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + & b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rks98 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. ! !### Reference ! * T. Feagin, \"[A Tenth-Order Runge-Kutta Method with Error Estimate](http://sce.uhcl.edu/feagin/courses/rk10.pdf)\", ! [coefficient file](http://sce.uhcl.edu/rungekutta/rk108.txt) module procedure rkf108 real ( wp ), parameter :: a1 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a2 = 0.539357840802981787532485197881302436857273449701009015505500_wp real ( wp ), parameter :: a3 = 0.809036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a4 = 0.309036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a5 = 0.981074190219795268254879548310562080489056746118724882027805_wp real ( wp ), parameter :: a6 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a7 = 0.354017365856802376329264185948796742115824053807373968324184_wp real ( wp ), parameter :: a8 = 0.882527661964732346425501486979669075182867844268052119663791_wp real ( wp ), parameter :: a9 = 0.642615758240322548157075497020439535959501736363212695909875_wp real ( wp ), parameter :: a10 = 0.357384241759677451842924502979560464040498263636787304090125_wp real ( wp ), parameter :: a11 = 0.117472338035267653574498513020330924817132155731947880336209_wp real ( wp ), parameter :: a12 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a13 = 0.309036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a14 = 0.539357840802981787532485197881302436857273449701009015505500_wp real ( wp ), parameter :: a15 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c0 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c1 = 0.0250000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c4 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c6 = 0.0400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0.189237478148923490158306404106012326238162346948625830327194_wp real ( wp ), parameter :: c9 = 0.277429188517743176508360262560654340428504319718040836339472_wp real ( wp ), parameter :: c10 = 0.277429188517743176508360262560654340428504319718040836339472_wp real ( wp ), parameter :: c11 = 0.189237478148923490158306404106012326238162346948625830327194_wp real ( wp ), parameter :: c12 = - 0.0400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c13 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c14 = - 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c15 = - 0.0250000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c16 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b10 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b20 = - 0.915176561375291440520015019275342154318951387664369720564660_wp real ( wp ), parameter :: b21 = 1.45453440217827322805250021715664459117622483736537873607016_wp real ( wp ), parameter :: b30 = 0.202259190301118170324681949205488413821477543637878380814562_wp real ( wp ), parameter :: b32 = 0.606777570903354510974045847616465241464432630913635142443687_wp real ( wp ), parameter :: b40 = 0.184024714708643575149100693471120664216774047979591417844635_wp real ( wp ), parameter :: b42 = 0.197966831227192369068141770510388793370637287463360401555746_wp real ( wp ), parameter :: b43 = - 0.0729547847313632629185146671595558023015011608914382961421311_wp real ( wp ), parameter :: b50 = 0.0879007340206681337319777094132125475918886824944548534041378_wp real ( wp ), parameter :: b53 = 0.410459702520260645318174895920453426088035325902848695210406_wp real ( wp ), parameter :: b54 = 0.482713753678866489204726942976896106809132737721421333413261_wp real ( wp ), parameter :: b60 = 0.0859700504902460302188480225945808401411132615636600222593880_wp real ( wp ), parameter :: b63 = 0.330885963040722183948884057658753173648240154838402033448632_wp real ( wp ), parameter :: b64 = 0.489662957309450192844507011135898201178015478433790097210790_wp real ( wp ), parameter :: b65 = - 0.0731856375070850736789057580558988816340355615025188195854775_wp real ( wp ), parameter :: b70 = 0.120930449125333720660378854927668953958938996999703678812621_wp real ( wp ), parameter :: b74 = 0.260124675758295622809007617838335174368108756484693361887839_wp real ( wp ), parameter :: b75 = 0.0325402621549091330158899334391231259332716675992700000776101_wp real ( wp ), parameter :: b76 = - 0.0595780211817361001560122202563305121444953672762930724538856_wp real ( wp ), parameter :: b80 = 0.110854379580391483508936171010218441909425780168656559807038_wp real ( wp ), parameter :: b85 = - 0.0605761488255005587620924953655516875526344415354339234619466_wp real ( wp ), parameter :: b86 = 0.321763705601778390100898799049878904081404368603077129251110_wp real ( wp ), parameter :: b87 = 0.510485725608063031577759012285123416744672137031752354067590_wp real ( wp ), parameter :: b90 = 0.112054414752879004829715002761802363003717611158172229329393_wp real ( wp ), parameter :: b95 = - 0.144942775902865915672349828340980777181668499748506838876185_wp real ( wp ), parameter :: b96 = - 0.333269719096256706589705211415746871709467423992115497968724_wp real ( wp ), parameter :: b97 = 0.499269229556880061353316843969978567860276816592673201240332_wp real ( wp ), parameter :: b98 = 0.509504608929686104236098690045386253986643232352989602185060_wp real ( wp ), parameter :: b100 = 0.113976783964185986138004186736901163890724752541486831640341_wp real ( wp ), parameter :: b105 = - 0.0768813364203356938586214289120895270821349023390922987406384_wp real ( wp ), parameter :: b106 = 0.239527360324390649107711455271882373019741311201004119339563_wp real ( wp ), parameter :: b107 = 0.397774662368094639047830462488952104564716416343454639902613_wp real ( wp ), parameter :: b108 = 0.0107558956873607455550609147441477450257136782823280838547024_wp real ( wp ), parameter :: b109 = - 0.327769124164018874147061087350233395378262992392394071906457_wp real ( wp ), parameter :: b110 = 0.0798314528280196046351426864486400322758737630423413945356284_wp real ( wp ), parameter :: b115 = - 0.0520329686800603076514949887612959068721311443881683526937298_wp real ( wp ), parameter :: b116 = - 0.0576954146168548881732784355283433509066159287152968723021864_wp real ( wp ), parameter :: b117 = 0.194781915712104164976306262147382871156142921354409364738090_wp real ( wp ), parameter :: b118 = 0.145384923188325069727524825977071194859203467568236523866582_wp real ( wp ), parameter :: b119 = - 0.0782942710351670777553986729725692447252077047239160551335016_wp real ( wp ), parameter :: b1110 = - 0.114503299361098912184303164290554670970133218405658122674674_wp real ( wp ), parameter :: b120 = 0.985115610164857280120041500306517278413646677314195559520529_wp real ( wp ), parameter :: b123 = 0.330885963040722183948884057658753173648240154838402033448632_wp real ( wp ), parameter :: b124 = 0.489662957309450192844507011135898201178015478433790097210790_wp real ( wp ), parameter :: b125 = - 1.37896486574843567582112720930751902353904327148559471526397_wp real ( wp ), parameter :: b126 = - 0.861164195027635666673916999665534573351026060987427093314412_wp real ( wp ), parameter :: b127 = 5.78428813637537220022999785486578436006872789689499172601856_wp real ( wp ), parameter :: b128 = 3.28807761985103566890460615937314805477268252903342356581925_wp real ( wp ), parameter :: b129 = - 2.38633905093136384013422325215527866148401465975954104585807_wp real ( wp ), parameter :: b1210 = - 3.25479342483643918654589367587788726747711504674780680269911_wp real ( wp ), parameter :: b1211 = - 2.16343541686422982353954211300054820889678036420109999154887_wp real ( wp ), parameter :: b130 = 0.895080295771632891049613132336585138148156279241561345991710_wp real ( wp ), parameter :: b132 = 0.197966831227192369068141770510388793370637287463360401555746_wp real ( wp ), parameter :: b133 = - 0.0729547847313632629185146671595558023015011608914382961421311_wp real ( wp ), parameter :: b135 = - 0.851236239662007619739049371445966793289359722875702227166105_wp real ( wp ), parameter :: b136 = 0.398320112318533301719718614174373643336480918103773904231856_wp real ( wp ), parameter :: b137 = 3.63937263181035606029412920047090044132027387893977804176229_wp real ( wp ), parameter :: b138 = 1.54822877039830322365301663075174564919981736348973496313065_wp real ( wp ), parameter :: b139 = - 2.12221714704053716026062427460427261025318461146260124401561_wp real ( wp ), parameter :: b1310 = - 1.58350398545326172713384349625753212757269188934434237975291_wp real ( wp ), parameter :: b1311 = - 1.71561608285936264922031819751349098912615880827551992973034_wp real ( wp ), parameter :: b1312 = - 0.0244036405750127452135415444412216875465593598370910566069132_wp real ( wp ), parameter :: b140 = - 0.915176561375291440520015019275342154318951387664369720564660_wp real ( wp ), parameter :: b141 = 1.45453440217827322805250021715664459117622483736537873607016_wp real ( wp ), parameter :: b144 = - 0.777333643644968233538931228575302137803351053629547286334469_wp real ( wp ), parameter :: b146 = - 0.0910895662155176069593203555807484200111889091770101799647985_wp real ( wp ), parameter :: b1412 = 0.0910895662155176069593203555807484200111889091770101799647985_wp real ( wp ), parameter :: b1413 = 0.777333643644968233538931228575302137803351053629547286334469_wp real ( wp ), parameter :: b150 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b152 = - 0.157178665799771163367058998273128921867183754126709419409654_wp real ( wp ), parameter :: b1514 = 0.157178665799771163367058998273128921867183754126709419409654_wp real ( wp ), parameter :: b160 = 0.181781300700095283888472062582262379650443831463199521664945_wp real ( wp ), parameter :: b161 = 0.675000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b162 = 0.342758159847189839942220553413850871742338734703958919937260_wp real ( wp ), parameter :: b164 = 0.259111214548322744512977076191767379267783684543182428778156_wp real ( wp ), parameter :: b165 = - 0.358278966717952089048961276721979397739750634673268802484271_wp real ( wp ), parameter :: b166 = - 1.04594895940883306095050068756409905131588123172378489286080_wp real ( wp ), parameter :: b167 = 0.930327845415626983292300564432428777137601651182965794680397_wp real ( wp ), parameter :: b168 = 1.77950959431708102446142106794824453926275743243327790536000_wp real ( wp ), parameter :: b169 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b1610 = - 0.282547569539044081612477785222287276408489375976211189952877_wp real ( wp ), parameter :: b1611 = - 0.159327350119972549169261984373485859278031542127551931461821_wp real ( wp ), parameter :: b1612 = - 0.145515894647001510860991961081084111308650130578626404945571_wp real ( wp ), parameter :: b1613 = - 0.259111214548322744512977076191767379267783684543182428778156_wp real ( wp ), parameter :: b1614 = - 0.342758159847189839942220553413850871742338734703958919937260_wp real ( wp ), parameter :: b1615 = - 0.675000000000000000000000000000000000000000000000000000000000_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b50 * f0 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b132 * f2 + b133 * f3 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b144 * f4 + b146 * f6 + b1412 * f12 + & b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b152 * f2 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b164 * f4 + b165 * f5 + & b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) xf = x + h * ( c0 * f0 + c1 * f1 + c2 * f2 + c4 * f4 + c6 * f6 + c8 * f8 + c9 * f9 + & c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) xerr = ( 1.0_wp / 36 0.0_wp ) * h * ( f1 - f15 ) end associate end procedure rkf108 !***************************************************************************************** !***************************************************************************************** !> ! A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme ! !### Reference ! * A.R.Curtis, \"High-order Explicit Runge-Kutta Formulae, Their uses, and Limitations\", ! J. Inst. Maths Applics (1975) 16, 35-55. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK10/RKcoeff10a(8)_2.pdf) module procedure rkc108 real ( wp ), parameter :: a2 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: a3 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: a4 = . 2178778440474225776426322793155049980471766876994920591257703112975964683410769510101_wp real ( wp ), parameter :: a5 = . 5446946101185564441065806982887624951179417192487301478144257782439911708526923775252_wp real ( wp ), parameter :: a6 = . 6536335321422677329278968379465149941415300630984761773773109338927894050232308530303_wp real ( wp ), parameter :: a7 = . 2746594919905254008808021630247618520892150865127407293922085868737635475402543533498_wp real ( wp ), parameter :: a8 = . 7735775201106609448405825008093973718589542913426807556412662673054607938029043386501_wp real ( wp ), parameter :: a9 = . 5801831400829957086304368756070480288942157185070105667309497004790955953521782539876_wp real ( wp ), parameter :: a10 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a11 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a12 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a13 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a14 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a15 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a16 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a17 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a18 = 1 real ( wp ), parameter :: a19 = . 3510848126232741617357001972386587771203155818540433925049309664694280078895463510848_wp real ( wp ), parameter :: a20 = . 6157407407407407407407407407407407407407407407407407407407407407407407407407407407407_wp real ( wp ), parameter :: a21 = 1 real ( wp ), parameter :: b21 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: b31 = . 726259480158075258808774264385016660157255625664973530419234370991988227803589836700 3e-1_wp real ( wp ), parameter :: b32 = . 726259480158075258808774264385016660157255625664973530419234370991988227803589836700 3e-1_wp real ( wp ), parameter :: b41 = . 544694610118556444106580698288762495117941719248730147814425778243991170852692377525 2e-1_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 1634083830355669332319742094866287485353825157746190443443277334731973512558077132576_wp real ( wp ), parameter :: b51 = . 5446946101185564441065806982887624951179417192487301478144257782439911708526923775252_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = - 2.042604787944586665399677618582859356692281447182738054304096668414966890697596415720_wp real ( wp ), parameter :: b54 = 2.042604787944586665399677618582859356692281447182738054304096668414966890697596415720_wp real ( wp ), parameter :: b61 = . 653633532142267732927896837946514994141530063098476177377310933892789405023230853030 3e-1_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 3268167660711338664639484189732574970707650315492380886886554669463947025116154265151_wp real ( wp ), parameter :: b65 = . 2614534128569070931711587351786059976566120252393904709509243735571157620092923412121_wp real ( wp ), parameter :: b71 = . 823370775748271658517345434431012529606681431852174224176231905177296362769595526303 4e-1_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = . 2119171963202803561687843468555305553175658807629274312902985594840086570224567152664_wp real ( wp ), parameter :: b75 = - . 399734350805421831157793255006132016237984004981634780763011878610767447785020657962 8e-1_wp real ( wp ), parameter :: b76 = . 203786531759600619760625982267432454347794630627593537605880247331019990193401512494 1e-1_wp real ( wp ), parameter :: b81 = . 859530577900734383156202778677108190954393657047423061823629185894956437558782598500 1e-1_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = 0 real ( wp ), parameter :: b86 = . 2911769478058850960337179621761553399856026049598393013981874594942289837064329700000_wp real ( wp ), parameter :: b87 = . 3964475145147024104912442607655312127779123206780991480607158892217361663405931088001_wp real ( wp ), parameter :: b91 = . 861209348560696754998304737229211917889851457158843809991253461648657524350889595762 8e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 1397464826824442089036313891001189801074425314582326737716288563521183595455090268480_wp real ( wp ), parameter :: b97 = . 3951098495815674599900526056001284215294125840404176924334653987770478924197803010468_wp real ( wp ), parameter :: b98 = - . 407941270370856357630775928161205645316245427075241804732699008149364090482000334835 0e-1_wp real ( wp ), parameter :: b101 = . 723314442233794807761634822911932631558293087108902073309290089120612938193779520477 8e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = . 2200276284689998102140972735735070061373242800181187459951219347361114857342828430157_wp real ( wp ), parameter :: b107 = . 878953342543673401336978026479257363795222648775329641682384687621704079568848937133 4e-1_wp real ( wp ), parameter :: b108 = - . 444538399626035086399067488061110898683286064819603000058000469000226810898423864173 0e-1_wp real ( wp ), parameter :: b109 = - . 2183282289488754689095532966861839909872150913926337371522805434288481649401165594213_wp real ( wp ), parameter :: b111 = . 894710093673111422878544196677383616907103839088285721105726915852270497158536584522 3e-1_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = . 3946008170285561860741397654755022300929434262701385530048127140223687993778661654316_wp real ( wp ), parameter :: b117 = . 3443011367963333487713764986067104675654371857504670290688086760696354596195596354011_wp real ( wp ), parameter :: b118 = - . 794668266429266129069493811311943099705381514086377232876415086658249242589223139578 0e-1_wp real ( wp ), parameter :: b119 = - . 3915218947895966123834967996391962853380545808840091268064277812752553499114569444180_wp real ( wp ), parameter :: b1110 = 0 real ( wp ), parameter :: b121 = . 321000687796320921294528273607224188674142531429853240021692726261948847918621452331 2e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = - . 184637599751205014183516388175322791099632320474976922665546407804876950520952529975 2e-3_wp real ( wp ), parameter :: b129 = . 1560894025313219860759149162557283383430181475726228517203663063649626288079337909898_wp real ( wp ), parameter :: b1210 = . 1934496857654560252749984220385188727138526287670744309970093278715606577140084022992_wp real ( wp ), parameter :: b1211 = . 2611612387636636496908928477536452288263163392010050661129958478089356710938164130987_wp real ( wp ), parameter :: b131 = . 442374932852499632703538841779268815443317313329489228529575645756127631564847723373 2e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = . 464077443453903963640622216878198161653411564320811445568969878911994173244485704779 8e-2_wp real ( wp ), parameter :: b139 = . 470466028261513653213092721817239057090323098141415934790427794653792000182490327658 6e-1_wp real ( wp ), parameter :: b1310 = . 862074994801148816036944516741600279920531739701361904439127070633956170028152652970 3e-1_wp real ( wp ), parameter :: b1311 = - . 260798302468213809323325407906668762314868242631739511171929964139011865280294960003 5e-1_wp real ( wp ), parameter :: b1312 = - . 385802017439662153249327763915949958133323507653129897782009313981339939013776885094 0e-1_wp real ( wp ), parameter :: b141 = . 231804671742941156700604353961327560794075802170933256972935299077733639015831163052 9e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = . 3197856784116367067302124322582100058864027838197120089129330601737324659881765852593_wp real ( wp ), parameter :: b149 = . 5933233331841898686063939886797828376866051205773280426848164018120869674204443797948_wp real ( wp ), parameter :: b1410 = - 1.937519548878479314706815782408229952008442222624773168771865465659822020582450444783_wp real ( wp ), parameter :: b1411 = . 1803950557030502357344063195737827904476240180662764468232042537858892203518134072359_wp real ( wp ), parameter :: b1412 = - . 4554014298857220726863505256926549022316460712353658688873150702827663762861750674926_wp real ( wp ), parameter :: b1413 = 2.158764106255762807077594619172645539322916635447781333204724468181634037726021280742_wp real ( wp ), parameter :: b151 = . 262436432579810589152773398585855239172355303071914406584454488049818855383926394444 7e-1_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = . 486313942386726610652684391360922599625307372738196154441526323943157158604362233276 0e-1_wp real ( wp ), parameter :: b159 = . 427438253834647886763694242942172436759186658577414418021512266098082212398815113221 3e-1_wp real ( wp ), parameter :: b1510 = - . 4862259869465547771298976981868643277396586803130813159599600102115609499827986711663_wp real ( wp ), parameter :: b1511 = . 1326047194917652331781527125743684254490968718259563958293167893998110899691451568372_wp real ( wp ), parameter :: b1512 = - . 940296215294651565163483165814293485238379164167138774103460637137808220961693868522 5e-1_wp real ( wp ), parameter :: b1513 = . 6993864679941022534190304512277131176659196396138275832136258135631963192299339871223_wp real ( wp ), parameter :: b1514 = - . 119702001302886097649278493431224303667065845119539794872610451106204252159212591259 9e-1_wp real ( wp ), parameter :: b161 = . 556806664153621646109082306891780343606636580436190353212534947455147612081355812583 0e-1_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = - . 4324853319508358432896036654421685136736530810118924113940744870078036705505610668088_wp real ( wp ), parameter :: b169 = - . 9979726994172038714656907882931844552238093285811791155499130927685987422432191170216_wp real ( wp ), parameter :: b1610 = 2.707893755718926115778725270396739994070337972517006747100005607751792006959604868323_wp real ( wp ), parameter :: b1611 = - 1.024823023512132929313567156576969954855232272749038347671818195935585095295127839150_wp real ( wp ), parameter :: b1612 = 1.334565206642246959252239602313589265188981560552694580059808406200559397799055652161_wp real ( wp ), parameter :: b1613 = - 2.587748998830690939658228913150922979184368065866213469477796089200252812362701917187_wp real ( wp ), parameter :: b1614 = . 899277369634835584643043830611118122341463259828585430092442325135273320518708773267 8e-1_wp real ( wp ), parameter :: b1615 = 1.497578446211167333777988534023066333042434967475357134513165331964695787890042760189_wp real ( wp ), parameter :: b171 = - . 843489119968637763912518839198567131838385864141351714310416218808846862744751517298 2e-3_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = . 7602144218856081893754106886111596435015500427480120290148318740899211421773423234728_wp real ( wp ), parameter :: b179 = 1.769083927820959377467464871522349066447068428702073590698445112684989184432409492025_wp real ( wp ), parameter :: b1710 = - 4.499239797622297101452915424261016593995695456495268863455643396071539024609271033574_wp real ( wp ), parameter :: b1711 = 1.490558190212043468817221563278239942209691100326719140478588601720867838040211450448_wp real ( wp ), parameter :: b1712 = - 2.552203480132132516997563217309689292804518121743365818482497611667126218719069737195_wp real ( wp ), parameter :: b1713 = 4.795167551528575994217413424533259845001657006088189480440731104737960266616292993321_wp real ( wp ), parameter :: b1714 = - . 916185440176948223667141409238791747068625171419223669392006113898420238120910924855 3e-1_wp real ( wp ), parameter :: b1715 = - 1.525735678746850818217653470352135651821164556169070505816135230784807058389577753184_wp real ( wp ), parameter :: b1716 = . 7371445601564892133467497107205798584829803038168267854389817508169123996459113657504_wp real ( wp ), parameter :: b181 = . 1017366974111576638766809656369828971944080018220332809259398740674738807023371082700_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = - 1.696217553209432810711666838709742166182992092906177246174096517233561845662947862824_wp real ( wp ), parameter :: b189 = - 3.825235846211624254528740857512255693551264719132875740261231165548583482101116676418_wp real ( wp ), parameter :: b1810 = 9.754768979885866648856431516333641627109105703674164986615824197909762854575668793816_wp real ( wp ), parameter :: b1811 = - 2.520767789227152291196336314591227486393143379933686189126240710041836742414125694941_wp real ( wp ), parameter :: b1812 = 5.472417145227780046950992000565734793413395536531652419585004300790370984185945495978_wp real ( wp ), parameter :: b1813 = - 9.781098113458736121002383874108051372067873053264954833376114258940736444388841687929_wp real ( wp ), parameter :: b1814 = . 3189152692455334369024560213486753019540464785641163242047782111839399471147176681561_wp real ( wp ), parameter :: b1815 = 3.447227036527756718156475010324322155277035924051392880570525223655410460762027138915_wp real ( wp ), parameter :: b1816 = - . 6051983612219277832241707671295607127814820499715293613761402732652780120810041653591_wp real ( wp ), parameter :: b1817 = . 3334525350307787459202631378414806560287636505658634784117511174230383993073398823363_wp real ( wp ), parameter :: b191 = - . 1012987737478284424676828232882617689682012456457322189102956361570156443805900941944_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = - . 240938932894877540130465938066304314716789792846730824435996265963393361732653328582 2e-1_wp real ( wp ), parameter :: b197 = - . 6679880790275182076676283582867036095782150170801495251932447614617249253864579543857_wp real ( wp ), parameter :: b198 = 1.600262798493100648047998296908183265688507618079976446601985464092263571149154964705_wp real ( wp ), parameter :: b199 = 3.706958893826695766827011000213884379914407774639901049574259778345288538246990591819_wp real ( wp ), parameter :: b1910 = - 8.581755560147929325446798534254342948628755672447282004336563881429983605741487870996_wp real ( wp ), parameter :: b1911 = . 560731497430095398655964469909989725358450176760309198248414146861949322131058228187 7e-1_wp real ( wp ), parameter :: b1912 = - 4.547761497422899514520768375507009011918601407646237921467449197008085790456674001879_wp real ( wp ), parameter :: b1913 = 9.255775439941294621826928846245618922061242300726600002589630404152665447900428712156_wp real ( wp ), parameter :: b1914 = - . 3450876657451631707159097079770789925142348071643902737346329921538351794816584861003_wp real ( wp ), parameter :: b1915 = 0 real ( wp ), parameter :: b1916 = 0 real ( wp ), parameter :: b1917 = 0 real ( wp ), parameter :: b1918 = 0 real ( wp ), parameter :: b201 = . 382690972381263860900125964181804019382810531457949242283638898546847956723756124733 6e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = . 7786978965202527814624406274393101840018332461648638653990700950184871893714491273096_wp real ( wp ), parameter :: b207 = . 4859454140913448249612202172501868752761599132465501266008866131088163955018926230543_wp real ( wp ), parameter :: b208 = 1.814925350154666364151014269029611427420766367555858499108920245656959783343309816408_wp real ( wp ), parameter :: b209 = 4.551165245704657956889158854062833952834232753889932986749613143631480116805870313264_wp real ( wp ), parameter :: b2010 = - 7.173770670344544101351160462586215092596352548535380880420409450623251883641801862305_wp real ( wp ), parameter :: b2011 = - . 3943009017000923237232456850787591816773705728833192412204243696911216045268772747196_wp real ( wp ), parameter :: b2012 = - 6.036544185898100312430357626685382432626027303329497026597513524312479466987506315664_wp real ( wp ), parameter :: b2013 = 7.338904299721887701527380004651998686389416058019429466200740313593568240326087171554_wp real ( wp ), parameter :: b2014 = - . 4143158595971836110248598960027762194900538872022960061452263646470675916118824501965_wp real ( wp ), parameter :: b2015 = 0 real ( wp ), parameter :: b2016 = 0 real ( wp ), parameter :: b2017 = 0 real ( wp ), parameter :: b2018 = 0 real ( wp ), parameter :: b2019 = - . 3732349451502749258108621577582478607301443393311959731632798508493352335121760204375_wp real ( wp ), parameter :: b211 = . 216233904602204586687862878555058802678057855249460809793119888227679196291224467484 0e-1_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = . 4611834700744369218866370212060318930941322187829670117414118166503940620998117275429_wp real ( wp ), parameter :: b217 = . 1940797759547798743610542713744618433967649025379792966207862125676964319674160574624_wp real ( wp ), parameter :: b218 = . 7041001229739959807963554405302474570280838416767002383409508232534658577705201658489_wp real ( wp ), parameter :: b219 = 2.877431096792763528910415905652149398266490601780194388811216042455337979365709745445_wp real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = - . 4332742088749107411735902392606181444105337491234912425673655059805456011404518143074_wp real ( wp ), parameter :: b2112 = - 2.234178753588834452567105459024473991729105867012210449973082203886376638514123583334_wp real ( wp ), parameter :: b2113 = . 2235678086885984010238782832657956960650576194069632574873732156942360146780276407657_wp real ( wp ), parameter :: b2114 = . 1293532338308457711442786069651741293532338308457711442786069651741293532338308457711_wp real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = 0 real ( wp ), parameter :: b2118 = 0 real ( wp ), parameter :: b2119 = . 1418136968194278394808045812385429206355105705182818920178205766092934777719870449624_wp real ( wp ), parameter :: b2120 = - 1.085699633131323582531514699802817081967439754938101617737029931360398856861850276906_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = 0 real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0 real ( wp ), parameter :: c7 = 0 real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0 real ( wp ), parameter :: c10 = 0 real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = . 1387145942588715882541801312803271702142521598590204181697361204933422401935856968980_wp real ( wp ), parameter :: c13 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c14 = . 946187390744617450791532020530061631190811734743129151635972128399910931397476364353 3e-1_wp real ( wp ), parameter :: c15 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c16 = . 1387145942588715882541801312803271702142521598590204181697361204933422401935856968980_wp real ( wp ), parameter :: c17 = . 946187390744617450791532020530061631190811734743129151635972128399910931397476364353 3e-1_wp real ( wp ), parameter :: c18 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c19 = 0 real ( wp ), parameter :: c20 = 0 real ( wp ), parameter :: c21 = 0 real ( wp ), parameter :: d1 = . 333982989593133757227194581542298863372888341322754330355409842920273107740948831842 1e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = . 502450980392156862745098039215686274509803921568627450980392156862745098039215686274 5e-1_wp real ( wp ), parameter :: d10 = - . 1423859191318858946753152353981644782061337055184060977838998119673893661279423564924_wp real ( wp ), parameter :: d11 = . 2126013199429258434998789109063801828540550730541648287733608913970804891935883227446_wp real ( wp ), parameter :: d12 = . 3254854965632843133622967470840062095221514741629108993207015882688341071771214986692_wp real ( wp ), parameter :: d13 = . 3312629399585921325051759834368530020703933747412008281573498964803312629399585921325_wp real ( wp ), parameter :: d14 = . 1887845809230650005639203350759631573314744764356665687950807917985316096487827551997_wp real ( wp ), parameter :: d15 = 0 real ( wp ), parameter :: d16 = 0 real ( wp ), parameter :: d17 = 0 real ( wp ), parameter :: d18 = 0 real ( wp ), parameter :: d19 = . 615981109428714460440450884767920076156915483969870153340677975367599950638846296207 0e-1_wp real ( wp ), parameter :: d20 = - . 944010966059408803795779163614783008227502309802105312099976393585931547874485055295 9e-1_wp real ( wp ), parameter :: d21 = . 334111704085589770823468247038497058468487634185483104797562858661432363140386118436 9e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * & f19 + b2120 * f20 ), f21 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + & c19 * f19 + c20 * f20 + c21 * f21 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + & e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + & e19 * f19 + e20 * f20 + e21 * f21 ) end associate end procedure rkc108 !***************************************************************************************** !***************************************************************************************** !> ! Baker 10(9) method. ! !### Reference ! * Tom Baker, University of Teeside, \"RK-Aid software: RK10921M\". ! [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK10/RKcoeff10c_1.pdf) module procedure rkb109 real ( wp ), parameter :: a2 = . 2232129192123735665527132860096509572180113541116006004801774831897914255866976731834_wp real ( wp ), parameter :: a3 = . 3348193788185603498290699290144764358270170311674009007202662247846871383800465097751_wp real ( wp ), parameter :: a4 = . 5022290682278405247436048935217146537405255467511013510803993371770307075700697646627_wp real ( wp ), parameter :: a5 = . 1176948756548443596524604744040430749724814058786280779261159420482531581524139111558_wp real ( wp ), parameter :: a6 = . 6425923677604462086219057105219705193480713109262431864517703346402040737649802005250_wp real ( wp ), parameter :: a7 = . 181826565311210497_wp real ( wp ), parameter :: a8 = . 4341610334077954337462856744299909865481150413847250582144329859884319977831972426112_wp real ( wp ), parameter :: a9 = . 7122335424182418496009012272374473135415214567547251841147975874613222331084545787886_wp real ( wp ), parameter :: a10 = . 1894400309592476109308204841234726559856268372193596062465558450034952083309882121192_wp real ( wp ), parameter :: a11 = . 4943921538691045853333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a12 = . 6403413702953303301268868454436798781085931758963391614454137298592697657577711636312_wp real ( wp ), parameter :: a13 = . 741588230803656878_wp real ( wp ), parameter :: a14 = . 382911329862520855_wp real ( wp ), parameter :: a15 = . 107157755822487322_wp real ( wp ), parameter :: a16 = . 875691376241245711_wp real ( wp ), parameter :: a17 = . 964069299370187816_wp real ( wp ), parameter :: a18 = . 281729610523717922_wp real ( wp ), parameter :: a19 = . 631145492177176748_wp real ( wp ), parameter :: a20 = . 973803039377034607_wp real ( wp ), parameter :: b21 = . 2232129192123735665527132860096509572180113541116006004801774831897914255866976731834_wp real ( wp ), parameter :: b31 = . 837048447046400874572674822536191089567542577918502251800665561961717845950116274437 8e-1_wp real ( wp ), parameter :: b32 = . 2511145341139202623718024467608573268702627733755506755401996685885153537850348823314_wp real ( wp ), parameter :: b41 = . 1255572670569601311859012233804286634351313866877753377700998342942576768925174411657_wp real ( wp ), parameter :: b43 = . 3766718011708803935577036701412859903053941600633260133102995028827730306775523234970_wp real ( wp ), parameter :: b51 = . 864501263186028304309582758844308034258998816820951820303015617265404005372645736304 0e-1_wp real ( wp ), parameter :: b53 = . 523624379173028414750495946538195060444162228648130777490593076320073850167922523929 2e-1_wp real ( wp ), parameter :: b54 = - . 211176885810613122535473961342072344978346986682801818532449273102946274016429148675 1e-1_wp real ( wp ), parameter :: b61 = - . 263925772136691765502071903900853781431267565390504446708396785469349452158436732514 5e-1_wp real ( wp ), parameter :: b64 = . 3321586951309942525210016931443520748342752809336835485070926725007327816351124496012_wp real ( wp ), parameter :: b65 = . 3368262498431211326511112077677038226569227865316100826155173406864062373457114241753_wp real ( wp ), parameter :: b71 = . 421448143012889192459020716163930792519314409898305586957258755919601384233430863433 7e-1_wp real ( wp ), parameter :: b75 = . 1395091008993089985837339976891755843541033762656629420011519949721775047502000865276_wp real ( wp ), parameter :: b76 = . 172650110612579170363930694431336393965182744506499303122129435862356826456827128998 4e-3_wp real ( wp ), parameter :: b81 = . 1913223517063317850561878098464623128757461736096094048517648270556161690028960671678_wp real ( wp ), parameter :: b85 = - . 6549476653170516368338607340883454058106339891146285998978549868910881698171713079544_wp real ( wp ), parameter :: b86 = . 175587632374250272523847156824623515097259785921710186690210854577399810813602475068 3e-1_wp real ( wp ), parameter :: b87 = . 8802275837810902582715738829894117279732768782975732345915020603661640175161122358910_wp real ( wp ), parameter :: b91 = . 581951950625117397017610122222420099234545147557220004144276349408978174371274068202 9e-1_wp real ( wp ), parameter :: b96 = . 1647908558976784212367930935320516004070340774715814512653291320117464889726338996259_wp real ( wp ), parameter :: b97 = . 2562758618556534830885936612274458691344630164445656645146446091037555911278059725788_wp real ( wp ), parameter :: b98 = . 2329716296023982055737534602557078340765698480828560679203962114049223355708872997637_wp real ( wp ), parameter :: b101 = . 660980896975180518643211436369192785262166963279782182749385474668322550174544656025 2e-1_wp real ( wp ), parameter :: b106 = . 499379830360793631585200008806019224699735709657701255254852721720043040308063052441 4e-1_wp real ( wp ), parameter :: b107 = . 1536216094454890707317822140262379594167730891287251273659790090180235843883503581847_wp real ( wp ), parameter :: b108 = - . 541413038199431689952989313717755593993763342373300034530540054729713949757850833112 8e-1_wp real ( wp ), parameter :: b109 = - . 260763473998957058285039430485109450279601849657838614667929781803935401298378336008 9e-1_wp real ( wp ), parameter :: b111 = . 597728141306745562226483860053504696015505954794882736054839566619901513192570911873 3e-1_wp real ( wp ), parameter :: b118 = . 1656649460691327819663527933964608353435263909407310250007028968559622442637053740488_wp real ( wp ), parameter :: b119 = - . 127046707721932236148017716311096663537955863131744051303799985407134913802461122309 9e-2_wp real ( wp ), parameter :: b1110 = . 2702248607465165695058123310946329950236359055444314752401844796694522868883954793203_wp real ( wp ), parameter :: b121 = . 571464634692772654361729268328911733002025708306407765764068206612847678451094944317 2e-1_wp real ( wp ), parameter :: b129 = . 170664733327914003189390778907049759266551766971754150769662620079614481540947192356 9e-1_wp real ( wp ), parameter :: b1210 = . 2853767151165243146804641383356191775396044057521502467001987179873305495674085297549_wp real ( wp ), parameter :: b1211 = . 2807517183767373496913107023844645513421310226163727230918419292026930001911584202089_wp real ( wp ), parameter :: b131 = . 571369077066741124588875490466570144861997949456488820236659968850857120123548360966 0e-1_wp real ( wp ), parameter :: b139 = . 866214607590509014973828812624136179171026395578417304739154883362752488864918575790 1e-1_wp real ( wp ), parameter :: b1310 = . 2854329582389984323634810972884390808440109342965556282630983683305184760043391707767_wp real ( wp ), parameter :: b1311 = . 2797633923959254653770985744082321055561046971559230633717557229339774187704436927395_wp real ( wp ), parameter :: b1312 = . 326335117030079663031498979942581811965819340440306958675644235141431443263704428081 5e-1_wp real ( wp ), parameter :: b141 = . 579215421795851084663284650829842180072767559706641424431976631964876973126836729480 2e-1_wp real ( wp ), parameter :: b149 = - . 1168598764394854203108670771355968386139754171212251879659829443523204385801129100146_wp real ( wp ), parameter :: b1410 = . 2791270024477207066381851603610170508129292534731657465038373367821947287200953472810_wp real ( wp ), parameter :: b1411 = . 552348231215889703061817826805045073168095010362442570457734054216862735724310636445 4e-1_wp real ( wp ), parameter :: b1412 = . 331382142023044816358617520023651316159236714998414394450275698672015562197812580628 4e-1_wp real ( wp ), parameter :: b1413 = . 743496243508070082643099170087259308610362351413096025281469690847501827551215680781 3e-1_wp real ( wp ), parameter :: b151 = . 542434913126604890603356407741020202588950328267678340831345616242129408186590538924 8e-1_wp real ( wp ), parameter :: b159 = . 255574403648401901704549399726186583859417590536714249640018578678519160403139724321 8e-1_wp real ( wp ), parameter :: b1510 = . 1065318948685044129706483445621162791089602467505369099004177225283624953902959013228_wp real ( wp ), parameter :: b1511 = . 1494739176822617600298548318084537294306548147599349812604239821749187453609545343658_wp real ( wp ), parameter :: b1512 = - . 754141815082168684049889189623970408425066722266200183955632884011909334181039746513 6e-1_wp real ( wp ), parameter :: b1513 = . 118366271697470617369516184510635365805481883570886818758516420584483580788051263815 0e-2_wp real ( wp ), parameter :: b1514 = - . 154418469614537368_wp real ( wp ), parameter :: b161 = - . 313007335562516539987106399997136768293979997917068871152337323286847382920412230544 5e-1_wp real ( wp ), parameter :: b169 = - . 4393041016682237597697452523147415408933247130414835042917723489831082747083637622576_wp real ( wp ), parameter :: b1610 = - . 2971894957150042139937620479069507765251785957115322181603409909075380714667735160813_wp real ( wp ), parameter :: b1611 = . 1262980195755398451585609791771777378208362550125140868265029793320289593624402155837_wp real ( wp ), parameter :: b1612 = - . 135223566338950139303681395630991830902816180107641705719839343973101710038772948537 9e-1_wp real ( wp ), parameter :: b1613 = . 6695605432945227295340251006073274395173466715429726933128280272846122961086155806635_wp real ( wp ), parameter :: b1614 = . 398926850454282556_wp real ( wp ), parameter :: b1615 = . 462222650490275222_wp real ( wp ), parameter :: b171 = . 425460845603334494562225785459373628413149973566227601027127346321687262570249777086 6e-1_wp real ( wp ), parameter :: b179 = - . 1821182296512653493976221650402057582117417514147759470622260585285199838506585092559_wp real ( wp ), parameter :: b1710 = . 1693488568788993457692776359468516487310835997985566768493328170663073221084671579068_wp real ( wp ), parameter :: b1711 = - . 281293231138042309750553235900503928597130591046954156154312605238769034322851297538 8e-2_wp real ( wp ), parameter :: b1712 = . 4367359500435692592480947784835035112081291953371300785838045346974343617081011595250_wp real ( wp ), parameter :: b1713 = . 964962325350119096172823201464816790172423788486478672286726536468965926879323963404 2e-2_wp real ( wp ), parameter :: b1714 = . 1827541189026459104590716992261562936435133038172843022420870171219768684076842803782_wp real ( wp ), parameter :: b1715 = . 816399262978844696334164508237280127139345441636110872140941628245625872014353934424 0e-1_wp real ( wp ), parameter :: b1716 = . 2263259013959999629673163223583858004580131789671757969088706528737681492423808136362_wp real ( wp ), parameter :: b181 = - . 616278619970676395505256880874324775116572954244464654496172250162895228899656717728 0e-1_wp real ( wp ), parameter :: b189 = . 263081981642497549684070691257708860303098413076161334265174672263236241659272933806 5e-1_wp real ( wp ), parameter :: b1810 = - . 6563819353303824389148917307603424726525093364227772615481314402265589817962663323807_wp real ( wp ), parameter :: b1811 = - . 4996969738639946601661934398570589720521936732243676171454742217015940903119194293034_wp real ( wp ), parameter :: b1812 = - . 712301562559679825036405600599915445458680943354385949563286393536818574928195610436 1e-1_wp real ( wp ), parameter :: b1813 = . 1945887064918253295880838290230513152388881501421435771759995471289411971821731631008_wp real ( wp ), parameter :: b1814 = . 7502438829684451516052952921664213906375154664124515160998662893556068266252405773932_wp real ( wp ), parameter :: b1815 = . 6778525665536439867432200838066450041417881571145524785032579156045245492715999778952_wp real ( wp ), parameter :: b1816 = - . 1046057647455310786652080097009039359249473747848876107492887123406055065619567484248_wp real ( wp ), parameter :: b1817 = . 262789485384974988954531543438408066386741592151538446431990193233337618079867311553 9e-1_wp real ( wp ), parameter :: b191 = . 379652163287426120118620343684120943055969565576864412234621073327238240343703180529 4e-1_wp real ( wp ), parameter :: b199 = - . 2594056416058702079475722192315214454017994671360402614116801042085357278273610676615_wp real ( wp ), parameter :: b1910 = . 6023088303591701879982724849459819049819908747310071139535368513067871259409896536125_wp real ( wp ), parameter :: b1911 = . 6119387226913542078978281038711879095845432514371708320113689988639552031445275756169_wp real ( wp ), parameter :: b1912 = - . 8557593281472216275173535332798856826091404689475696899046474643882545069592793853088_wp real ( wp ), parameter :: b1913 = 1.016014044479150879819181655935044451622873646716581194764492422092270586935018600847_wp real ( wp ), parameter :: b1914 = . 4174635465318728144170599907012271233953357864579855698710555478932012900105054820193_wp real ( wp ), parameter :: b1915 = - . 314206874829401155038829880152262739856810650717809171088453183455363502576191712774 5e-2_wp real ( wp ), parameter :: b1916 = - . 3113859536805386540643212859648902182769708893494791481799285293081168071417215791223_wp real ( wp ), parameter :: b1917 = . 747532318200261148649063008884235649808579160720223055531427215976715849674379794157 7e-1_wp real ( wp ), parameter :: b1918 = - . 6996051078512155679294752334324570751847195000321862661699180193471489380787256603442_wp real ( wp ), parameter :: b201 = . 635424785800416205783320997390464879042378988764011084759720194471846747333551391545 7e-1_wp real ( wp ), parameter :: b209 = . 1335709427214855386564319367816597150656631989678512452281616080142611136536750546091_wp real ( wp ), parameter :: b2010 = . 3491939710685402856556370077059343902437022368395394555525545826876029022896488736825_wp real ( wp ), parameter :: b2011 = - . 1284299219085288104043584513269729325317465049017238832115899338924554224999281557779_wp real ( wp ), parameter :: b2012 = . 5820143454609020234416665664957204705761540086346612646427774305741185500271652747165_wp real ( wp ), parameter :: b2013 = - . 703229574906196771960975751775261973697011010221716091022663281906171047476349456204 6e-1_wp real ( wp ), parameter :: b2014 = . 4108572358925710179476579003323188290642373757595878674150744283920916547885055706399_wp real ( wp ), parameter :: b2015 = - . 251065477923996246626962790750376350565539055120967623263390583137650353073686722051 2e-1_wp real ( wp ), parameter :: b2016 = . 1223166254706007785807460575472930729088496060945489634909944334258869465746143128690_wp real ( wp ), parameter :: b2017 = . 471237457263974216685075221753341656576709345866663795460789669893321838765481764107 8e-1_wp real ( wp ), parameter :: b2018 = - . 2035773172368828280351383367281992122282011746329188150975183458730713499142844139626_wp real ( wp ), parameter :: b2019 = - . 3073795611150731392306884484695711542343125736903452146138998032605691134742962145162_wp real ( wp ), parameter :: b211 = . 1189924137880676460852663367282125023346761041034714988771622602337896848257576311721_wp real ( wp ), parameter :: b219 = 1.567065389218647018255284948985537561396036403483411695550932448674279128530361565244_wp real ( wp ), parameter :: b2110 = 1.062742213102872753657741254837796588064400661866785937264672961506012193460062190291_wp real ( wp ), parameter :: b2111 = - . 7051696022721412819771965938099389611228930171636494130149946862206926743626267591091_wp real ( wp ), parameter :: b2112 = . 9907825344767892999287937933800084396119601938859814415204705439463102044422773242413_wp real ( wp ), parameter :: b2113 = . 2507980962931107922266871779870423357231706420300879746540980799200371363012966217081_wp real ( wp ), parameter :: b2114 = 1.972591757153629542226038011120263810650524345125694323573613060238829589123920677616_wp real ( wp ), parameter :: b2115 = - . 3262628387941532893880299499584174546880007304318604226454131079685364715701264155684_wp real ( wp ), parameter :: b2116 = - . 7195961905900189101450624277119790470362703727002334732811111315403329989928142118605_wp real ( wp ), parameter :: b2117 = . 5802031535291661528133435810283051023192180079596550160030993013203826047471987749923_wp real ( wp ), parameter :: b2118 = - 1.503104563178041688806298917914932279967077722444117887454135595533548208509663052219_wp real ( wp ), parameter :: b2119 = - 2.082917406986733532241895178393857460921252779279252368270349439324592549474879051363_wp real ( wp ), parameter :: b2120 = - . 2061249557411945026346720362780411363644917364359743227780446952519376385207652951444_wp real ( wp ), parameter :: c1 = . 307444093579320767588351793898414978641199543864621136604968790192986473672636039670 1e-1_wp real ( wp ), parameter :: c12 = . 4447886124335158463373029422601699728444313324875120673928896655863659883998986985001_wp real ( wp ), parameter :: c13 = - . 771447289867255102723642741207568993324193730424966783048608900256792659207057832809 9e-1_wp real ( wp ), parameter :: c14 = . 1895969236666960081782143661904924178003392273539755384045555627359634132139704039829_wp real ( wp ), parameter :: c15 = . 1696794742660741325357704245298007854728500376148224262050684467711119689665579207267_wp real ( wp ), parameter :: c16 = . 3107725327623489988155072749206969138501610275590999188855016092183529050525521871700_wp real ( wp ), parameter :: c17 = - 1.052173416444910172223599400939351222118848154980691993896969290833000795415995203779_wp real ( wp ), parameter :: c18 = . 1098353169596310609348506603862869818226618225743191040640071521542528953059954349550_wp real ( wp ), parameter :: c19 = - . 1334572232187388442842841059278351057902328711498735111118805829160094435254500793407_wp real ( wp ), parameter :: c20 = 1.154026328574134208065260150796827370454610532524502151460002781580501491609214462821_wp real ( wp ), parameter :: c21 = - . 1466682293699578048454932174861727128676735353276311367588113332911578050533016457222_wp real ( wp ), parameter :: d1 = . 306993588915105633978419848815291723759470195906443111383956636605349614374098980658 0e-1_wp real ( wp ), parameter :: d12 = . 4501037370765134863000400416812391552231563060566733706571606677666390164501322407860_wp real ( wp ), parameter :: d13 = - . 651475793363240012117756657281013338890712956281021752710358335108286842767731781817 1e-1_wp real ( wp ), parameter :: d14 = . 1916476309177840038043731680068457542540807928558914659725060136615214781805707317846_wp real ( wp ), parameter :: d15 = . 1699093037015861786030207592719576231809404332930270025745281206261397945871067257969_wp real ( wp ), parameter :: d16 = . 2831822563446878149008449047225439184357774091336334653238641676396106848038134341285_wp real ( wp ), parameter :: d17 = - . 7938273328067640993878535581971311480056976834520424653124835645605083935506842817243_wp real ( wp ), parameter :: d18 = . 1085805168491408111596918257428235537727685528809234551377846603272747280143198404809_wp real ( wp ), parameter :: d19 = - . 1442902422009048623094173280045594665841429401482516755746485620108546739010869727583_wp real ( wp ), parameter :: d20 = . 8718101111217405681350791198631736702436128801469513492598526664004710882551915616216_wp real ( wp ), parameter :: d21 = - . 102667760558970463391845252240320899007371474729348103905924_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + h , x + h * ( b211 * f1 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) xf = x + h * ( c1 * f1 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + & c17 * f17 + c18 * f18 + c19 * f19 + c20 * f20 + c21 * f21 ) xerr = h * ( e1 * f1 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + & e17 * f17 + e18 * f18 + e19 * f19 + e20 * f20 + e21 * f21 ) end associate end procedure rkb109 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. ! !### Reference ! * [coefficient file](http://sce.uhcl.edu/rungekutta/rk1210.txt) module procedure rkf1210 real ( wp ), parameter :: a0 = 0 real ( wp ), parameter :: a1 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a2 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a3 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a4 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a6 = 0.671835709170513812712245661002797570438953420568682550710222_wp real ( wp ), parameter :: a7 = 0.288724941110620201935458488967024976908118598341806976469674_wp real ( wp ), parameter :: a8 = 0.562500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a9 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a10 = 0.947695431179199287562380162101836721649589325892740646458322_wp real ( wp ), parameter :: a11 = 0.0548112876863802643887753674810754475842153612931128785028369_wp real ( wp ), parameter :: a12 = 0.0848880518607165350639838930162674302064148175640019542045934_wp real ( wp ), parameter :: a13 = 0.265575603264642893098114059045616835297201264164077621448665_wp real ( wp ), parameter :: a14 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a15 = 0.734424396735357106901885940954383164702798735835922378551335_wp real ( wp ), parameter :: a16 = 0.915111948139283464936016106983732569793585182435998045795407_wp real ( wp ), parameter :: a17 = 0.947695431179199287562380162101836721649589325892740646458322_wp real ( wp ), parameter :: a18 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a19 = 0.288724941110620201935458488967024976908118598341806976469674_wp real ( wp ), parameter :: a20 = 0.671835709170513812712245661002797570438953420568682550710222_wp real ( wp ), parameter :: a21 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a22 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a23 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a24 = 1 real ( wp ), parameter :: c0 = 0.0238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: c1 = 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0312500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0.0416666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c7 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c10 = 0.0714285714285714285714285714285714285714285714285714285714286_wp real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = 0.138413023680782974005350203145033146748813640089941234591267_wp real ( wp ), parameter :: c13 = 0.215872690604931311708935511140681138965472074195773051123019_wp real ( wp ), parameter :: c14 = 0.243809523809523809523809523809523809523809523809523809523810_wp real ( wp ), parameter :: c15 = 0.215872690604931311708935511140681138965472074195773051123019_wp real ( wp ), parameter :: c16 = 0.138413023680782974005350203145033146748813640089941234591267_wp real ( wp ), parameter :: c17 = - 0.0714285714285714285714285714285714285714285714285714285714286_wp real ( wp ), parameter :: c18 = - 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c19 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c20 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c21 = - 0.0416666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: c22 = - 0.0312500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c23 = - 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c24 = 0.0238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: b10 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b20 = - 0.216049382716049382716049382716049382716049382716049382716049_wp real ( wp ), parameter :: b21 = 0.771604938271604938271604938271604938271604938271604938271605_wp real ( wp ), parameter :: b30 = 0.208333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b31 = 0 real ( wp ), parameter :: b32 = 0.625000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b40 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b41 = 0 real ( wp ), parameter :: b42 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b43 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b50 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b51 = 0 real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = 0.400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b54 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b60 = 0.103364471650010477570395435690481791543342708330349879244197_wp real ( wp ), parameter :: b61 = 0 real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0.124053094528946761061581889237115328211074784955180298044074_wp real ( wp ), parameter :: b64 = 0.483171167561032899288836480451962508724109257517289177302380_wp real ( wp ), parameter :: b65 = - 0.0387530245694763252085681443767620580395733302341368038804290_wp real ( wp ), parameter :: b70 = 0.124038261431833324081904585980175168140024670698633612292480_wp real ( wp ), parameter :: b71 = 0 real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0.217050632197958486317846256953159942875916353757734167684657_wp real ( wp ), parameter :: b75 = 0.0137455792075966759812907801835048190594443990939408530842918_wp real ( wp ), parameter :: b76 = - 0.0661095317267682844455831341498149531672668252085016565917546_wp real ( wp ), parameter :: b80 = 0.0914774894856882983144991846980432197088832099976660100090486_wp real ( wp ), parameter :: b81 = 0 real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 0.00544348523717469689965754944144838611346156873847009178068318_wp real ( wp ), parameter :: b86 = 0.0680716801688453518578515120895103863112751730758794372203952_wp real ( wp ), parameter :: b87 = 0.408394315582641046727306852653894780093303185664924644551239_wp real ( wp ), parameter :: b90 = 0.0890013652502551018954509355423841780143232697403434118692699_wp real ( wp ), parameter :: b91 = 0 real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0.00499528226645532360197793408420692800405891149406814091955810_wp real ( wp ), parameter :: b96 = 0.397918238819828997341739603001347156083435060931424970826304_wp real ( wp ), parameter :: b97 = 0.427930210752576611068192608300897981558240730580396406312359_wp real ( wp ), parameter :: b98 = - 0.0865117637557827005740277475955029103267246394128995965941585_wp real ( wp ), parameter :: b100 = 0.0695087624134907543112693906409809822706021061685544615255758_wp real ( wp ), parameter :: b101 = 0 real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0.129146941900176461970759579482746551122871751501482634045487_wp real ( wp ), parameter :: b106 = 1.53073638102311295076342566143214939031177504112433874313011_wp real ( wp ), parameter :: b107 = 0.577874761129140052546751349454576715334892100418571882718036_wp real ( wp ), parameter :: b108 = - 0.951294772321088980532340837388859453930924498799228648050949_wp real ( wp ), parameter :: b109 = - 0.408276642965631951497484981519757463459627174520978426909934_wp real ( wp ), parameter :: b110 = 0.0444861403295135866269453507092463581620165501018684152933313_wp real ( wp ), parameter :: b111 = 0 real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = - 0.00380476867056961731984232686574547203016331563626856065717964_wp real ( wp ), parameter :: b116 = 0.0106955064029624200721262602809059154469206077644957399593972_wp real ( wp ), parameter :: b117 = 0.0209616244499904333296674205928919920806734650660039898074652_wp real ( wp ), parameter :: b118 = - 0.0233146023259321786648561431551978077665337818756053603898847_wp real ( wp ), parameter :: b119 = 0.00263265981064536974369934736325334761174975280887405725010964_wp real ( wp ), parameter :: b1110 = 0.00315472768977025060103545855572111407955208306374459723959783_wp real ( wp ), parameter :: b120 = 0.0194588815119755475588801096525317761242073762016273186231215_wp real ( wp ), parameter :: b121 = 0 real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0.0000678512949171812509306121653452367476194364781259165332321534_wp real ( wp ), parameter :: b129 = - 0.0000429795859049273623271005330230162343568863387724883603675550_wp real ( wp ), parameter :: b1210 = 0.0000176358982260285155407485928953302139937553442829975734148981_wp real ( wp ), parameter :: b1211 = 0.0653866627415027051009595231385181033549511358787382098351924_wp real ( wp ), parameter :: b130 = 0.206836835664277105916828174798272361078909196043446411598231_wp real ( wp ), parameter :: b131 = 0 real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0.0166796067104156472828045866664696450306326505094792505215514_wp real ( wp ), parameter :: b139 = - 0.00879501563200710214457024178249986591130234990219959208704979_wp real ( wp ), parameter :: b1310 = 0.00346675455362463910824462315246379209427513654098596403637231_wp real ( wp ), parameter :: b1311 = - 0.861264460105717678161432562258351242030270498966891201799225_wp real ( wp ), parameter :: b1312 = 0.908651882074050281096239478469262145034957129939256789178785_wp real ( wp ), parameter :: b140 = 0.0203926084654484010091511314676925686038504449562413004562382_wp real ( wp ), parameter :: b141 = 0 real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0.0869469392016685948675400555583947505833954460930940959577347_wp real ( wp ), parameter :: b149 = - 0.0191649630410149842286436611791405053287170076602337673587681_wp real ( wp ), parameter :: b1410 = 0.00655629159493663287364871573244244516034828755253746024098838_wp real ( wp ), parameter :: b1411 = 0.0987476128127434780903798528674033899738924968006632201445462_wp real ( wp ), parameter :: b1412 = 0.00535364695524996055083260173615567408717110247274021056118319_wp real ( wp ), parameter :: b1413 = 0.301167864010967916837091303817051676920059229784957479998077_wp real ( wp ), parameter :: b150 = 0.228410433917778099547115412893004398779136994596948545722283_wp real ( wp ), parameter :: b151 = 0 real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = - 0.498707400793025250635016567442511512138603770959682292383042_wp real ( wp ), parameter :: b159 = 0.134841168335724478552596703792570104791700727205981058201689_wp real ( wp ), parameter :: b1510 = - 0.0387458244055834158439904226924029230935161059142806805674360_wp real ( wp ), parameter :: b1511 = - 1.27473257473474844240388430824908952380979292713250350199641_wp real ( wp ), parameter :: b1512 = 1.43916364462877165201184452437038081875299303577911839630524_wp real ( wp ), parameter :: b1513 = - 0.214007467967990254219503540827349569639028092344812795499026_wp real ( wp ), parameter :: b1514 = 0.958202417754430239892724139109781371059908874605153648768037_wp real ( wp ), parameter :: b160 = 2.00222477655974203614249646012506747121440306225711721209798_wp real ( wp ), parameter :: b161 = 0 real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 2.06701809961524912091954656438138595825411859673341600679555_wp real ( wp ), parameter :: b169 = 0.623978136086139541957471279831494466155292316167021080663140_wp real ( wp ), parameter :: b1610 = - 0.0462283685500311430283203554129062069391947101880112723185773_wp real ( wp ), parameter :: b1611 = - 8.84973288362649614860075246727118949286604835457092701094630_wp real ( wp ), parameter :: b1612 = 7.74257707850855976227437225791835589560188590785037197433615_wp real ( wp ), parameter :: b1613 = - 0.588358519250869210993353314127711745644125882130941202896436_wp real ( wp ), parameter :: b1614 = - 1.10683733362380649395704708016953056176195769617014899442903_wp real ( wp ), parameter :: b1615 = - 0.929529037579203999778397238291233214220788057511899747507074_wp real ( wp ), parameter :: b170 = 3.13789533412073442934451608989888796808161259330322100268310_wp real ( wp ), parameter :: b171 = 0 real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0.129146941900176461970759579482746551122871751501482634045487_wp real ( wp ), parameter :: b176 = 1.53073638102311295076342566143214939031177504112433874313011_wp real ( wp ), parameter :: b177 = 0.577874761129140052546751349454576715334892100418571882718036_wp real ( wp ), parameter :: b178 = 5.42088263055126683050056840891857421941300558851862156403363_wp real ( wp ), parameter :: b179 = 0.231546926034829304872663800877643660904880180835945693836936_wp real ( wp ), parameter :: b1710 = 0.0759292995578913560162301311785251873561801342333194895292058_wp real ( wp ), parameter :: b1711 = - 1 2.3729973380186513287414553402595806591349822617535905976253_wp real ( wp ), parameter :: b1712 = 9.85455883464769543935957209317369202080367765721777101906955_wp real ( wp ), parameter :: b1713 = 0.0859111431370436529579357709052367772889980495122329601159540_wp real ( wp ), parameter :: b1714 = - 5.65242752862643921117182090081762761180392602644189218673969_wp real ( wp ), parameter :: b1715 = - 1.94300935242819610883833776782364287728724899124166920477873_wp real ( wp ), parameter :: b1716 = - 0.128352601849404542018428714319344620742146491335612353559923_wp real ( wp ), parameter :: b180 = 1.38360054432196014878538118298167716825163268489922519995564_wp real ( wp ), parameter :: b181 = 0 real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0.00499528226645532360197793408420692800405891149406814091955810_wp real ( wp ), parameter :: b186 = 0.397918238819828997341739603001347156083435060931424970826304_wp real ( wp ), parameter :: b187 = 0.427930210752576611068192608300897981558240730580396406312359_wp real ( wp ), parameter :: b188 = - 1.30299107424475770916551439123047573342071475998399645982146_wp real ( wp ), parameter :: b189 = 0.661292278669377029097112528107513072734573412294008071500699_wp real ( wp ), parameter :: b1810 = - 0.144559774306954349765969393688703463900585822441545655530145_wp real ( wp ), parameter :: b1811 = - 6.96576034731798203467853867461083919356792248105919255460819_wp real ( wp ), parameter :: b1812 = 6.65808543235991748353408295542210450632193197576935120716437_wp real ( wp ), parameter :: b1813 = - 1.66997375108841486404695805725510845049807969199236227575796_wp real ( wp ), parameter :: b1814 = 2.06413702318035263832289040301832647130604651223986452170089_wp real ( wp ), parameter :: b1815 = - 0.674743962644306471862958129570837723192079875998405058648892_wp real ( wp ), parameter :: b1816 = - 0.00115618834794939500490703608435907610059605754935305582045729_wp real ( wp ), parameter :: b1817 = - 0.00544057908677007389319819914241631024660726585015012485938593_wp real ( wp ), parameter :: b190 = 0.951236297048287669474637975894973552166903378983475425758226_wp real ( wp ), parameter :: b191 = 0 real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0.217050632197958486317846256953159942875916353757734167684657_wp real ( wp ), parameter :: b195 = 0.0137455792075966759812907801835048190594443990939408530842918_wp real ( wp ), parameter :: b196 = - 0.0661095317267682844455831341498149531672668252085016565917546_wp real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0.152281696736414447136604697040747131921486432699422112099617_wp real ( wp ), parameter :: b199 = - 0.337741018357599840802300793133998004354643424457539667670080_wp real ( wp ), parameter :: b1910 = - 0.0192825981633995781534949199286824400469353110630787982121133_wp real ( wp ), parameter :: b1911 = - 3.68259269696866809932409015535499603576312120746888880201882_wp real ( wp ), parameter :: b1912 = 3.16197870406982063541533528419683854018352080342887002331312_wp real ( wp ), parameter :: b1913 = - 0.370462522106885290716991856022051125477943482284080569177386_wp real ( wp ), parameter :: b1914 = - 0.0514974200365440434996434456698127984941168616474316871020314_wp real ( wp ), parameter :: b1915 = - 0.000829625532120152946787043541792848416659382675202720677536554_wp real ( wp ), parameter :: b1916 = 0.00000279801041419278598986586589070027583961355402640879503213503_wp real ( wp ), parameter :: b1917 = 0.0418603916412360287969841020776788461794119440689356178942252_wp real ( wp ), parameter :: b1918 = 0.279084255090877355915660874555379649966282167560126269290222_wp real ( wp ), parameter :: b200 = 0.103364471650010477570395435690481791543342708330349879244197_wp real ( wp ), parameter :: b201 = 0 real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0.124053094528946761061581889237115328211074784955180298044074_wp real ( wp ), parameter :: b204 = 0.483171167561032899288836480451962508724109257517289177302380_wp real ( wp ), parameter :: b205 = - 0.0387530245694763252085681443767620580395733302341368038804290_wp real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = - 0.438313820361122420391059788940960176420682836652600698580091_wp real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = - 0.218636633721676647685111485017151199362509373698288330593486_wp real ( wp ), parameter :: b2010 = - 0.0312334764394719229981634995206440349766174759626578122323015_wp real ( wp ), parameter :: b2011 = 0 real ( wp ), parameter :: b2012 = 0 real ( wp ), parameter :: b2013 = 0 real ( wp ), parameter :: b2014 = 0 real ( wp ), parameter :: b2015 = 0 real ( wp ), parameter :: b2016 = 0 real ( wp ), parameter :: b2017 = 0.0312334764394719229981634995206440349766174759626578122323015_wp real ( wp ), parameter :: b2018 = 0.218636633721676647685111485017151199362509373698288330593486_wp real ( wp ), parameter :: b2019 = 0.438313820361122420391059788940960176420682836652600698580091_wp real ( wp ), parameter :: b210 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b211 = 0 real ( wp ), parameter :: b212 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b213 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0.0984256130499315928152900286856048243348202521491288575952143_wp real ( wp ), parameter :: b217 = - 0.196410889223054653446526504390100417677539095340135532418849_wp real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0.436457930493068729391826122587949137609670676712525034763317_wp real ( wp ), parameter :: b2110 = 0.0652613721675721098560370939805555698350543810708414716730270_wp real ( wp ), parameter :: b2111 = 0 real ( wp ), parameter :: b2112 = 0 real ( wp ), parameter :: b2113 = 0 real ( wp ), parameter :: b2114 = 0 real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = - 0.0652613721675721098560370939805555698350543810708414716730270_wp real ( wp ), parameter :: b2118 = - 0.436457930493068729391826122587949137609670676712525034763317_wp real ( wp ), parameter :: b2119 = 0.196410889223054653446526504390100417677539095340135532418849_wp real ( wp ), parameter :: b2120 = - 0.0984256130499315928152900286856048243348202521491288575952143_wp real ( wp ), parameter :: b220 = - 0.216049382716049382716049382716049382716049382716049382716049_wp real ( wp ), parameter :: b221 = 0.771604938271604938271604938271604938271604938271604938271605_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = - 0.666666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = - 0.390696469295978451446999802258495981249099665294395945559163_wp real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = 0 real ( wp ), parameter :: b2213 = 0 real ( wp ), parameter :: b2214 = 0 real ( wp ), parameter :: b2215 = 0 real ( wp ), parameter :: b2216 = 0 real ( wp ), parameter :: b2217 = 0 real ( wp ), parameter :: b2218 = 0 real ( wp ), parameter :: b2219 = 0 real ( wp ), parameter :: b2220 = 0.390696469295978451446999802258495981249099665294395945559163_wp real ( wp ), parameter :: b2221 = 0.666666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b230 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b231 = 0 real ( wp ), parameter :: b232 = - 0.164609053497942386831275720164609053497942386831275720164609_wp real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = 0 real ( wp ), parameter :: b2312 = 0 real ( wp ), parameter :: b2313 = 0 real ( wp ), parameter :: b2314 = 0 real ( wp ), parameter :: b2315 = 0 real ( wp ), parameter :: b2316 = 0 real ( wp ), parameter :: b2317 = 0 real ( wp ), parameter :: b2318 = 0 real ( wp ), parameter :: b2319 = 0 real ( wp ), parameter :: b2320 = 0 real ( wp ), parameter :: b2321 = 0 real ( wp ), parameter :: b2322 = 0.164609053497942386831275720164609053497942386831275720164609_wp real ( wp ), parameter :: b240 = 1.47178724881110408452949550989023611293535315518571691939396_wp real ( wp ), parameter :: b241 = 0.787500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b242 = 0.421296296296296296296296296296296296296296296296296296296296_wp real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0.348600717628329563206854421629657569274689947367847465753757_wp real ( wp ), parameter :: b247 = 0.229499544768994849582890233710555447073823569666506700662510_wp real ( wp ), parameter :: b248 = 5.79046485790481979159831978177003471098279506036722411333192_wp real ( wp ), parameter :: b249 = 0.418587511856506868874073759426596207226461447604248151080016_wp real ( wp ), parameter :: b2410 = 0.307039880222474002649653817490106690389251482313213999386651_wp real ( wp ), parameter :: b2411 = - 4.68700905350603332214256344683853248065574415794742040470287_wp real ( wp ), parameter :: b2412 = 3.13571665593802262152038152399873856554395436199962915429076_wp real ( wp ), parameter :: b2413 = 1.40134829710965720817510506275620441055845017313930508348898_wp real ( wp ), parameter :: b2414 = - 5.52931101439499023629010306005764336421276055777658156400910_wp real ( wp ), parameter :: b2415 = - 0.853138235508063349309546894974784906188927508039552519557498_wp real ( wp ), parameter :: b2416 = 0.103575780373610140411804607167772795518293914458500175573749_wp real ( wp ), parameter :: b2417 = - 0.140474416950600941142546901202132534870665923700034957196546_wp real ( wp ), parameter :: b2418 = - 0.418587511856506868874073759426596207226461447604248151080016_wp real ( wp ), parameter :: b2419 = - 0.229499544768994849582890233710555447073823569666506700662510_wp real ( wp ), parameter :: b2420 = - 0.348600717628329563206854421629657569274689947367847465753757_wp real ( wp ), parameter :: b2421 = - 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b2422 = - 0.421296296296296296296296296296296296296296296296296296296296_wp real ( wp ), parameter :: b2423 = - 0.787500000000000000000000000000000000000000000000000000000000_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 ), & f17 => me % funcs (:, 18 ), & f18 => me % funcs (:, 19 ), & f19 => me % funcs (:, 20 ), & f20 => me % funcs (:, 21 ), & f21 => me % funcs (:, 22 ), & f22 => me % funcs (:, 23 ), & f23 => me % funcs (:, 24 ), & f24 => me % funcs (:, 25 )) call me % f ( t + a0 * h , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b50 * f0 + b51 * f1 + b52 * f2 + b53 * f3 + & b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b61 * f1 + b62 * f2 + b63 * f3 + & b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b71 * f1 + b72 * f2 + b73 * f3 + & b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b81 * f1 + b82 * f2 + b83 * f3 + & b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b91 * f1 + b92 * f2 + b93 * f3 + & b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b101 * f1 + b102 * f2 + b103 * f3 + & b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b111 * f1 + b112 * f2 + b113 * f3 + & b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b121 * f1 + b122 * f2 + b123 * f3 + & b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b131 * f1 + b132 * f2 + b133 * f3 + & b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b142 * f2 + b143 * f3 + & b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b151 * f1 + b152 * f2 + b153 * f3 + & b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b163 * f3 + & b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b170 * f0 + b171 * f1 + b172 * f2 + b173 * f3 + & b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + & b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + & b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b180 * f0 + b181 * f1 + b182 * f2 + b183 * f3 + & b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + & b1812 * f12 + b1813 * f13 + b1814 * f14 + b1815 * f15 + & b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b190 * f0 + b191 * f1 + b192 * f2 + b193 * f3 + & b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + & b1912 * f12 + b1913 * f13 + b1914 * f14 + b1915 * f15 + & b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b200 * f0 + b201 * f1 + b202 * f2 + b203 * f3 + & b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + & b2012 * f12 + b2013 * f13 + b2014 * f14 + b2015 * f15 + & b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b210 * f0 + b211 * f1 + b212 * f2 + b213 * f3 + & b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + & b2112 * f12 + b2113 * f13 + b2114 * f14 + b2115 * f15 + & b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b220 * f0 + b221 * f1 + b222 * f2 + b223 * f3 + & b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + & b2212 * f12 + b2213 * f13 + b2214 * f14 + b2215 * f15 + & b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b230 * f0 + b231 * f1 + b232 * f2 + b233 * f3 + & b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + & b2312 * f12 + b2313 * f13 + b2314 * f14 + b2315 * f15 + & b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b240 * f0 + b241 * f1 + b242 * f2 + b243 * f3 + & b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + & b2412 * f12 + b2413 * f13 + b2414 * f14 + b2415 * f15 + & b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) xf = x + h * ( c0 * f0 + & c1 * f1 + & c2 * f2 + & c3 * f3 + & c4 * f4 + & c5 * f5 + & c6 * f6 + & c7 * f7 + & c8 * f8 + & c9 * f9 + & c10 * f10 + & c11 * f11 + & c12 * f12 + & c13 * f13 + & c14 * f14 + & c15 * f15 + & c16 * f16 + & c17 * f17 + & c18 * f18 + & c19 * f19 + & c20 * f20 + & c21 * f21 + & c22 * f22 + & c23 * f23 + & c24 * f24 ) xerr = ( 4 9.0_wp / 64 0.0_wp ) * h * ( f1 - f23 ) end associate end procedure rkf1210 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. ! !### Reference ! * [coefficient file](http://sce.uhcl.edu/rungekutta/rk1412.txt) module procedure rkf1412 real ( wp ), parameter :: a0 = 0 real ( wp ), parameter :: a1 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: a2 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a3 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a4 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a6 = 0.669986979272772921764683785505998513938845229638460353285142_wp real ( wp ), parameter :: a7 = 0.297068384213818357389584716808219413223332094698915687379168_wp real ( wp ), parameter :: a8 = 0.727272727272727272727272727272727272727272727272727272727273_wp real ( wp ), parameter :: a9 = 0.140152799042188765276187487966946717629806463082532936287323_wp real ( wp ), parameter :: a10 = 0.700701039770150737151099854830749337941407049265546408969222_wp real ( wp ), parameter :: a11 = 0.363636363636363636363636363636363636363636363636363636363636_wp real ( wp ), parameter :: a12 = 0.263157894736842105263157894736842105263157894736842105263158_wp real ( wp ), parameter :: a13 = 0.0392172246650270859125196642501208648863714315266128052078483_wp real ( wp ), parameter :: a14 = 0.812917502928376762983393159278036506189612372617238550774312_wp real ( wp ), parameter :: a15 = 0.166666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: a16 = 0.900000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a17 = 0.0641299257451966923312771193896682809481096651615083225402924_wp real ( wp ), parameter :: a18 = 0.204149909283428848927744634301023405027149505241333751628870_wp real ( wp ), parameter :: a19 = 0.395350391048760565615671369827324372352227297456659450554577_wp real ( wp ), parameter :: a20 = 0.604649608951239434384328630172675627647772702543340549445423_wp real ( wp ), parameter :: a21 = 0.795850090716571151072255365698976594972850494758666248371130_wp real ( wp ), parameter :: a22 = 0.935870074254803307668722880610331719051890334838491677459708_wp real ( wp ), parameter :: a23 = 0.166666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: a24 = 0.812917502928376762983393159278036506189612372617238550774312_wp real ( wp ), parameter :: a25 = 0.0392172246650270859125196642501208648863714315266128052078483_wp real ( wp ), parameter :: a26 = 0.363636363636363636363636363636363636363636363636363636363636_wp real ( wp ), parameter :: a27 = 0.700701039770150737151099854830749337941407049265546408969222_wp real ( wp ), parameter :: a28 = 0.140152799042188765276187487966946717629806463082532936287323_wp real ( wp ), parameter :: a29 = 0.297068384213818357389584716808219413223332094698915687379168_wp real ( wp ), parameter :: a30 = 0.669986979272772921764683785505998513938845229638460353285142_wp real ( wp ), parameter :: a31 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a32 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a33 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c0 = 0.0178571428571428571428571428571428571428571428571428571428571_wp real ( wp ), parameter :: c1 = 0.00585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0117187500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0.0175781250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c7 = 0.0292968750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0.0351562500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c10 = 0.0410156250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c11 = 0.0468750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = 0.0527343750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c14 = 0.0585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c15 = 0.0644531250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c16 = 0 real ( wp ), parameter :: c17 = 0.105352113571753019691496032887878162227673083080523884041670_wp real ( wp ), parameter :: c18 = 0.170561346241752182382120338553874085887555487802790804737501_wp real ( wp ), parameter :: c19 = 0.206229397329351940783526485701104894741914286259542454077972_wp real ( wp ), parameter :: c20 = 0.206229397329351940783526485701104894741914286259542454077972_wp real ( wp ), parameter :: c21 = 0.170561346241752182382120338553874085887555487802790804737501_wp real ( wp ), parameter :: c22 = 0.105352113571753019691496032887878162227673083080523884041670_wp real ( wp ), parameter :: c23 = - 0.0644531250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c24 = - 0.0585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c25 = - 0.0527343750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c26 = - 0.0468750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c27 = - 0.0410156250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c28 = - 0.0351562500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c29 = - 0.0292968750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c30 = - 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c31 = - 0.0175781250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c32 = - 0.0117187500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c33 = - 0.00585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c34 = 0.0178571428571428571428571428571428571428571428571428571428571_wp real ( wp ), parameter :: b10 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: b20 = - 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b21 = 1.38888888888888888888888888888888888888888888888888888888889_wp real ( wp ), parameter :: b30 = 0.208333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b31 = 0 real ( wp ), parameter :: b32 = 0.625000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b40 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b41 = 0 real ( wp ), parameter :: b42 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b43 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b50 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b51 = 0 real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = 0.400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b54 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b60 = 0.103484561636679776672993546511910344499744798201971316606663_wp real ( wp ), parameter :: b61 = 0 real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0.122068887306407222589644082868962077139592714834162134741275_wp real ( wp ), parameter :: b64 = 0.482574490331246622475134780125688112865919023850168049679402_wp real ( wp ), parameter :: b65 = - 0.0381409600015606999730886240005620205664113072478411477421970_wp real ( wp ), parameter :: b70 = 0.124380526654094412881516420868799316268491466359671423163289_wp real ( wp ), parameter :: b71 = 0 real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0.226120282197584301422238662979202901196752320742633143965145_wp real ( wp ), parameter :: b75 = 0.0137885887618080880607695837016477814530969417491493385363543_wp real ( wp ), parameter :: b76 = - 0.0672210133996684449749399507414305856950086341525382182856200_wp real ( wp ), parameter :: b80 = 0.0936919065659673815530885456083005933866349695217750085655603_wp real ( wp ), parameter :: b81 = 0 real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 0.00613406843450510987229498995641664735620914507128858871007099_wp real ( wp ), parameter :: b86 = 0.216019825625503063708860097659866573490979433278117320188668_wp real ( wp ), parameter :: b87 = 0.423695063515761937337619073960976753205867469544123532683116_wp real ( wp ), parameter :: b90 = 0.0838479812409052664616968791372814085980533139224911131069335_wp real ( wp ), parameter :: b91 = 0 real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = - 0.0117949367100973814319755056031295775367961960590736150777613_wp real ( wp ), parameter :: b96 = - 0.247299020568812652339473838743194598325992840353340132697498_wp real ( wp ), parameter :: b97 = 0.0978080858367729012259313014081291665503740655476733940756599_wp real ( wp ), parameter :: b98 = 0.217590689243420631360008651767860318344168120024782176879989_wp real ( wp ), parameter :: b100 = 0.0615255359769428227954562389614314714333423969064821107453940_wp real ( wp ), parameter :: b101 = 0 real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0.00592232780324503308042990005798046524738389560444257136834990_wp real ( wp ), parameter :: b106 = 0.470326159963841112217224303205894113455362530746108825010848_wp real ( wp ), parameter :: b107 = 0.299688863848679000853981837096192399136831121671781279184194_wp real ( wp ), parameter :: b108 = - 0.247656877593994914689992276329810825853958069263947095548189_wp real ( wp ), parameter :: b109 = 0.110895029771437682893999851839061714522445173600678718208625_wp real ( wp ), parameter :: b110 = 0.0419700073362782579861792864787277787213483656543104611245994_wp real ( wp ), parameter :: b111 = 0 real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = - 0.00317987696266205093901912847692712407988609169703103952205634_wp real ( wp ), parameter :: b116 = 0.806397714906192077260821711520379506393543111567419750119748_wp real ( wp ), parameter :: b117 = 0.0975983126412388979093522850684288851314672048003054550357187_wp real ( wp ), parameter :: b118 = 0.778575578158398909027512446452927238999763460594181964958853_wp real ( wp ), parameter :: b119 = 0.204890423831599428189499202098105603312029235081420653574829_wp real ( wp ), parameter :: b1110 = - 1.56261579627468188307070943950527825211462892236424360892806_wp real ( wp ), parameter :: b120 = 0.0437726782233730163574465242495339811688214967071614123256973_wp real ( wp ), parameter :: b121 = 0 real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0.00624365027520195208794358628580933625281631216903095917201250_wp real ( wp ), parameter :: b129 = 0.200043097109577314994435165469647856829066232218264969608768_wp real ( wp ), parameter :: b1210 = - 0.00805328367804983036823857162048902911923392887337029314844206_wp real ( wp ), parameter :: b1211 = 0.0211517528067396521915711903523399601316877825157550573051221_wp real ( wp ), parameter :: b130 = 0.0283499250363514563095023591920717312247137654896477097768495_wp real ( wp ), parameter :: b131 = 0 real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0.00249163204855817407538949148805995149459884653585417680098222_wp real ( wp ), parameter :: b139 = 0.0230138787854593149638399846373742768772087122638142234223658_wp real ( wp ), parameter :: b1310 = - 0.00322155956692977098724476092467120878189463604760620461043308_wp real ( wp ), parameter :: b1311 = 0.00988442549447664668946335414487885256040819982786014648129297_wp real ( wp ), parameter :: b1312 = - 0.0213010771328887351384307642875927384886634565429572466632092_wp real ( wp ), parameter :: b140 = 0.343511894290243001049432234735147943083353174980701426268122_wp real ( wp ), parameter :: b141 = 0 real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0.210451912023627385609097011999010655788807405225626700040882_wp real ( wp ), parameter :: b149 = 1.03427452057230411936482926828825709938667999698324740166559_wp real ( wp ), parameter :: b1410 = 0.00600303645864422487051240448206640574939078092406156945568306_wp real ( wp ), parameter :: b1411 = 0.855938125099619537578012106002407728915062652616416005816477_wp real ( wp ), parameter :: b1412 = - 0.977235005036766810872264852372525633013107656892839677696022_wp real ( wp ), parameter :: b1413 = - 0.660026980479294694616225013856327693720573981219974874776419_wp real ( wp ), parameter :: b150 = - 0.0143574001672168069538206399935076366657755954378399880691949_wp real ( wp ), parameter :: b151 = 0 real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = - 0.0366253270049039970293685796848974791733119081733552207318285_wp real ( wp ), parameter :: b159 = 0.0350254975636213681976849406979846524346789082471103574920148_wp real ( wp ), parameter :: b1510 = 0.0360946016362113508931786658758335239823689929864237671348749_wp real ( wp ), parameter :: b1511 = - 0.0265219967553681106351595946834601923649627012457464284442911_wp real ( wp ), parameter :: b1512 = 0.0445699011305698119638911537508839908104336323082226770910408_wp real ( wp ), parameter :: b1513 = 0.124343093331358243286225595741786448038973408895106741855721_wp real ( wp ), parameter :: b1514 = 0.00413829693239480694403512496204335960426192908674476033832967_wp real ( wp ), parameter :: b160 = 0.356032404425120290975609116398089176264106222379748802654822_wp real ( wp ), parameter :: b161 = 0 real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = - 0.450192758947562595966821779075956175110645100214763601190349_wp real ( wp ), parameter :: b169 = 0.430527907083710898626656292808782917793030154094709462877146_wp real ( wp ), parameter :: b1610 = 0.511973029011022237668556960394071692077125787030651386389972_wp real ( wp ), parameter :: b1611 = 0.908303638886404260390159124638110213997496214819904630546596_wp real ( wp ), parameter :: b1612 = - 1.23921093371933931757372469151534028854413889248605726186520_wp real ( wp ), parameter :: b1613 = - 0.649048661671761465141672348879062553905402831967191097656668_wp real ( wp ), parameter :: b1614 = 0.251708904586819292210480529948970541404887852931447491219418_wp real ( wp ), parameter :: b1615 = 0.779906470345586398810756795282334476023540593411550187024263_wp real ( wp ), parameter :: b170 = 0.0130935687406513066406881206418834980127470438213192487844956_wp real ( wp ), parameter :: b171 = 0 real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 0 real ( wp ), parameter :: b1710 = 0 real ( wp ), parameter :: b1711 = 0 real ( wp ), parameter :: b1712 = - 0.0000932053067985113945908461962767108237858631509684667142124826_wp real ( wp ), parameter :: b1713 = 0.0505374334262299359640090443138590726770942344716122381702746_wp real ( wp ), parameter :: b1714 = 8.04470341944487979109579109610197797641311868930865361048975e-7_wp real ( wp ), parameter :: b1715 = 0.000591726029494171190528755742777717259844340971924321528178248_wp real ( wp ), parameter :: b1716 = - 4.01614722154557337064691684906375587732264247950093804676867e-7_wp real ( wp ), parameter :: b180 = 0.0207926484466053012541944544000765652167255206144373407979758_wp real ( wp ), parameter :: b181 = 0 real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = 0 real ( wp ), parameter :: b189 = 0 real ( wp ), parameter :: b1810 = 0 real ( wp ), parameter :: b1811 = 0 real ( wp ), parameter :: b1812 = 0.000582695918800085915101902697837284108951406103029871570103075_wp real ( wp ), parameter :: b1813 = - 0.00801700732358815939083342186525852746640558465919633524655451_wp real ( wp ), parameter :: b1814 = 4.03847643847136940375170821743560570484117290330895506618968e-6_wp real ( wp ), parameter :: b1815 = 0.0854609998055506144225056114567535602510114622033622491802597_wp real ( wp ), parameter :: b1816 = - 2.04486480935804242706707569691004307904442837552677456232848e-6_wp real ( wp ), parameter :: b1817 = 0.105328578824431893399799402979093997354240904235172843146582_wp real ( wp ), parameter :: b190 = 1.40153449795736021415446247355771306718486452917597731683689_wp real ( wp ), parameter :: b191 = 0 real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = 0 real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0 real ( wp ), parameter :: b199 = 0 real ( wp ), parameter :: b1910 = 0 real ( wp ), parameter :: b1911 = 0 real ( wp ), parameter :: b1912 = - 0.230252000984221261616272410367415621261130298274455611733277_wp real ( wp ), parameter :: b1913 = - 7.21106840466912905659582237106874247165856493509961561958267_wp real ( wp ), parameter :: b1914 = 0.00372901560694836335236995327852132340217759566678662385552634_wp real ( wp ), parameter :: b1915 = - 4.71415495727125020678778179392224757011323373221820091641216_wp real ( wp ), parameter :: b1916 = - 0.00176367657545349242053841995032797673574903886695600132759652_wp real ( wp ), parameter :: b1917 = 7.64130548038698765563029310880237651185173367813936997648198_wp real ( wp ), parameter :: b1918 = 3.50602043659751834989896082949744710968212949893375368243588_wp real ( wp ), parameter :: b200 = 1 1.9514650694120686799372385830716401674473610826553517297976_wp real ( wp ), parameter :: b201 = 0 real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = 0 real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = 0 real ( wp ), parameter :: b2010 = 0 real ( wp ), parameter :: b2011 = 0 real ( wp ), parameter :: b2012 = 7.79480932108175968783516700231764388220284279598980948538579_wp real ( wp ), parameter :: b2013 = - 5 6.4501393867325792523560991120904281440468100061340556540132_wp real ( wp ), parameter :: b2014 = 0.0912376306930644901344530449290276645709607450403673704844997_wp real ( wp ), parameter :: b2015 = - 1 2.7336279925434886201945524309199275038162717529918963305155_wp real ( wp ), parameter :: b2016 = - 0.0396895921904719712313542810939736674712383070433147873009352_wp real ( wp ), parameter :: b2017 = 5 4.4392141883570886996225765155307791861438378423305337073797_wp real ( wp ), parameter :: b2018 = - 3.64411637921569236846406990361350645806721478409266709351203_wp real ( wp ), parameter :: b2019 = - 0.804503249910509910899030787958579499315694913210787878260459_wp real ( wp ), parameter :: b210 = - 14 8.809426507100488427838868268647625561930612082148597076690_wp real ( wp ), parameter :: b211 = 0 real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0 real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0 real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = 0 real ( wp ), parameter :: b2112 = - 9 1.7295278291256484357935662402321623495228729036354276506427_wp real ( wp ), parameter :: b2113 = 70 7.656144971598359834575719286335716154821128966649565194286_wp real ( wp ), parameter :: b2114 = - 1.10563611857482440905296961311590930801338308942637769555540_wp real ( wp ), parameter :: b2115 = 17 6.134591883811372587859898076055660406999516762301689616841_wp real ( wp ), parameter :: b2116 = 0.491384824214880662268898345164454557416884631402764792538746_wp real ( wp ), parameter :: b2117 = - 68 4.278000449814944358237535610895081956077167893600278300805_wp real ( wp ), parameter :: b2118 = 2 7.9910604998398258984224332124380407446002518400668657974589_wp real ( wp ), parameter :: b2119 = 1 3.1939710030282333443670964371153238435064159623744975073252_wp real ( wp ), parameter :: b2120 = 1.25128781283980445450114974148056006317268830077396406361417_wp real ( wp ), parameter :: b220 = - 9.67307946948196763644126118433219395839951408571877262880482_wp real ( wp ), parameter :: b221 = 0 real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = 0 real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = - 4.46990150858505531443846227701960360497830681408751431146712_wp real ( wp ), parameter :: b2213 = 4 5.5127128690952681968241950400052751178905907817398483534845_wp real ( wp ), parameter :: b2214 = - 0.0713085086183826912791492024438246129930559805352394367050813_wp real ( wp ), parameter :: b2215 = 1 1.2273614068412741582590624479939384207826800776794485051540_wp real ( wp ), parameter :: b2216 = 0.126244376717622724516237912909138809361786889819105426371393_wp real ( wp ), parameter :: b2217 = - 4 3.5439339549483313605810624907242107623814304467621407753424_wp real ( wp ), parameter :: b2218 = 0.787174307543058978398792994996550902064546091443233850464377_wp real ( wp ), parameter :: b2219 = 0.532264696744684215669300708603886690785395776821503851830821_wp real ( wp ), parameter :: b2220 = 0.422422733996325326010225127471388772575086538809603346825334_wp real ( wp ), parameter :: b2221 = 0.0859131249503067107308438031499859443441115056294154956487671_wp real ( wp ), parameter :: b230 = - 1 0.0664032447054702403396606900426891472202824757968765569183_wp real ( wp ), parameter :: b231 = 0 real ( wp ), parameter :: b232 = 0 real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = - 0.0366253270049039970293685796848974791733119081733552207318285_wp real ( wp ), parameter :: b239 = 0.0350254975636213681976849406979846524346789082471103574920148_wp real ( wp ), parameter :: b2310 = 0.0360946016362113508931786658758335239823689929864237671348749_wp real ( wp ), parameter :: b2311 = - 0.0265219967553681106351595946834601923649627012457464284442911_wp real ( wp ), parameter :: b2312 = - 6.27088972181464143590553149478871603839356122957396018530209_wp real ( wp ), parameter :: b2313 = 4 8.2079237442562989090702103008195063923492593141636117832993_wp real ( wp ), parameter :: b2314 = - 0.0694471689136165640882395180583732834557754169149088630301342_wp real ( wp ), parameter :: b2315 = 1 2.6810690204850295698341370913609807066108483811412127009785_wp real ( wp ), parameter :: b2316 = 0.0119671168968323754838161435501011294100927813964199613229864_wp real ( wp ), parameter :: b2317 = - 4 6.7249764992482408003358268242662695593201321659795608950429_wp real ( wp ), parameter :: b2318 = 1.33029613326626711314710039298216591399033511191227101321435_wp real ( wp ), parameter :: b2319 = 1.00766787503398298353438903619926657771162717793661719708370_wp real ( wp ), parameter :: b2320 = 0.0209512051933665091664122388475480702892770753864487241177616_wp real ( wp ), parameter :: b2321 = 0.0210134706331264177317735424331396407424412188443757490871603_wp real ( wp ), parameter :: b2322 = 0.00952196014417121794175101542454575907376360233658356240547761_wp real ( wp ), parameter :: b240 = - 40 9.478081677743708772589097409370357624424341606752069725341_wp real ( wp ), parameter :: b241 = 0 real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0.210451912023627385609097011999010655788807405225626700040882_wp real ( wp ), parameter :: b249 = 1.03427452057230411936482926828825709938667999698324740166559_wp real ( wp ), parameter :: b2410 = 0.00600303645864422487051240448206640574939078092406156945568306_wp real ( wp ), parameter :: b2411 = 0.855938125099619537578012106002407728915062652616416005816477_wp real ( wp ), parameter :: b2412 = - 25 0.516998547447860492777657729316130386584050420782075966990_wp real ( wp ), parameter :: b2413 = 194 6.42466652388427766053750328264758595829850895761428240231_wp real ( wp ), parameter :: b2414 = - 3.04503882102310365506105809086860882786950544097602101685174_wp real ( wp ), parameter :: b2415 = 49 0.626379528281713521208265299168083841598542274061671576230_wp real ( wp ), parameter :: b2416 = 1.56647589531270907115484067013597445739595615245966775329993_wp real ( wp ), parameter :: b2417 = - 188 1.97428994011173362217267377035870619215906638453056643641_wp real ( wp ), parameter :: b2418 = 7 5.2592224724847175278837713643303149821620618914245864351135_wp real ( wp ), parameter :: b2419 = 3 4.5734356980331067622434344736554689696728644793551014989002_wp real ( wp ), parameter :: b2420 = 3.21147679440968961435417361847073755169022966748891627882572_wp real ( wp ), parameter :: b2421 = - 0.460408041738414391307201404237058848867245095265382820823055_wp real ( wp ), parameter :: b2422 = - 0.0870718339841810522431884137957986245724252047388936572215438_wp real ( wp ), parameter :: b2423 = - 7.39351814158303067567016952195521063999185773249132944724553_wp real ( wp ), parameter :: b250 = 3.43347475853550878921093496257596781120623891072008459930197_wp real ( wp ), parameter :: b251 = 0 real ( wp ), parameter :: b252 = 0 real ( wp ), parameter :: b253 = 0 real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = 0 real ( wp ), parameter :: b257 = 0 real ( wp ), parameter :: b258 = 0.00249163204855817407538949148805995149459884653585417680098222_wp real ( wp ), parameter :: b259 = 0.0230138787854593149638399846373742768772087122638142234223658_wp real ( wp ), parameter :: b2510 = - 0.00322155956692977098724476092467120878189463604760620461043308_wp real ( wp ), parameter :: b2511 = 0.00988442549447664668946335414487885256040819982786014648129297_wp real ( wp ), parameter :: b2512 = 2.16252799377922507788307841904757354045759225335732707916530_wp real ( wp ), parameter :: b2513 = - 1 6.2699864546457421328065640660139489006987552040228852402716_wp real ( wp ), parameter :: b2514 = - 0.128534502120524552843583417470935010538029037542654506231743_wp real ( wp ), parameter :: b2515 = - 8.98915042666504253089307820833379330486511746063552853023189_wp real ( wp ), parameter :: b2516 = - 0.00348595363232025333387080201851013650192401767250513765000963_wp real ( wp ), parameter :: b2517 = 1 5.7936194113339807536235187388695574135853387025139738341334_wp real ( wp ), parameter :: b2518 = - 0.574403330914095065628165482017335820148383663195675408024658_wp real ( wp ), parameter :: b2519 = - 0.345602039021393296692722496608124982535237228827655306030152_wp real ( wp ), parameter :: b2520 = - 0.00662241490206585091731619991383757781133067992707418687587487_wp real ( wp ), parameter :: b2521 = - 0.00777788129242204164032546458607364309759347209626759111946150_wp real ( wp ), parameter :: b2522 = - 0.00356084192402274913338827232697437364675240818791706587952939_wp real ( wp ), parameter :: b2523 = 4.79282506449930799649797749629840189457296934139359048988332_wp real ( wp ), parameter :: b2524 = 0.153725464873068577844576387402512082757034273069877432944621_wp real ( wp ), parameter :: b260 = 3 2.3038520871985442326994734440031535091364975047784630088983_wp real ( wp ), parameter :: b261 = 0 real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = - 0.00317987696266205093901912847692712407988609169703103952205634_wp real ( wp ), parameter :: b266 = 0.806397714906192077260821711520379506393543111567419750119748_wp real ( wp ), parameter :: b267 = 0.0975983126412388979093522850684288851314672048003054550357187_wp real ( wp ), parameter :: b268 = 0.778575578158398909027512446452927238999763460594181964958853_wp real ( wp ), parameter :: b269 = 0.204890423831599428189499202098105603312029235081420653574829_wp real ( wp ), parameter :: b2610 = - 1.56261579627468188307070943950527825211462892236424360892806_wp real ( wp ), parameter :: b2611 = 0 real ( wp ), parameter :: b2612 = 1 6.3429891882310570648504243973927174708753353504154550405647_wp real ( wp ), parameter :: b2613 = - 15 4.544555293543621230730189631471036399316683669609116705323_wp real ( wp ), parameter :: b2614 = 1.56971088703334872692034283417621761466263593582497085955201_wp real ( wp ), parameter :: b2615 = 3.27685545087248131321429817269900731165522404974733504794135_wp real ( wp ), parameter :: b2616 = - 0.0503489245193653176348040727199783626534081095691632396802451_wp real ( wp ), parameter :: b2617 = 15 3.321151858041665070593767885914694011224363102594556731397_wp real ( wp ), parameter :: b2618 = 7.17568186327720495846766484814784143567826308034865369443637_wp real ( wp ), parameter :: b2619 = - 2.94036748675300481945917659896930989215320594380777597403592_wp real ( wp ), parameter :: b2620 = - 0.0665845946076803144470749676022628870281920493197256887985612_wp real ( wp ), parameter :: b2621 = - 0.0462346054990843661229248668562217261176966514016859284197145_wp real ( wp ), parameter :: b2622 = - 0.0204198733585679401539388228617269778848579774821581777675337_wp real ( wp ), parameter :: b2623 = - 5 3.3523106438735850515953441165998107974045090495791591218714_wp real ( wp ), parameter :: b2624 = - 1.35548714715078654978732186705996404017554501614191325114947_wp real ( wp ), parameter :: b2625 = - 1.57196275801232751882901735171459249177687219114442583461866_wp real ( wp ), parameter :: b270 = - 1 6.6451467486341512872031294403931758764560371130818978459405_wp real ( wp ), parameter :: b271 = 0 real ( wp ), parameter :: b272 = 0 real ( wp ), parameter :: b273 = 0 real ( wp ), parameter :: b274 = 0 real ( wp ), parameter :: b275 = 0.00592232780324503308042990005798046524738389560444257136834990_wp real ( wp ), parameter :: b276 = 0.470326159963841112217224303205894113455362530746108825010848_wp real ( wp ), parameter :: b277 = 0.299688863848679000853981837096192399136831121671781279184194_wp real ( wp ), parameter :: b278 = - 0.247656877593994914689992276329810825853958069263947095548189_wp real ( wp ), parameter :: b279 = 0.110895029771437682893999851839061714522445173600678718208625_wp real ( wp ), parameter :: b2710 = 0 real ( wp ), parameter :: b2711 = - 0.491719043846229147070666628704194097678081907210673044988866_wp real ( wp ), parameter :: b2712 = - 1 1.4743154427289496968389492564352536350842454130853175250727_wp real ( wp ), parameter :: b2713 = 8 0.2593166576230272541702485886484400152793366623589989106256_wp real ( wp ), parameter :: b2714 = - 0.384132303980042847625312526759029103746926841342088219165648_wp real ( wp ), parameter :: b2715 = 7.28147667468107583471326950926136115767612581862877764249646_wp real ( wp ), parameter :: b2716 = - 0.132699384612248379510571708176035274836827341616751884314074_wp real ( wp ), parameter :: b2717 = - 8 1.0799832525730726674679289752255240006070716633632990308935_wp real ( wp ), parameter :: b2718 = - 1.25037492835620639521768185656179119962253747492403205797494_wp real ( wp ), parameter :: b2719 = 2.59263594969543681023776379504377324994226447359296887778718_wp real ( wp ), parameter :: b2720 = - 0.301440298346404539830163997260526875264431537275641495291993_wp real ( wp ), parameter :: b2721 = 0.221384460789832337451706451572773791695246839057318414301020_wp real ( wp ), parameter :: b2722 = 0.0827577274771892931955989870974693152996276435429809890551210_wp real ( wp ), parameter :: b2723 = 1 8.9960662040611520464672450037243263998175161412237156872211_wp real ( wp ), parameter :: b2724 = 0.269231946409639685623468015128334167460051910348912845121977_wp real ( wp ), parameter :: b2725 = 1.62674827447066537462989364929628933988125029284183680279020_wp real ( wp ), parameter :: b2726 = 0.491719043846229147070666628704194097678081907210673044988866_wp real ( wp ), parameter :: b280 = 0.0838479812409052664616968791372814085980533139224911131069335_wp real ( wp ), parameter :: b281 = 0 real ( wp ), parameter :: b282 = 0 real ( wp ), parameter :: b283 = 0 real ( wp ), parameter :: b284 = 0 real ( wp ), parameter :: b285 = - 0.0117949367100973814319755056031295775367961960590736150777613_wp real ( wp ), parameter :: b286 = - 0.247299020568812652339473838743194598325992840353340132697498_wp real ( wp ), parameter :: b287 = 0.0978080858367729012259313014081291665503740655476733940756599_wp real ( wp ), parameter :: b288 = 0.217590689243420631360008651767860318344168120024782176879989_wp real ( wp ), parameter :: b289 = 0 real ( wp ), parameter :: b2810 = 0.137585606763325224865659632196787746647447222975084865975440_wp real ( wp ), parameter :: b2811 = 0.0439870229715046685058790092341545026046103890294261359042581_wp real ( wp ), parameter :: b2812 = 0 real ( wp ), parameter :: b2813 = - 0.513700813768193341957004456618630303738757363641964030086972_wp real ( wp ), parameter :: b2814 = 0.826355691151315508644211308399153458701423158616168576922372_wp real ( wp ), parameter :: b2815 = 2 5.7018139719811832625873882972519939511136556341960074626615_wp real ( wp ), parameter :: b2816 = 0 real ( wp ), parameter :: b2817 = 0 real ( wp ), parameter :: b2818 = 0 real ( wp ), parameter :: b2819 = 0 real ( wp ), parameter :: b2820 = 0 real ( wp ), parameter :: b2821 = 0 real ( wp ), parameter :: b2822 = 0 real ( wp ), parameter :: b2823 = - 2 5.7018139719811832625873882972519939511136556341960074626615_wp real ( wp ), parameter :: b2824 = - 0.826355691151315508644211308399153458701423158616168576922372_wp real ( wp ), parameter :: b2825 = 0.513700813768193341957004456618630303738757363641964030086972_wp real ( wp ), parameter :: b2826 = - 0.0439870229715046685058790092341545026046103890294261359042581_wp real ( wp ), parameter :: b2827 = - 0.137585606763325224865659632196787746647447222975084865975440_wp real ( wp ), parameter :: b290 = 0.124380526654094412881516420868799316268491466359671423163289_wp real ( wp ), parameter :: b291 = 0 real ( wp ), parameter :: b292 = 0 real ( wp ), parameter :: b293 = 0 real ( wp ), parameter :: b294 = 0.226120282197584301422238662979202901196752320742633143965145_wp real ( wp ), parameter :: b295 = 0.0137885887618080880607695837016477814530969417491493385363543_wp real ( wp ), parameter :: b296 = - 0.0672210133996684449749399507414305856950086341525382182856200_wp real ( wp ), parameter :: b297 = 0 real ( wp ), parameter :: b298 = 0 real ( wp ), parameter :: b299 = - 0.856238975085428354755349769879501772112121597411563802855067_wp real ( wp ), parameter :: b2910 = - 1.96337522866858908928262850028093813988180440518267404553576_wp real ( wp ), parameter :: b2911 = - 0.232332822724119401237246257308921847250108199230419994978218_wp real ( wp ), parameter :: b2912 = 0 real ( wp ), parameter :: b2913 = 4.30660719086453349461668936876562947772432562053478092626764_wp real ( wp ), parameter :: b2914 = - 2.92722963249465482659787911202390446687687394950633612630592_wp real ( wp ), parameter :: b2915 = - 8 2.3131666397858944454492334105458707735761966428138676971041_wp real ( wp ), parameter :: b2916 = 0 real ( wp ), parameter :: b2917 = 0 real ( wp ), parameter :: b2918 = 0 real ( wp ), parameter :: b2919 = 0 real ( wp ), parameter :: b2920 = 0 real ( wp ), parameter :: b2921 = 0 real ( wp ), parameter :: b2922 = 0 real ( wp ), parameter :: b2923 = 8 2.3131666397858944454492334105458707735761966428138676971041_wp real ( wp ), parameter :: b2924 = 2.92722963249465482659787911202390446687687394950633612630592_wp real ( wp ), parameter :: b2925 = - 4.30660719086453349461668936876562947772432562053478092626764_wp real ( wp ), parameter :: b2926 = 0.232332822724119401237246257308921847250108199230419994978218_wp real ( wp ), parameter :: b2927 = 1.96337522866858908928262850028093813988180440518267404553576_wp real ( wp ), parameter :: b2928 = 0.856238975085428354755349769879501772112121597411563802855067_wp real ( wp ), parameter :: b300 = 0.103484561636679776672993546511910344499744798201971316606663_wp real ( wp ), parameter :: b301 = 0 real ( wp ), parameter :: b302 = 0 real ( wp ), parameter :: b303 = 0.122068887306407222589644082868962077139592714834162134741275_wp real ( wp ), parameter :: b304 = 0.482574490331246622475134780125688112865919023850168049679402_wp real ( wp ), parameter :: b305 = - 0.0381409600015606999730886240005620205664113072478411477421970_wp real ( wp ), parameter :: b306 = 0 real ( wp ), parameter :: b307 = - 0.550499525310802324138388507020508177411414311000037561712836_wp real ( wp ), parameter :: b308 = 0 real ( wp ), parameter :: b309 = - 0.711915811585189227887648262043794387578291882406745570495765_wp real ( wp ), parameter :: b3010 = - 0.584129605671551340432988730158480872095335329645227595707052_wp real ( wp ), parameter :: b3011 = 0 real ( wp ), parameter :: b3012 = 0 real ( wp ), parameter :: b3013 = 2.11046308125864932128717300046622750300375054278936987850718_wp real ( wp ), parameter :: b3014 = - 0.0837494736739572135525742023001037992695260175335123517729291_wp real ( wp ), parameter :: b3015 = 5.10021499072320914075295969043344113107545060862804249161191_wp real ( wp ), parameter :: b3016 = 0 real ( wp ), parameter :: b3017 = 0 real ( wp ), parameter :: b3018 = 0 real ( wp ), parameter :: b3019 = 0 real ( wp ), parameter :: b3020 = 0 real ( wp ), parameter :: b3021 = 0 real ( wp ), parameter :: b3022 = 0 real ( wp ), parameter :: b3023 = - 5.10021499072320914075295969043344113107545060862804249161191_wp real ( wp ), parameter :: b3024 = 0.0837494736739572135525742023001037992695260175335123517729291_wp real ( wp ), parameter :: b3025 = - 2.11046308125864932128717300046622750300375054278936987850718_wp real ( wp ), parameter :: b3026 = 0 real ( wp ), parameter :: b3027 = 0.584129605671551340432988730158480872095335329645227595707052_wp real ( wp ), parameter :: b3028 = 0.711915811585189227887648262043794387578291882406745570495765_wp real ( wp ), parameter :: b3029 = 0.550499525310802324138388507020508177411414311000037561712836_wp real ( wp ), parameter :: b310 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b311 = 0 real ( wp ), parameter :: b312 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b313 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b314 = 0 real ( wp ), parameter :: b315 = 0 real ( wp ), parameter :: b316 = 0.109993425580724703919462404865068340845119058295846426463652_wp real ( wp ), parameter :: b317 = - 0.254297048076270161384068506997153122141835626976703920846242_wp real ( wp ), parameter :: b318 = 0 real ( wp ), parameter :: b319 = 0.865570777116694254343770343821098281832847401233011859346737_wp real ( wp ), parameter :: b3110 = 3.32416449114093083106799552786572018336860092936986407160200_wp real ( wp ), parameter :: b3111 = 0 real ( wp ), parameter :: b3112 = 0 real ( wp ), parameter :: b3113 = - 1 2.0102223315977933882352385148661841260301942633996815127277_wp real ( wp ), parameter :: b3114 = 0.476601466242493239430442776862061899602963782003580209476163_wp real ( wp ), parameter :: b3115 = - 2 9.0243011221036390525802623213654099596251221332470910692353_wp real ( wp ), parameter :: b3116 = 0 real ( wp ), parameter :: b3117 = 0 real ( wp ), parameter :: b3118 = 0 real ( wp ), parameter :: b3119 = 0 real ( wp ), parameter :: b3120 = 0 real ( wp ), parameter :: b3121 = 0 real ( wp ), parameter :: b3122 = 0 real ( wp ), parameter :: b3123 = 2 9.0243011221036390525802623213654099596251221332470910692353_wp real ( wp ), parameter :: b3124 = - 0.476601466242493239430442776862061899602963782003580209476163_wp real ( wp ), parameter :: b3125 = 1 2.0102223315977933882352385148661841260301942633996815127277_wp real ( wp ), parameter :: b3126 = 0 real ( wp ), parameter :: b3127 = - 3.32416449114093083106799552786572018336860092936986407160200_wp real ( wp ), parameter :: b3128 = - 0.865570777116694254343770343821098281832847401233011859346737_wp real ( wp ), parameter :: b3129 = 0.254297048076270161384068506997153122141835626976703920846242_wp real ( wp ), parameter :: b3130 = - 0.109993425580724703919462404865068340845119058295846426463652_wp real ( wp ), parameter :: b320 = - 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b321 = 1.38888888888888888888888888888888888888888888888888888888889_wp real ( wp ), parameter :: b322 = 0 real ( wp ), parameter :: b323 = 0 real ( wp ), parameter :: b324 = - 0.750000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b325 = 0 real ( wp ), parameter :: b326 = - 0.492529543718026304422682049114021320200214681580657784719074_wp real ( wp ), parameter :: b327 = 0 real ( wp ), parameter :: b328 = 0 real ( wp ), parameter :: b329 = 0 real ( wp ), parameter :: b3210 = 0 real ( wp ), parameter :: b3211 = 0 real ( wp ), parameter :: b3212 = 0 real ( wp ), parameter :: b3213 = 0 real ( wp ), parameter :: b3214 = 0 real ( wp ), parameter :: b3215 = 0 real ( wp ), parameter :: b3216 = 0 real ( wp ), parameter :: b3217 = 0 real ( wp ), parameter :: b3218 = 0 real ( wp ), parameter :: b3219 = 0 real ( wp ), parameter :: b3220 = 0 real ( wp ), parameter :: b3221 = 0 real ( wp ), parameter :: b3222 = 0 real ( wp ), parameter :: b3223 = 0 real ( wp ), parameter :: b3224 = 0 real ( wp ), parameter :: b3225 = 0 real ( wp ), parameter :: b3226 = 0 real ( wp ), parameter :: b3227 = 0 real ( wp ), parameter :: b3228 = 0 real ( wp ), parameter :: b3229 = 0 real ( wp ), parameter :: b3230 = 0.492529543718026304422682049114021320200214681580657784719074_wp real ( wp ), parameter :: b3231 = 0.750000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b330 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: b331 = 0 real ( wp ), parameter :: b332 = - 0.222222222222222222222222222222222222222222222222222222222222_wp real ( wp ), parameter :: b333 = 0 real ( wp ), parameter :: b334 = 0 real ( wp ), parameter :: b335 = 0 real ( wp ), parameter :: b336 = 0 real ( wp ), parameter :: b337 = 0 real ( wp ), parameter :: b338 = 0 real ( wp ), parameter :: b339 = 0 real ( wp ), parameter :: b3310 = 0 real ( wp ), parameter :: b3311 = 0 real ( wp ), parameter :: b3312 = 0 real ( wp ), parameter :: b3313 = 0 real ( wp ), parameter :: b3314 = 0 real ( wp ), parameter :: b3315 = 0 real ( wp ), parameter :: b3316 = 0 real ( wp ), parameter :: b3317 = 0 real ( wp ), parameter :: b3318 = 0 real ( wp ), parameter :: b3319 = 0 real ( wp ), parameter :: b3320 = 0 real ( wp ), parameter :: b3321 = 0 real ( wp ), parameter :: b3322 = 0 real ( wp ), parameter :: b3323 = 0 real ( wp ), parameter :: b3324 = 0 real ( wp ), parameter :: b3325 = 0 real ( wp ), parameter :: b3326 = 0 real ( wp ), parameter :: b3327 = 0 real ( wp ), parameter :: b3328 = 0 real ( wp ), parameter :: b3329 = 0 real ( wp ), parameter :: b3330 = 0 real ( wp ), parameter :: b3331 = 0 real ( wp ), parameter :: b3332 = 0.222222222222222222222222222222222222222222222222222222222222_wp real ( wp ), parameter :: b340 = 0.285835140388971558796088842163836414852927537894596466840753_wp real ( wp ), parameter :: b341 = 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b342 = 0.218750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b343 = 0 real ( wp ), parameter :: b344 = 0.164062500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b345 = 0 real ( wp ), parameter :: b346 = 0.218194354945556658327188241581352107093288824322187941141516_wp real ( wp ), parameter :: b347 = 0.180392898478697766863635221946775437719620053641849228562435_wp real ( wp ), parameter :: b348 = 0 real ( wp ), parameter :: b349 = 0.205713839404845018859120755122929542277570094982808905393991_wp real ( wp ), parameter :: b3410 = 0.242715791581770239970282927959446515762745971386670541948576_wp real ( wp ), parameter :: b3411 = 0.246465780813629305833609291181891407799228103869305705137021_wp real ( wp ), parameter :: b3412 = - 3.44991940790890824979834154601622662060370460614931644223924_wp real ( wp ), parameter :: b3413 = 0.228875562160036081760729060738458584294220372552740218459295_wp real ( wp ), parameter :: b3414 = 0.283290599702151415321527419056733335978436595493855789831434_wp real ( wp ), parameter :: b3415 = 3.21085125837766640960131490544236787005557320332238705967955_wp real ( wp ), parameter :: b3416 = - 0.223538777364845699920233756214162507964125230083674032084065_wp real ( wp ), parameter :: b3417 = - 0.707121157204419073518727286207487212130091231955206160635271_wp real ( wp ), parameter :: b3418 = 3.21123345150287080408174729202856500893260034443022374267639_wp real ( wp ), parameter :: b3419 = 1.40954348309669766030414474301123175769045945573548986335553_wp real ( wp ), parameter :: b3420 = - 0.151362053443742613121602276742518111090963026203676055891793_wp real ( wp ), parameter :: b3421 = 0.372350574527014276454724080214619984397121028202148298716575_wp real ( wp ), parameter :: b3422 = 0.252978746406361336722199907762141285915775728129414319261111_wp real ( wp ), parameter :: b3423 = - 3.21085125837766640960131490544236787005557320332238705967955_wp real ( wp ), parameter :: b3424 = - 0.283290599702151415321527419056733335978436595493855789831434_wp real ( wp ), parameter :: b3425 = - 0.228875562160036081760729060738458584294220372552740218459295_wp real ( wp ), parameter :: b3426 = - 0.246465780813629305833609291181891407799228103869305705137021_wp real ( wp ), parameter :: b3427 = - 0.242715791581770239970282927959446515762745971386670541948576_wp real ( wp ), parameter :: b3428 = - 0.205713839404845018859120755122929542277570094982808905393991_wp real ( wp ), parameter :: b3429 = - 0.180392898478697766863635221946775437719620053641849228562435_wp real ( wp ), parameter :: b3430 = - 0.218194354945556658327188241581352107093288824322187941141516_wp real ( wp ), parameter :: b3431 = - 0.164062500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b3432 = - 0.218750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b3433 = - 0.291666666666666666666666666666666666666666666666666666666667_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 ), & f17 => me % funcs (:, 18 ), & f18 => me % funcs (:, 19 ), & f19 => me % funcs (:, 20 ), & f20 => me % funcs (:, 21 ), & f21 => me % funcs (:, 22 ), & f22 => me % funcs (:, 23 ), & f23 => me % funcs (:, 24 ), & f24 => me % funcs (:, 25 ), & f25 => me % funcs (:, 26 ), & f26 => me % funcs (:, 27 ), & f27 => me % funcs (:, 28 ), & f28 => me % funcs (:, 29 ), & f29 => me % funcs (:, 30 ), & f30 => me % funcs (:, 31 ), & f31 => me % funcs (:, 32 ), & f32 => me % funcs (:, 33 ), & f33 => me % funcs (:, 34 ), & f34 => me % funcs (:, 35 )) call me % f ( t + a0 * h , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b50 * f0 + b51 * f1 + b52 * f2 + b53 * f3 + & b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b61 * f1 + b62 * f2 + b63 * f3 + & b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b71 * f1 + b72 * f2 + b73 * f3 + & b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b81 * f1 + b82 * f2 + b83 * f3 + & b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b91 * f1 + b92 * f2 + b93 * f3 + & b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b101 * f1 + b102 * f2 + b103 * f3 + & b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b111 * f1 + b112 * f2 + b113 * f3 + & b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b121 * f1 + b122 * f2 + b123 * f3 + & b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b131 * f1 + b132 * f2 + b133 * f3 + & b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b142 * f2 + b143 * f3 + & b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b151 * f1 + b152 * f2 + b153 * f3 + & b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b163 * f3 + & b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b170 * f0 + b171 * f1 + b172 * f2 + b173 * f3 + & b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + & b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + & b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b180 * f0 + b181 * f1 + b182 * f2 + b183 * f3 + & b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + & b1812 * f12 + b1813 * f13 + b1814 * f14 + b1815 * f15 + & b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b190 * f0 + b191 * f1 + b192 * f2 + b193 * f3 + & b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + & b1912 * f12 + b1913 * f13 + b1914 * f14 + b1915 * f15 + & b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b200 * f0 + b201 * f1 + b202 * f2 + b203 * f3 + & b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + & b2012 * f12 + b2013 * f13 + b2014 * f14 + b2015 * f15 + & b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b210 * f0 + b211 * f1 + b212 * f2 + b213 * f3 + & b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + & b2112 * f12 + b2113 * f13 + b2114 * f14 + b2115 * f15 + & b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b220 * f0 + b221 * f1 + b222 * f2 + b223 * f3 + & b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + & b2212 * f12 + b2213 * f13 + b2214 * f14 + b2215 * f15 + & b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b230 * f0 + b231 * f1 + b232 * f2 + b233 * f3 + & b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + & b2312 * f12 + b2313 * f13 + b2314 * f14 + b2315 * f15 + & b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b240 * f0 + b241 * f1 + b242 * f2 + b243 * f3 + & b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + & b2412 * f12 + b2413 * f13 + b2414 * f14 + b2415 * f15 + & b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + a25 * h , x + h * ( b250 * f0 + b251 * f1 + b252 * f2 + b253 * f3 + & b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + & b2512 * f12 + b2513 * f13 + b2514 * f14 + b2515 * f15 + & b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + & b2524 * f24 ), f25 ) call me % f ( t + a26 * h , x + h * ( b260 * f0 + b261 * f1 + b262 * f2 + b263 * f3 + & b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + & b2612 * f12 + b2613 * f13 + b2614 * f14 + b2615 * f15 + & b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + & b2624 * f24 + b2625 * f25 ), f26 ) call me % f ( t + a27 * h , x + h * ( b270 * f0 + b271 * f1 + b272 * f2 + b273 * f3 + & b274 * f4 + b275 * f5 + b276 * f6 + b277 * f7 + & b278 * f8 + b279 * f9 + b2710 * f10 + b2711 * f11 + & b2712 * f12 + b2713 * f13 + b2714 * f14 + b2715 * f15 + & b2716 * f16 + b2717 * f17 + b2718 * f18 + b2719 * f19 + & b2720 * f20 + b2721 * f21 + b2722 * f22 + b2723 * f23 + & b2724 * f24 + b2725 * f25 + b2726 * f26 ), f27 ) call me % f ( t + a28 * h , x + h * ( b280 * f0 + b281 * f1 + b282 * f2 + b283 * f3 + & b284 * f4 + b285 * f5 + b286 * f6 + b287 * f7 + & b288 * f8 + b289 * f9 + b2810 * f10 + b2811 * f11 + & b2812 * f12 + b2813 * f13 + b2814 * f14 + b2815 * f15 + & b2816 * f16 + b2817 * f17 + b2818 * f18 + b2819 * f19 + & b2820 * f20 + b2821 * f21 + b2822 * f22 + b2823 * f23 + & b2824 * f24 + b2825 * f25 + b2826 * f26 + b2827 * f27 ), f28 ) call me % f ( t + a29 * h , x + h * ( b290 * f0 + b291 * f1 + b292 * f2 + b293 * f3 + & b294 * f4 + b295 * f5 + b296 * f6 + b297 * f7 + & b298 * f8 + b299 * f9 + b2910 * f10 + b2911 * f11 + & b2912 * f12 + b2913 * f13 + b2914 * f14 + b2915 * f15 + & b2916 * f16 + b2917 * f17 + b2918 * f18 + b2919 * f19 + & b2920 * f20 + b2921 * f21 + b2922 * f22 + b2923 * f23 + & b2924 * f24 + b2925 * f25 + b2926 * f26 + b2927 * f27 + & b2928 * f28 ), f29 ) call me % f ( t + a30 * h , x + h * ( b300 * f0 + b301 * f1 + b302 * f2 + b303 * f3 + & b304 * f4 + b305 * f5 + b306 * f6 + b307 * f7 + & b308 * f8 + b309 * f9 + b3010 * f10 + b3011 * f11 + & b3012 * f12 + b3013 * f13 + b3014 * f14 + b3015 * f15 + & b3016 * f16 + b3017 * f17 + b3018 * f18 + b3019 * f19 + & b3020 * f20 + b3021 * f21 + b3022 * f22 + b3023 * f23 + & b3024 * f24 + b3025 * f25 + b3026 * f26 + b3027 * f27 + & b3028 * f28 + b3029 * f29 ), f30 ) call me % f ( t + a31 * h , x + h * ( b310 * f0 + b311 * f1 + b312 * f2 + b313 * f3 + & b314 * f4 + b315 * f5 + b316 * f6 + b317 * f7 + & b318 * f8 + b319 * f9 + b3110 * f10 + b3111 * f11 + & b3112 * f12 + b3113 * f13 + b3114 * f14 + b3115 * f15 + & b3116 * f16 + b3117 * f17 + b3118 * f18 + b3119 * f19 + & b3120 * f20 + b3121 * f21 + b3122 * f22 + b3123 * f23 + & b3124 * f24 + b3125 * f25 + b3126 * f26 + b3127 * f27 + & b3128 * f28 + b3129 * f29 + b3130 * f30 ), f31 ) call me % f ( t + a32 * h , x + h * ( b320 * f0 + b321 * f1 + b322 * f2 + b323 * f3 + & b324 * f4 + b325 * f5 + b326 * f6 + b327 * f7 + & b328 * f8 + b329 * f9 + b3210 * f10 + b3211 * f11 + & b3212 * f12 + b3213 * f13 + b3214 * f14 + b3215 * f15 + & b3216 * f16 + b3217 * f17 + b3218 * f18 + b3219 * f19 + & b3220 * f20 + b3221 * f21 + b3222 * f22 + b3223 * f23 + & b3224 * f24 + b3225 * f25 + b3226 * f26 + b3227 * f27 + & b3228 * f28 + b3229 * f29 + b3230 * f30 + b3231 * f31 ), f32 ) call me % f ( t + a33 * h , x + h * ( b330 * f0 + b331 * f1 + b332 * f2 + b333 * f3 + & b334 * f4 + b335 * f5 + b336 * f6 + b337 * f7 + & b338 * f8 + b339 * f9 + b3310 * f10 + b3311 * f11 + & b3312 * f12 + b3313 * f13 + b3314 * f14 + b3315 * f15 + & b3316 * f16 + b3317 * f17 + b3318 * f18 + b3319 * f19 + & b3320 * f20 + b3321 * f21 + b3322 * f22 + b3323 * f23 + & b3324 * f24 + b3325 * f25 + b3326 * f26 + b3327 * f27 + & b3328 * f28 + b3329 * f29 + b3330 * f30 + b3331 * f31 + & b3332 * f32 ), f33 ) call me % f ( t + h , x + h * ( b340 * f0 + b341 * f1 + b342 * f2 + b343 * f3 + & b344 * f4 + b345 * f5 + b346 * f6 + b347 * f7 + & b348 * f8 + b349 * f9 + b3410 * f10 + b3411 * f11 + & b3412 * f12 + b3413 * f13 + b3414 * f14 + b3415 * f15 + & b3416 * f16 + b3417 * f17 + b3418 * f18 + b3419 * f19 + & b3420 * f20 + b3421 * f21 + b3422 * f22 + b3423 * f23 + & b3424 * f24 + b3425 * f25 + b3426 * f26 + b3427 * f27 + & b3428 * f28 + b3429 * f29 + b3430 * f30 + b3431 * f31 + & b3432 * f32 + b3433 * f33 ), f34 ) xf = x + h * ( c0 * f0 + & c1 * f1 + & c2 * f2 + & c3 * f3 + & c4 * f4 + & c5 * f5 + & c6 * f6 + & c7 * f7 + & c8 * f8 + & c9 * f9 + & c10 * f10 + & c11 * f11 + & c12 * f12 + & c13 * f13 + & c14 * f14 + & c15 * f15 + & c16 * f16 + & c17 * f17 + & c18 * f18 + & c19 * f19 + & c20 * f20 + & c21 * f21 + & c22 * f22 + & c23 * f23 + & c24 * f24 + & c25 * f25 + & c26 * f26 + & c27 * f27 + & c28 * f28 + & c29 * f29 + & c30 * f30 + & c31 * f31 + & c32 * f32 + & c33 * f33 + & c34 * f34 ) xerr = ( 1.0_wp / 100 0.0_wp ) * h * ( f1 - f33 ) end associate end procedure rkf1412 !***************************************************************************************** !***************************************************************************************** !> ! A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. ! !### Reference ! * Hiroshi Ono, On the 25 stage 12th order explicit Runge-Kutta method, ! Transactions of the Japan Society for Industrial and applied Mathematics, ! Vol. 6, No. 3, (2006) pages 177 to 186. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK12/RKcoeff12h(9)_1.pdf) module procedure rko129 real ( wp ), parameter :: a2 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: a3 = . 4429824561403508771929824561403508771929824561403508771929824561403508771929824561404_wp real ( wp ), parameter :: a4 = . 6644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a5 = . 1069403994175161223216143124609943831911795298522987310172664863740378614520490950697_wp real ( wp ), parameter :: a6 = . 1644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a7 = . 5843251088534107402031930333817126269956458635703918722786647314949201741654571843251_wp real ( wp ), parameter :: a8 = . 638235823582358235823582358235823582358235823582358235823582358235823582358235823582 4e-1_wp real ( wp ), parameter :: a9 = . 2_wp real ( wp ), parameter :: a10 = . 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a11 = . 9446116054065563496847375720237340591364440847545279548637407620203329280139199114088_wp real ( wp ), parameter :: a12 = . 517958468042846103583561546018520744975699682842555186643768358860080707177531652329 9e-1_wp real ( wp ), parameter :: a13 = . 848880518607165350639838930162674302064148175640019542045933939835577399136547623689 3e-1_wp real ( wp ), parameter :: a14 = . 2655756032646428930981140590456168352972012641640776214486652703185222349414361456016_wp real ( wp ), parameter :: a15 = . 5_wp real ( wp ), parameter :: a16 = . 7344243967353571069018859409543831647027987358359223785513347296814777650585638543984_wp real ( wp ), parameter :: a17 = . 9151119481392834649360161069837325697935851824359980457954066060164422600863452376311_wp real ( wp ), parameter :: a18 = . 9446116054065563496847375720237340591364440847545279548637407620203329280139199114088_wp real ( wp ), parameter :: a19 = . 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a20 = . 2_wp real ( wp ), parameter :: a21 = . 5843251088534107402031930333817126269956458635703918722786647314949201741654571843251_wp real ( wp ), parameter :: a22 = . 1644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a23 = . 4429824561403508771929824561403508771929824561403508771929824561403508771929824561404_wp real ( wp ), parameter :: a24 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: a26 = . 4970267001007476028032930885363848318550815967070143979104342007017543082576391973337_wp real ( wp ), parameter :: a27 = . 8043478260869565217391304347826086956521739130434782608695652173913043478260869565217_wp real ( wp ), parameter :: a28 = . 8717948717948717948717948717948717948717948717948717948717948717948717948717948717949_wp real ( wp ), parameter :: b21 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: b31 = . 2175227402212137286104398734798923400326123258875071216675507357419304139407870179368_wp real ( wp ), parameter :: b32 = . 2254597159191371485825425826604585371603701302528437555254317203984204632521954382036_wp real ( wp ), parameter :: b41 = . 1661184210526315789473684210526315789473684210526315789473684210526315789473684210526_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 4983552631578947368421052631578947368421052631578947368421052631578947368421052631579_wp real ( wp ), parameter :: b51 = . 868116319391850886508062971348367434861757015968588067387847640565978467242743420384 0e-1_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = . 345698194816489700073969145264414902686690308557664993660770834466711552923005884794 3e-1_wp real ( wp ), parameter :: b54 = - . 144410520033179363365888992002838505636652026003265750875953611292311405645258354481 3e-1_wp real ( wp ), parameter :: b61 = . 385095150452495257524472652032440486089882384495048449013834354160100060557967490878 0e-1_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 988960436365138246281279890087054828228880214355390339282842353649005342442634557770 9e-4_wp real ( wp ), parameter :: b65 = . 1258652731216402762123982910182735616976625577395859318541619645591514091994326716669_wp real ( wp ), parameter :: b71 = . 5247404461891304721708365639844356354386624470737997647397329116437616959059854701778_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = . 761065142996594199093194619029637366053392213020890064309256066192065214626881542488 5e-1_wp real ( wp ), parameter :: b75 = - 2.135538596825204678401302463372339475781988628449683891486081018353295131152366999963_wp real ( wp ), parameter :: b76 = 2.119016745189825526524339470866652730733632823644186992594087231585247087949150559862_wp real ( wp ), parameter :: b81 = . 357212285662448455541265687141030945465725440295435052935699446623421246269969587909 9e-1_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = . 459620564150930516186348331167536088629302663269296108637431417541052894512993142903 1e-1_wp real ( wp ), parameter :: b86 = - . 180001695771321981237678151321526106635447258200512575934451574464465594713570707049 3e-1_wp real ( wp ), parameter :: b87 = . 140466954030124533364649124878265489865497821813965018490306853581503628884379981869 3e-3_wp real ( wp ), parameter :: b91 = . 188817680918410841368041970623750570428186401597341841315329936466352436434195573491 3e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 838119832974093938375846726868412810663829046917352897587294440924486336538798165765 1e-1_wp real ( wp ), parameter :: b97 = . 903158524143645065933962687778655672713424456919245602077150967097143544457382512132 8e-5_wp real ( wp ), parameter :: b98 = . 972972170255080855749517906239058753340713209039613336537167907512451512672560522492 4e-1_wp real ( wp ), parameter :: b101 = - . 408006770346984638700159900758509441664528517965669688200664569678127494169619133857 0e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = - . 6005539308646711394173617417282635784603029781694346062080009050806164919590318269156_wp real ( wp ), parameter :: b107 = . 158522265836790182309281028999566036555827711428336394628411304404714126967580974148 1e-2_wp real ( wp ), parameter :: b108 = . 3026658851734428583799288358366834830670493200050903757742452562250879940584583879948_wp real ( wp ), parameter :: b109 = . 6704368334008921764176894190107687125274815661799611686408713261126274393811928758984_wp real ( wp ), parameter :: b111 = 6.344326927733666873696263058980778771328558370914152084380122688263116113189631874466_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = 0 real ( wp ), parameter :: b117 = 1.975263319684766813850955500728188106557880392559127720135666889111189136253813975729_wp real ( wp ), parameter :: b118 = - 1 3.82822337504897849061527131653164721900473695395858210726164571154383357718661916508_wp real ( wp ), parameter :: b119 = 1 4.82423926991066347292103944504014293055447712090877566105421769783705551827529470930_wp real ( wp ), parameter :: b1110 = - 8.370994536873562320168249116193728530299734845668945403444620801647194262518201483006_wp real ( wp ), parameter :: b121 = - . 991078378147037573501842470699034248447825996342712119061634343225949328690350107075 0e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = - 1.046319958132641377892211373672215159710875883372049858922517534871447317958500644882_wp real ( wp ), parameter :: b127 = - . 466257880125602996782630170191220860572777682230191692805172265363409063662390261522 1e-3_wp real ( wp ), parameter :: b128 = . 4243518408197806737520879584209906999975132950474577957967837636354467847566731274758_wp real ( wp ), parameter :: b129 = . 8350767448298191909277817680995907515365477233544915021061336714983604939879298121048_wp real ( wp ), parameter :: b1210 = - . 620437956204379562043795620437956204379562043795620437956204379562043795620437956204 4e-1_wp real ( wp ), parameter :: b1211 = . 305110602593440122044241037376048817696414950419527078565980167810831426392067124332 6e-3_wp real ( wp ), parameter :: b131 = . 173163580589370368444882908973494207044556238211674542011409432672270520317477514033 2e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0 real ( wp ), parameter :: b139 = . 869002715988092581179509325633043022018471940490298501076223792730411650263088542591 6e-3_wp real ( wp ), parameter :: b1310 = - . 919804474615846035729014620282877081164234312055184321742077115596890340418258870833 8e-4_wp real ( wp ), parameter :: b1311 = . 183359477734992870613075409243907539524064526807491659006514472049348575819065298105 8e-6_wp real ( wp ), parameter :: b1312 = . 667944881737752552490183811799040102805176211690229124428914281206879159171099292448 0e-1_wp real ( wp ), parameter :: b141 = . 149770228578781725060313414237555152788137481529553294670165997164030370446933325672 2e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0 real ( wp ), parameter :: b149 = . 1299053198125687130806056561360945267563487713700848629960379786258472215118648828622_wp real ( wp ), parameter :: b1410 = . 444425209019342141588047761342888994172858701614389915613543241626514167914966543835 4e-2_wp real ( wp ), parameter :: b1411 = - . 218538033043408559748781885011582476866015532579236943928364536404481781571223990476 5e-5_wp real ( wp ), parameter :: b1412 = . 623577013802556601935174753143266851464739831043727717270587538024958043646831488528 3e-1_wp real ( wp ), parameter :: b1413 = . 538934925040773599876765963768613339986048346758465504718557894028750751588608281209 3e-1_wp real ( wp ), parameter :: b151 = . 1956886038861791180930007029621719896471785620210633245797118818081004119873004962774_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = 0 real ( wp ), parameter :: b159 = 1.132878041352190960246053936692850204846641933665191609652843227265803479941175715645_wp real ( wp ), parameter :: b1510 = . 9754686357770750130309903534180324613492470735016258589778436907188769670738143543989_wp real ( wp ), parameter :: b1511 = . 460763355539339187562505248981887613058458958756669526068004330369976456074483820651 2e-3_wp real ( wp ), parameter :: b1512 = - . 4833419929869440350491944569648386990066349467457051943375195864364996227787596872297_wp real ( wp ), parameter :: b1513 = . 2837255261146423361717978265203569959020643630988946562818139270625464117810614651744_wp real ( wp ), parameter :: b1514 = - 1.604879577498682731680210867877554840351555444499826924680761144749197624460666828087_wp real ( wp ), parameter :: b161 = - . 6628581660952109109950216641584960475848453023977418371554567406302394052049642993363_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 0 real ( wp ), parameter :: b169 = - 5.301219753823165631138506283750981613687493380976143446419698251739201243786272433269_wp real ( wp ), parameter :: b1610 = - 5.493744530005151771950832780438489668352801158207831962667055860430416893664761589330_wp real ( wp ), parameter :: b1611 = . 644810771634385165968511505341032216120419733224730692985978124484387611532001765354 2e-2_wp real ( wp ), parameter :: b1612 = 2.226911096857986220827171118161838780361655511952909244621862410327793805385281866476_wp real ( wp ), parameter :: b1613 = - . 8260094546883369994121948528168152647220748853112540011094140493170779782006783468229_wp real ( wp ), parameter :: b1614 = 9.736973734199539440165209948098457305642565726332220268712929325968631361580234056276_wp real ( wp ), parameter :: b1615 = 1.047923362573352907746375340805459350884588027111516805638308114257144242834404582751_wp real ( wp ), parameter :: b171 = 9.451896878619703179615895147719645120861585484250220485534769741441232402797149004402_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 7 4.07837676951819392708315469048815926453257791083353986411194358002277837032529121349_wp real ( wp ), parameter :: b1710 = 8 0.08971633421252928663933464653279322909492698803384552922422585968931770071180510457_wp real ( wp ), parameter :: b1711 = - . 1241702484260160323471778040612055855620194337087768444994146945534716737633295008233_wp real ( wp ), parameter :: b1712 = - 3 2.04108125365225923900659816438329678215226279318337501510105142207810131441066638158_wp real ( wp ), parameter :: b1713 = 1 5.51919421000708125838831543558938623465692911684926717234376165413330242668122537342_wp real ( wp ), parameter :: b1714 = - 13 6.4444237346563024309541869705527862321862115141467999073204884062451779712319267938_wp real ( wp ), parameter :: b1715 = - 1 1.36109896858298168444633695622136642878717316645309025294277498926997344146696251530_wp real ( wp ), parameter :: b1716 = 1.746701961099335199963616081872403749335232589961167014444435282876535760443759733215_wp real ( wp ), parameter :: b181 = 1.059086740089530572084686602455620391446019980075022020682291957643879144548290466243_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 1.975263319684766813850955500728188106557880392559127720135666889111189136253813975729_wp real ( wp ), parameter :: b188 = - 1 3.82822337504897849061527131653164721900473695395858210726164571154383357718661916508_wp real ( wp ), parameter :: b189 = - 2 6.72676722061492102175215840759265382960786498230207636418025793583833107088763635551_wp real ( wp ), parameter :: b1810 = - 5 3.49798986553787152824955918158085193982743760760492627590775850823540448031315562431_wp real ( wp ), parameter :: b1811 = . 717981248781296867525018164491874351631609958608174867014673299604378314397412860758 7e-1_wp real ( wp ), parameter :: b1812 = 1 8.05559723664965139501142471462605880255358278669785143935434349294122071206578011157_wp real ( wp ), parameter :: b1813 = - 8.765163819232982113792324392383185125858432915348234208512916467037776994687248464210_wp real ( wp ), parameter :: b1814 = 7 6.87522358555575651988028075659565616302805855797883225625477685501643635288672453023_wp real ( wp ), parameter :: b1815 = 6.541007260506904941709851688460080123863085658071943624909334991972860537373864701434_wp real ( wp ), parameter :: b1816 = - . 8461837296739539683436767973109554382501241857205608248520628152174372445350689400749_wp real ( wp ), parameter :: b1817 = . 309633481505235431480265881082365890732523584453131875405006832470925810554333893030 4e-1_wp real ( wp ), parameter :: b191 = - . 977667326004004797671002646962413401446971414164181625318515395837139033495436620610 2e-1_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = - . 6005539308646711394173617417282635784603029781694346062080009050806164919590318269156_wp real ( wp ), parameter :: b197 = . 158522265836790182309281028999566036555827711428336394628411304404714126967580974148 1e-2_wp real ( wp ), parameter :: b198 = . 3026658851734428583799288358366834830670493200050903757742452562250879940584583879948_wp real ( wp ), parameter :: b199 = . 4285248952296136656501504776128834912424841890282487604085652387338305228046948965999_wp real ( wp ), parameter :: b1910 = - . 249493604995642347933171306282182076062638876366185321593642694047474826979191805182 8e-1_wp real ( wp ), parameter :: b1911 = . 201134214987470595063815521774031055513357176867796521793240788543417887235646988879 2e-1_wp real ( wp ), parameter :: b1912 = . 1265809640150575117740069284741749647793461966567090378701137188708013785394651655531_wp real ( wp ), parameter :: b1913 = - . 762550551102193746804436016013344856167480088934055032012054984622078305180050886379 4e-2_wp real ( wp ), parameter :: b1914 = . 2257683215130023640661938534278959810874704491725768321513002364066193853427895981087_wp real ( wp ), parameter :: b1915 = - . 274549248916770848387922618390602486512476729057886427743348622088376076376601754332 1e-1_wp real ( wp ), parameter :: b1916 = . 778376126062793733870554495237063730343726544219823124634854020279442244198684449501 0e-2_wp real ( wp ), parameter :: b1917 = . 168083047626617544413800091016034342342170737856338468723409187958281275132158909532 2e-4_wp real ( wp ), parameter :: b1918 = - . 213554919529537506749522903952587700733958178287380600960480637988488592788599301466 7e-1_wp real ( wp ), parameter :: b201 = . 491872277777421463545469480609547133456447111634637425892020046747560664297566363316 9e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = . 838119832974093938375846726868412810663829046917352897587294440924486336538798165765 1e-1_wp real ( wp ), parameter :: b207 = . 903158524143645065933962687778655672713424456919245602077150967097143544457382512132 8e-5_wp real ( wp ), parameter :: b208 = . 972972170255080855749517906239058753340713209039613336537167907512451512672560522492 4e-1_wp real ( wp ), parameter :: b209 = - . 778070001033292291108309056052095676262776867183891275550117932294589269228927201034 5e-1_wp real ( wp ), parameter :: b2010 = . 2322816011687352870985186646759446719321113455516507860765563208248738749278233611786_wp real ( wp ), parameter :: b2011 = - . 106971352297168569854032832985203844594754477080796496451908806986137557552489055223 0e-1_wp real ( wp ), parameter :: b2012 = - . 1273357855008010164642613326804825893357151796749893640146110897003842493364412495521_wp real ( wp ), parameter :: b2013 = . 1195596306045770335798408097988199315656849089154404333183111529360783290389646594900_wp real ( wp ), parameter :: b2014 = . 1268882175226586102719033232628398791540785498489425981873111782477341389728096676737_wp real ( wp ), parameter :: b2015 = . 204498977505112474437627811860940695296523517382413087934560327198364008179959100204 5e-1_wp real ( wp ), parameter :: b2016 = - . 390985650698424216469115792965503899585893388833492127526005679455728470438544558237 7e-2_wp real ( wp ), parameter :: b2017 = - . 911741011933284210912595303218884069363311931745440171502706220734854263913980365965 1e-5_wp real ( wp ), parameter :: b2018 = . 112609315107745615458562341819751453666234979373757439862630105892338294685204505647 5e-1_wp real ( wp ), parameter :: b2019 = - . 3209868434922071245903287586373535845929558438862699119277778588606558307508436673461_wp real ( wp ), parameter :: b211 = . 5247404461891304721708365639844356354386624470737997647397329116437616959059854701778_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = . 761065142996594199093194619029637366053392213020890064309256066192065214626881542488 5e-1_wp real ( wp ), parameter :: b215 = - 2.135538596825204678401302463372339475781988628449683891486081018353295131152366999963_wp real ( wp ), parameter :: b216 = 2.119016745189825526524339470866652730733632823644186992594087231585247087949150559862_wp real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = - . 6068669292751351984511141135476525247489731841233590933089036540462466843434512014723_wp real ( wp ), parameter :: b2110 = - . 6975023816048118989159659127206041759560640169551283418432821453966450135301718130674_wp real ( wp ), parameter :: b2111 = - . 253955213538338723195880150812537639228321491379197211593757099910733429643646065736 8e-1_wp real ( wp ), parameter :: b2112 = 0 real ( wp ), parameter :: b2113 = 0 real ( wp ), parameter :: b2114 = 0 real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = 0 real ( wp ), parameter :: b2118 = . 253955213538338723195880150812537639228321491379197211593757099910733429643646065736 8e-1_wp real ( wp ), parameter :: b2119 = . 6975023816048118989159659127206041759560640169551283418432821453966450135301718130674_wp real ( wp ), parameter :: b2120 = . 6068669292751351984511141135476525247489731841233590933089036540462466843434512014723_wp real ( wp ), parameter :: b221 = . 385095150452495257524472652032440486089882384495048449013834354160100060557967490878 0e-1_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = . 988960436365138246281279890087054828228880214355390339282842353649005342442634557770 9e-4_wp real ( wp ), parameter :: b225 = . 1258652731216402762123982910182735616976625577395859318541619645591514091994326716669_wp real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = . 1148546657824708136802241649776446744025406100582655444423341878411637297467351936831_wp real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = - . 1299246462925958527077352114079744607750386324042347411360003531859939834460301561195_wp real ( wp ), parameter :: b2210 = - . 3664591598580916638621456622089859363144583004356560608229075984337239720284817960193_wp real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = 0 real ( wp ), parameter :: b2213 = 0 real ( wp ), parameter :: b2214 = 0 real ( wp ), parameter :: b2215 = 0 real ( wp ), parameter :: b2216 = 0 real ( wp ), parameter :: b2217 = 0 real ( wp ), parameter :: b2218 = 0 real ( wp ), parameter :: b2219 = . 3664591598580916638621456622089859363144583004356560608229075984337239720284817960193_wp real ( wp ), parameter :: b2220 = . 1299246462925958527077352114079744607750386324042347411360003531859939834460301561195_wp real ( wp ), parameter :: b2221 = - . 1148546657824708136802241649776446744025406100582655444423341878411637297467351936831_wp real ( wp ), parameter :: b231 = . 2175227402212137286104398734798923400326123258875071216675507357419304139407870179368_wp real ( wp ), parameter :: b232 = . 2254597159191371485825425826604585371603701302528437555254317203984204632521954382036_wp real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = - . 7003676470588235294117647058823529411764705882352941176470588235294117647058823529412_wp real ( wp ), parameter :: b237 = - . 3841432262252079340469853296205751191707035527677198880717241749265840367609120672261_wp real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = 0 real ( wp ), parameter :: b2312 = 0 real ( wp ), parameter :: b2313 = 0 real ( wp ), parameter :: b2314 = 0 real ( wp ), parameter :: b2315 = 0 real ( wp ), parameter :: b2316 = 0 real ( wp ), parameter :: b2317 = 0 real ( wp ), parameter :: b2318 = 0 real ( wp ), parameter :: b2319 = 0 real ( wp ), parameter :: b2320 = 0 real ( wp ), parameter :: b2321 = . 3841432262252079340469853296205751191707035527677198880717241749265840367609120672261_wp real ( wp ), parameter :: b2322 = . 7003676470588235294117647058823529411764705882352941176470588235294117647058823529412_wp real ( wp ), parameter :: b241 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = - . 4244806610219170956648818689597945762515945523075081224120777274585003570971510665439_wp real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0 real ( wp ), parameter :: b249 = 0 real ( wp ), parameter :: b2410 = 0 real ( wp ), parameter :: b2411 = 0 real ( wp ), parameter :: b2412 = 0 real ( wp ), parameter :: b2413 = 0 real ( wp ), parameter :: b2414 = 0 real ( wp ), parameter :: b2415 = 0 real ( wp ), parameter :: b2416 = 0 real ( wp ), parameter :: b2417 = 0 real ( wp ), parameter :: b2418 = 0 real ( wp ), parameter :: b2419 = 0 real ( wp ), parameter :: b2420 = 0 real ( wp ), parameter :: b2421 = 0 real ( wp ), parameter :: b2422 = 0 real ( wp ), parameter :: b2423 = . 4244806610219170956648818689597945762515945523075081224120777274585003570971510665439_wp real ( wp ), parameter :: b251 = 1 4.54990971513478580914495526598245283940024810265087163382498896386800769812364397026_wp real ( wp ), parameter :: b252 = - 2.609444444444444444444444444444444444444444444444444444444444444444444444444444444444_wp real ( wp ), parameter :: b253 = - 2.016004609236637754870351028563643794559738431497207211298306162299623087053267335725_wp real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = - 1.666875_wp real ( wp ), parameter :: b257 = - 1.840010137609049715480551028603992780751854184812582730319893278211480604766702319850_wp real ( wp ), parameter :: b258 = 0 real ( wp ), parameter :: b259 = 11 2.8850026879393650927243496060343039004107661597559344830054269802155904451112935844_wp real ( wp ), parameter :: b2510 = 12 3.3942086822776167534198661922997568027612066045886506351026838994566451157760161079_wp real ( wp ), parameter :: b2511 = - . 7912126656078716671206667350992937018785263673658058027818457299775466324638082312137_wp real ( wp ), parameter :: b2512 = - 5 0.05149873558555185701853277950418028083920384013973228797374663569746882026502756132_wp real ( wp ), parameter :: b2513 = 2 4.88778291494286023489265916235844707524170235927746532159915897878512972222657954044_wp real ( wp ), parameter :: b2514 = - 21 2.1164197057320847511194729602871445996396409264694299135694995667783941778631290781_wp real ( wp ), parameter :: b2515 = - 1 7.89082255740024165397920079197116480379826062999613139163493416384514698556677051724_wp real ( wp ), parameter :: b2516 = 2.509716434086569985363077956674238286724267256774032757480361264001771307725305753519_wp real ( wp ), parameter :: b2517 = . 1162475886937088360535666476065014131326443901611275096836079807311057386735832665899_wp real ( wp ), parameter :: b2518 = . 5840328281597421751021178306186155103094570763962374837158281176580253234011237044692_wp real ( wp ), parameter :: b2519 = 1.584417806712708397483834073813399023446091584920600008797782958694409008929749703075_wp real ( wp ), parameter :: b2520 = 1.338635006378392645053446531474068534729248229446179562750186952887872256191439757181_wp real ( wp ), parameter :: b2521 = 1.840010137609049715480551028603992780751854184812582730319893278211480604766702319850_wp real ( wp ), parameter :: b2522 = 1.666875_wp real ( wp ), parameter :: b2523 = 2.016004609236637754870351028563643794559738431497207211298306162299623087053267335725_wp real ( wp ), parameter :: b2524 = 2.609444444444444444444444444444444444444444444444444444444444444444444444444444444444_wp real ( wp ), parameter :: b261 = . 4213659219087082450668941175898637044576077571412870755532166081975824639155816025423_wp real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = 0 real ( wp ), parameter :: b266 = 2.360375290413766425107807321597798068298832670876354152068674897991709951684675057597_wp real ( wp ), parameter :: b267 = . 788792681183690214427082447723136543744296285638349185134971336108654256114493596476 0e-1_wp real ( wp ), parameter :: b268 = - 1.881850641776530466652474803895333308262409829541779704822719782535259533895036456964_wp real ( wp ), parameter :: b269 = - 1.304700734906095391371228323883517431348033016096248869612640797091741378769699510853_wp real ( wp ), parameter :: b2610 = . 1146971532060496506611311517441641422873299688900135018999537656144573134542692746612_wp real ( wp ), parameter :: b2611 = - . 522361318294207790717060967691033848091507190600018635121504737374045262350743674601 8e-2_wp real ( wp ), parameter :: b2612 = . 7134840563194221964556259902880063405282394887795535106616674222878805188799073074497_wp real ( wp ), parameter :: b2613 = 0 real ( wp ), parameter :: b2614 = 0 real ( wp ), parameter :: b2615 = 0 real ( wp ), parameter :: b2616 = 0 real ( wp ), parameter :: b2617 = 0 real ( wp ), parameter :: b2618 = 0 real ( wp ), parameter :: b2619 = 0 real ( wp ), parameter :: b2620 = 0 real ( wp ), parameter :: b2621 = 0 real ( wp ), parameter :: b2622 = 0 real ( wp ), parameter :: b2623 = 0 real ( wp ), parameter :: b2624 = 0 real ( wp ), parameter :: b2625 = 0 real ( wp ), parameter :: b271 = - 1.016867684065179179311540011641152067739527559831057381007428484343486238202737995538_wp real ( wp ), parameter :: b272 = 0 real ( wp ), parameter :: b273 = 0 real ( wp ), parameter :: b274 = 0 real ( wp ), parameter :: b275 = 0 real ( wp ), parameter :: b276 = - 7.712044352285817603610736737545203003182107799250377304475316992902646516184627861475_wp real ( wp ), parameter :: b277 = - . 4034008409374858753410643280039779311650023076266296210030337872976327092081717454860_wp real ( wp ), parameter :: b278 = 6.739165476490825275476530741799137001781411805688541615342712456896969009075069743117_wp real ( wp ), parameter :: b279 = 6.014994643407224294180918860565568523540180411761624603152605084567461778121724411633_wp real ( wp ), parameter :: b2710 = - 1.138427387973993086846707441740657423236451007119331997503516596250482644801941463866_wp real ( wp ), parameter :: b2711 = . 500927197318159956344943136218839768557977025174388325193023591680554353918680331124 5e-1_wp real ( wp ), parameter :: b2712 = - 3.113250932564715585587456369457050044282973515833171733791753110672694235302567710668_wp real ( wp ), parameter :: b2713 = 0 real ( wp ), parameter :: b2714 = 0 real ( wp ), parameter :: b2715 = 0 real ( wp ), parameter :: b2716 = 0 real ( wp ), parameter :: b2717 = 0 real ( wp ), parameter :: b2718 = 0 real ( wp ), parameter :: b2719 = 0 real ( wp ), parameter :: b2720 = 0 real ( wp ), parameter :: b2721 = 0 real ( wp ), parameter :: b2722 = 0 real ( wp ), parameter :: b2723 = 0 real ( wp ), parameter :: b2724 = 0 real ( wp ), parameter :: b2725 = 0 real ( wp ), parameter :: b2726 = 1.384086184284282287144691407184059663080846182736441247635994288225760468937471545692_wp real ( wp ), parameter :: b281 = 1.131093475949031458408970675798323789793651098141584053672723684523337489654810813567_wp real ( wp ), parameter :: b282 = 0 real ( wp ), parameter :: b283 = 0 real ( wp ), parameter :: b284 = 0 real ( wp ), parameter :: b285 = 0 real ( wp ), parameter :: b286 = - 1 1.30475611955440577592346561419842170756276153921836803995513790246783417109406727002_wp real ( wp ), parameter :: b287 = . 867350890852937203789454427719536449937527749123110638319872985808628712709248973373 8e-1_wp real ( wp ), parameter :: b288 = 4.971317844154333915807514558966554931901059536397301577948574837963960265600948244094_wp real ( wp ), parameter :: b289 = 1 4.86493772010299652718002500847699984298963300991290479767277341466986550270499895786_wp real ( wp ), parameter :: b2810 = - 5.526130551905351405702373768620234518347747212552226033118137855980983127699224086148_wp real ( wp ), parameter :: b2811 = . 1017790491986200061558195486579246543940163889995857946318495764475820398967567810759_wp real ( wp ), parameter :: b2812 = - 5.412708567655345677389304794550103449135846140313886894023804835964789906470796078495_wp real ( wp ), parameter :: b2813 = 0 real ( wp ), parameter :: b2814 = 0 real ( wp ), parameter :: b2815 = 0 real ( wp ), parameter :: b2816 = 0 real ( wp ), parameter :: b2817 = 0 real ( wp ), parameter :: b2818 = 0 real ( wp ), parameter :: b2819 = 0 real ( wp ), parameter :: b2820 = 0 real ( wp ), parameter :: b2821 = 0 real ( wp ), parameter :: b2822 = 0 real ( wp ), parameter :: b2823 = 0 real ( wp ), parameter :: b2824 = 0 real ( wp ), parameter :: b2825 = 0 real ( wp ), parameter :: b2826 = 2.119905903216124397337756706998226742489167533804374626293399155463227287948398852330_wp real ( wp ), parameter :: b2827 = - . 1603789707964253713820928925063521366431305782887091520824325014403564569409562398070_wp real ( wp ), parameter :: b291 = 4 6.12864603958015905056850990838704062569763496465412763519385202873225169326091596022_wp real ( wp ), parameter :: b292 = 0 real ( wp ), parameter :: b293 = 0 real ( wp ), parameter :: b294 = 0 real ( wp ), parameter :: b295 = 0 real ( wp ), parameter :: b296 = 2 7.91300163119399908845158457840426795358131126287389180101909720743727165524743997096_wp real ( wp ), parameter :: b297 = 1 6.11362689862451240990975288339484000039234961533373225370151713993919933068137837655_wp real ( wp ), parameter :: b298 = - 12 5.4696763444318726329250646477825268481685879278990572088898486327607587168793188547_wp real ( wp ), parameter :: b299 = 7 6.57182020120529497684089567511627659347626021577320126137924234653281598557298427556_wp real ( wp ), parameter :: b2910 = - 4 8.97805558723490361747755876313897556229903489002597907918723603724236906416246304792_wp real ( wp ), parameter :: b2911 = - 1.242830487244052672528847080627776989497284066852925470069357906835696725179561610962_wp real ( wp ), parameter :: b2912 = 1 8.85807213383620068645464308722546866214730809725606975205204214283143331463602851729_wp real ( wp ), parameter :: b2913 = 0 real ( wp ), parameter :: b2914 = 0 real ( wp ), parameter :: b2915 = 0 real ( wp ), parameter :: b2916 = 0 real ( wp ), parameter :: b2917 = 0 real ( wp ), parameter :: b2918 = 0 real ( wp ), parameter :: b2919 = 0 real ( wp ), parameter :: b2920 = 0 real ( wp ), parameter :: b2921 = 0 real ( wp ), parameter :: b2922 = 0 real ( wp ), parameter :: b2923 = 0 real ( wp ), parameter :: b2924 = 0 real ( wp ), parameter :: b2925 = 0 real ( wp ), parameter :: b2926 = - 8.871982194511738170929283011936752038683182063824370821380217475185779921363890310462_wp real ( wp ), parameter :: b2927 = - 2.069534982695615656321598541301254038890059866116256078922522295738656144906973495868_wp real ( wp ), parameter :: b2928 = 2.046912691678016537956965912259391642243284658827565955103431482290288593093460219351_wp real ( wp ), parameter :: c1 = . 238095238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: c2 = - . 11_wp real ( wp ), parameter :: c3 = - . 17_wp real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = - . 19_wp real ( wp ), parameter :: c7 = - . 21_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = - . 23_wp real ( wp ), parameter :: c10 = - . 27_wp real ( wp ), parameter :: c11 = - . 29_wp real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = . 1384130236807829740053502031450331467488136400899412345912671194817223119377730668077_wp real ( wp ), parameter :: c14 = . 2158726906049313117089355111406811389654720741957730511230185948039919737765126474781_wp real ( wp ), parameter :: c15 = . 2438095238095238095238095238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: c16 = . 2158726906049313117089355111406811389654720741957730511230185948039919737765126474781_wp real ( wp ), parameter :: c17 = . 1384130236807829740053502031450331467488136400899412345912671194817223119377730668077_wp real ( wp ), parameter :: c18 = . 29_wp real ( wp ), parameter :: c19 = . 27_wp real ( wp ), parameter :: c20 = . 23_wp real ( wp ), parameter :: c21 = . 21_wp real ( wp ), parameter :: c22 = . 19_wp real ( wp ), parameter :: c23 = . 17_wp real ( wp ), parameter :: c24 = . 11_wp real ( wp ), parameter :: c25 = . 238095238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: c26 = 0 real ( wp ), parameter :: c27 = 0 real ( wp ), parameter :: c28 = 0 real ( wp ), parameter :: c29 = 0 real ( wp ), parameter :: d1 = . 135726736642203669162450857037503992121396140519738354099072927158560857574436722142 2e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = . 1957242608025905233613155193355413222756712243739956539857744660017249157522413539338_wp real ( wp ), parameter :: d10 = . 618886634743560866161606023838034532174057918569826292507244103081046113011822462665 0e-1_wp real ( wp ), parameter :: d11 = . 2356461254963383884566009189531765712282459575681722654363888116993755654359289982043_wp real ( wp ), parameter :: d12 = . 935698127765694817165912535512682288787837057513383327091867540084098892984771252818 9e-1_wp real ( wp ), parameter :: d13 = 0 real ( wp ), parameter :: d14 = 0 real ( wp ), parameter :: d15 = 0 real ( wp ), parameter :: d16 = 0 real ( wp ), parameter :: d17 = 0 real ( wp ), parameter :: d18 = 0 real ( wp ), parameter :: d19 = 0 real ( wp ), parameter :: d20 = 0 real ( wp ), parameter :: d21 = 0 real ( wp ), parameter :: d22 = 0 real ( wp ), parameter :: d23 = 0 real ( wp ), parameter :: d24 = 0 real ( wp ), parameter :: d25 = 0 real ( wp ), parameter :: d26 = . 2788382624223597882496809755901865993371492355322230983832374605891024297949723722505_wp real ( wp ), parameter :: d27 = . 4265887719284871852244002213010235951116369449606049493109912099005098392090245967637_wp real ( wp ), parameter :: d28 = - . 2878025166474501962999477241233861487151201542084751225511851437798538088192303308430_wp real ( wp ), parameter :: d29 = - . 180260539174716242410468526953640205459123198868156419350252614432295277300400340720 3e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 real ( wp ), parameter :: e22 = c22 - d22 real ( wp ), parameter :: e23 = c23 - d23 real ( wp ), parameter :: e24 = c24 - d24 real ( wp ), parameter :: e25 = c25 - d25 real ( wp ), parameter :: e26 = c26 - d26 real ( wp ), parameter :: e27 = c27 - d27 real ( wp ), parameter :: e28 = c28 - d28 real ( wp ), parameter :: e29 = c29 - d29 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 ), & f22 => me % funcs (:, 22 ), & f23 => me % funcs (:, 23 ), & f24 => me % funcs (:, 24 ), & f25 => me % funcs (:, 25 ), & f26 => me % funcs (:, 26 ), & f27 => me % funcs (:, 27 ), & f28 => me % funcs (:, 28 ), & f29 => me % funcs (:, 29 )) call me % f ( t * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b221 * f1 + b222 * f2 + b223 * f3 + b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + b2212 * f12 + b2213 * f13 + & b2214 * f14 + b2215 * f15 + b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b231 * f1 + b232 * f2 + b233 * f3 + b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + b2312 * f12 + b2313 * f13 + & b2314 * f14 + b2315 * f15 + b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b241 * f1 + b242 * f2 + b243 * f3 + b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + b2412 * f12 + b2413 * f13 + & b2414 * f14 + b2415 * f15 + b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + h , x + h * ( b251 * f1 + b252 * f2 + b253 * f3 + b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + b2512 * f12 + b2513 * f13 + & b2514 * f14 + b2515 * f15 + b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + b2524 * f24 ), f25 ) call me % f ( t + a26 * h , x + h * ( b261 * f1 + b262 * f2 + b263 * f3 + b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + b2612 * f12 + b2613 * f13 + & b2614 * f14 + b2615 * f15 + b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + b2624 * f24 + b2625 * f25 ), f26 ) call me % f ( t + a27 * h , x + h * ( b271 * f1 + b272 * f2 + b273 * f3 + b274 * f4 + b275 * f5 + b276 * f6 + b277 * f7 + & b278 * f8 + b279 * f9 + b2710 * f10 + b2711 * f11 + b2712 * f12 + b2713 * f13 + & b2714 * f14 + b2715 * f15 + b2716 * f16 + b2717 * f17 + b2718 * f18 + b2719 * f19 + & b2720 * f20 + b2721 * f21 + b2722 * f22 + b2723 * f23 + b2724 * f24 + b2725 * f25 + & b2726 * f26 ), f27 ) call me % f ( t + a28 * h , x + h * ( b281 * f1 + b282 * f2 + b283 * f3 + b284 * f4 + b285 * f5 + b286 * f6 + b287 * f7 + & b288 * f8 + b289 * f9 + b2810 * f10 + b2811 * f11 + b2812 * f12 + b2813 * f13 + & b2814 * f14 + b2815 * f15 + b2816 * f16 + b2817 * f17 + b2818 * f18 + b2819 * f19 + & b2820 * f20 + b2821 * f21 + b2822 * f22 + b2823 * f23 + b2824 * f24 + b2825 * f25 + & b2826 * f26 + b2827 * f27 ), f28 ) call me % f ( t + h , x + h * ( b291 * f1 + b292 * f2 + b293 * f3 + b294 * f4 + b295 * f5 + b296 * f6 + b297 * f7 + & b298 * f8 + b299 * f9 + b2910 * f10 + b2911 * f11 + b2912 * f12 + b2913 * f13 + & b2914 * f14 + b2915 * f15 + b2916 * f16 + b2917 * f17 + b2918 * f18 + b2919 * f19 + & b2920 * f20 + b2921 * f21 + b2922 * f22 + b2923 * f23 + b2924 * f24 + b2925 * f25 + & b2926 * f26 + b2927 * f27 + b2928 * f28 ), f29 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + & c19 * f19 + c20 * f20 + c21 * f21 + c22 * f22 + c23 * f23 + c24 * f24 + c25 * f25 + c26 * f26 + & c27 * f27 + c28 * f28 + c29 * f29 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + & e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + & e19 * f19 + e20 * f20 + e21 * f21 + e22 * f22 + e23 * f23 + e24 * f24 + e25 * f25 + e26 * f26 + & e27 * f27 + e28 * f28 + e29 * f29 ) end associate end procedure rko129 !***************************************************************************************** !***************************************************************************************** !> ! Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme ! !### Reference ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK11/RKcoeff11_a.pdf) module procedure rks1110a real ( wp ), parameter :: a2 = . 2494510436877389344264053439636521218011835467298426368145366983339993718715373083760_wp real ( wp ), parameter :: a3 = . 3741765655316084016396080159454781827017753200947639552218050475009990578073059625640_wp real ( wp ), parameter :: a4 = . 5612648482974126024594120239182172740526629801421459328327075712514985867109589438460_wp real ( wp ), parameter :: a5 = . 854699529917459291574228990041809293536674086672018395410085218805805116644296101160 9e-1_wp real ( wp ), parameter :: a6 = . 7310788517640473762691237698106576677338584467168049416410984572334277402413648068397_wp real ( wp ), parameter :: a7 = . 1304049416609471516815374056280027453671928620452985586822237474262182566918325326012_wp real ( wp ), parameter :: a8 = . 4712636357202847267558933149451482905659499178473869504545717970436656667382069175430_wp real ( wp ), parameter :: a9 = . 7730997092193940758126470461455964941402897392485301085000777589597371419303943343132_wp real ( wp ), parameter :: a10 = . 2056292271097569160894663338279693801391636310750116019089310570387586267029180604980_wp real ( wp ), parameter :: a11 = . 5366419968074299811348135248875344652445218400812654186620229284574082136119576258888_wp real ( wp ), parameter :: a12 = . 6950637644720240807995723705690567056506824408065743296638976932495337928615038239116_wp real ( wp ), parameter :: a13 = . 8049629952111449717022202873313016978667827601218981279930343926861123204179364388333_wp real ( wp ), parameter :: a14 = . 1913760139217099199372138166733346224093015957152232805822661231536077778241788913071_wp real ( wp ), parameter :: a15 = . 8894442715562032655697860690613313211578199121477983480401175761840408067430713807992_wp real ( wp ), parameter :: a16 = . 4680151547126001101041424878175828807838998612363955308441536427569141462651129332201_wp real ( wp ), parameter :: a17 = . 9908386187455954897815362931642001409443269908386187455954897815362931642001409443270_wp real ( wp ), parameter :: a18 = . 900018828845791752965543212201092073055921672001506307663340237243456976087365844473 7e-1_wp real ( wp ), parameter :: a19 = . 4031478884213807074957145083372292348449431198379304971170328814087579865980988000623_wp real ( wp ), parameter :: a20 = . 2426620464737056665307786384019567876070118222584590297594781899714635140644109253975_wp real ( wp ), parameter :: a21 = . 7208245981830887491264849755415793151642208245981830887491264849755415793151642208246_wp real ( wp ), parameter :: a22 = . 1999681579366342939022448654672822798917369845565992676325425887597516319057474924375_wp real ( wp ), parameter :: a23 = . 9639977912755383765875207067918277194919933738266151297625621203754831584759801214798_wp real ( wp ), parameter :: a24 = . 7436137801734239512538082962268572767752519334426997890789782048277478322006093273963_wp real ( wp ), parameter :: b21 = . 2494510436877389344264053439636521218011835467298426368145366983339993718715373083760_wp real ( wp ), parameter :: b31 = . 935441413829021004099020039863695456754438300236909888054512618752497644518264906410 0e-1_wp real ( wp ), parameter :: b32 = . 2806324241487063012297060119591086370263314900710729664163537856257492933554794719230_wp real ( wp ), parameter :: b41 = . 1403162120743531506148530059795543185131657450355364832081768928128746466777397359615_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 4209486362230594518445590179386629555394972351066094496245306784386239400332192078845_wp real ( wp ), parameter :: b51 = . 701916467045438208744378660640537427490873918345465227659802518393598213663073072187 0e-1_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = . 263117484192442344483472751021664218161405318393402985572452909990879906690068170715 6e-1_wp real ( wp ), parameter :: b54 = - . 110334421320421261653622421620392352115605150066849817822170209578673003708845141741 7e-1_wp real ( wp ), parameter :: b61 = - . 1566211240781183642488518551453027928209011808429926742075994450765608166883593055436_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 4022037025415642768212777334976723807953788960750969348079276345083207687523340439985_wp real ( wp ), parameter :: b65 = . 4854962733006014636966978914582880797593807314847006810407702678016677881773900683848_wp real ( wp ), parameter :: b71 = . 311224906518945454097593874910368877564086026801576551787590181963678884162288351471 5e-1_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0 real ( wp ), parameter :: b75 = . 992560294647075573097686133374655257801011354337155650115653228952222308368603975046 4e-1_wp real ( wp ), parameter :: b76 = . 264215443450489620094047995003318306831239314253384918994063346281374387432999494419 4e-4_wp real ( wp ), parameter :: b81 = . 7097221158585919779802904970340267773691990074739280896770286766721241217196318737330_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 2.878599621086994245472819276760640913301855954929611359904818127369971660983418731969_wp real ( wp ), parameter :: b86 = . 212944657580320249559301145000067512314681943628335290564408637505260827380671059808 3e-1_wp real ( wp ), parameter :: b87 = 2.618846675190654969292491980171755675267138670940236691625920383990987123263926669799_wp real ( wp ), parameter :: b91 = . 197116276975162265337427903089090189510227126093475256007329866651682059894769406524 5e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 1314769583961512153957380944910102917010453313237904532896703042317759437588108172284_wp real ( wp ), parameter :: b97 = . 2651026426320722003136425762899652531974839391071893983013696279981183473287139122567_wp real ( wp ), parameter :: b98 = . 3568084804936544335695235850557119302907377562082027313083048400646746448533926641757_wp real ( wp ), parameter :: b101 = . 452000198123696303466615899715814558178752759216811801443752162006850816548332785001 0e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = . 400279936896326942445344872603617212970728603525508403353084825194504763885543338106 9e-2_wp real ( wp ), parameter :: b107 = . 1601500636916154116141648988130496051518236572818790559811874215346710453554656819808_wp real ( wp ), parameter :: b108 = - . 694830896113558766055076810880379832567315616309439231397834893941418976920688252096 0e-3_wp real ( wp ), parameter :: b109 = - . 302882486707783652975852687181747312767527254749427901876459405460112896931564511184 9e-2_wp real ( wp ), parameter :: b111 = . 648808887415660154255010100963128242523506631767064355450923234229335037083220188874 1e-1_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = 0 real ( wp ), parameter :: b117 = 0 real ( wp ), parameter :: b118 = . 1798223672519538764980931982771653336226267689019203140039759418977874942481337275737_wp real ( wp ), parameter :: b119 = - . 137903885379537465845937593987289145226091895764162798423692696214988529090667638984 2e-2_wp real ( wp ), parameter :: b1110 = . 2933177796677054638696786924539291988218053269602802970971915900988371009464085558176_wp real ( wp ), parameter :: b121 = . 620300949896451215273368260248325280054446546802772369651364966059871393840310546856 3e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0 real ( wp ), parameter :: b129 = . 185249427121668310656673241280125265402870911250618566181316201319034715801814640938 5e-1_wp real ( wp ), parameter :: b1210 = . 3097644836067189024326911104871249008925595428403487952252886015862314098920345337684_wp real ( wp ), parameter :: b1211 = . 3047442431634932257738771099290867502123911521608864408553409749254117720052567713637_wp real ( wp ), parameter :: b131 = . 620197226091689308071142073955897504599448199140401627094283104262129667533253457586 6e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0 real ( wp ), parameter :: b139 = . 940239712631459397691040943260037628464074573939285600649169341473937717675249683025 4e-1_wp real ( wp ), parameter :: b1310 = . 3098255331628556417346604747446843311853795538255778076358109181983411673182996479068_wp real ( wp ), parameter :: b1311 = . 3036714566645797050698936883147468540428250347499812111630779317183972047785244555068_wp real ( wp ), parameter :: b1312 = . 354223115113947543214478225502769993322258942383703864198002981957672098002620213584 5e-1_wp real ( wp ), parameter :: b141 = . 696908934482578755465020457698766652266123986652693124386595687256626658587557438909 0e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0 real ( wp ), parameter :: b149 = - 1.026068398848221434143517600646828432765332980244057389200313887686341269100904144289_wp real ( wp ), parameter :: b1410 = . 1707111685325415936794748807994057363691702390665289122715815578989450621608097471178_wp real ( wp ), parameter :: b1411 = - . 2276426317828345244640899307352560724213609963668371269120350778897604268488707131379_wp real ( wp ), parameter :: b1412 = . 6469733264162559693641327687577763359541689058709531537823573009011020286605375682754_wp real ( wp ), parameter :: b1413 = . 5577116561557104399547116527283603900460440287233664182020166612039997170938506894503_wp real ( wp ), parameter :: b151 = . 562712237629357194913230965344514394930168752026278865175040823274026618061657084551 0e-1_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = 0 real ( wp ), parameter :: b159 = 0 real ( wp ), parameter :: b1510 = 0 real ( wp ), parameter :: b1511 = . 3678983222850209699517524982831781294240536196092600812178960084767342167600554097921_wp real ( wp ), parameter :: b1512 = - . 519558720880348329935654723427838356118784732660198614667815838883522387738021381423 0e-1_wp real ( wp ), parameter :: b1513 = . 2204300024722190946507889136186101583051939445678464072502258435712922894837870998433_wp real ( wp ), parameter :: b1514 = . 2968005951240623144694870329678754295474339460340838345212732256969638774668653008510_wp real ( wp ), parameter :: b161 = . 563484649734032902616933331075216696684430763271513238111764149038959362851982687853 1e-1_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 0 real ( wp ), parameter :: b169 = 0 real ( wp ), parameter :: b1610 = 0 real ( wp ), parameter :: b1611 = . 2154493134975348678816921094538633047666156318059356569827382889198219015749935439823_wp real ( wp ), parameter :: b1612 = - . 1828038597798339032767249818891038294211236603774749922977117870744959009671532402296_wp real ( wp ), parameter :: b1613 = . 1115035565964385314512820745510850004252820806597292903369723111122469246811072381550_wp real ( wp ), parameter :: b1614 = . 2961573176911709124764789850722285989373150621850530267865487559044685065325051431373_wp real ( wp ), parameter :: b1615 = - . 286396382661135886902790324780118635926323293639987747755703410090232218415380206101 6e-1_wp real ( wp ), parameter :: b171 = . 576899419872428903617188258907955120032905331707401573686693560731736805826394789238 8e-1_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 0 real ( wp ), parameter :: b1710 = 0 real ( wp ), parameter :: b1711 = - . 333959415357374613877965725423968746194051846428608976081589395203455257443421103754 0e-1_wp real ( wp ), parameter :: b1712 = . 4007337036063909756966778946251460958783204419363211999098235920936595305217080757252_wp real ( wp ), parameter :: b1713 = - . 2804910522268063380484013221059916164179105523752052409880171087961359378301286147028_wp real ( wp ), parameter :: b1714 = . 2860659865450288214940338791467983472419468134474127404785360793939950768656398860364_wp real ( wp ), parameter :: b1715 = . 3300830129889967277869093004777042822760017064369869377090469066296160876867312632942_wp real ( wp ), parameter :: b1716 = . 2301529673804798738783942876721443945820832328652238487255898956623302521178929654255_wp real ( wp ), parameter :: b181 = . 462834957971902442731717539913173327351129708413920951653512874897559510234846696334 6e-1_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = 0 real ( wp ), parameter :: b189 = 0 real ( wp ), parameter :: b1810 = 0 real ( wp ), parameter :: b1811 = 1.630450107397975249685538886816283747362802271995334921665631466207136001357816066251_wp real ( wp ), parameter :: b1812 = - 1.519389027110125818833104438792078888366805294218517984315935323689939634346785541266_wp real ( wp ), parameter :: b1813 = 1.451177905612818398158204503782829478002025896171620079182131464615748573245045066933_wp real ( wp ), parameter :: b1814 = . 1115858300886827251108540309774994639792980968086331408518485993004009147049002886661_wp real ( wp ), parameter :: b1815 = - . 6927910549842217223999151167283689307038087310272710650839151778360002928231938996564_wp real ( wp ), parameter :: b1816 = - 1.033967300639154935442351963388333197850853637180263551013370838161871418837432150763_wp real ( wp ), parameter :: b1817 = . 966519267214150347441566645609602021478205938092229943145925457991156032849020846494 0e-1_wp real ( wp ), parameter :: b191 = - . 203045977093901045717986504345754315989068683690894937531312579864021297464072224713 9e-1_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = 0 real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0 real ( wp ), parameter :: b199 = 0 real ( wp ), parameter :: b1910 = 0 real ( wp ), parameter :: b1911 = 5.403684273875123798630962329849980016426640735397844799635504992740247972317943415738_wp real ( wp ), parameter :: b1912 = - 6.547667878535769638577053800139325829335808492655639368966216657633158529493394018748_wp real ( wp ), parameter :: b1913 = 7.013821350363578373165272471360941682153886129098573011050120208706394847104611280659_wp real ( wp ), parameter :: b1914 = . 1870129209851220070917089872488052512865730910524666003812699685036249110639968876355_wp real ( wp ), parameter :: b1915 = - 3.586221630318466310345416445340680667399109825679889726092108094877121092019568725906_wp real ( wp ), parameter :: b1916 = - 2.796807192734124892412016302005787005622243784243008121795193206999340165569504484433_wp real ( wp ), parameter :: b1917 = . 5350966429298067141403865717192268565615462868769074262461851475076297049847405900305_wp real ( wp ), parameter :: b1918 = . 2145339995655007603736693460786443623723658483597653704106017814468824679556810775581_wp real ( wp ), parameter :: b201 = - . 174248591829004420561455485419671045547950455319075200579847596404286261556824993197 9e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = 0 real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = 0 real ( wp ), parameter :: b2010 = 0 real ( wp ), parameter :: b2011 = 1.624681387971290566033459737855869526767754661771120924184664522930252560057487715917_wp real ( wp ), parameter :: b2012 = - 2.354176134519334554629765394537690359953484690980299665915399924759933249024433201062_wp real ( wp ), parameter :: b2013 = 2.681464673816256355689049206851920401601461184001531947851310974409875440156813229521_wp real ( wp ), parameter :: b2014 = - . 376915680288753988439402397990322923549765827404134339727828635658845799927369883756 8e-1_wp real ( wp ), parameter :: b2015 = - 1.416558131026522083720211494413873707821785422770559705231460034487688457012423059506_wp real ( wp ), parameter :: b2016 = - . 6949353599391523142082433283060914200352029386004581317085753581959007030993120101233_wp real ( wp ), parameter :: b2017 = . 2176483372495038460388837827561689520877604442565239353657200502175872181787882826377_wp real ( wp ), parameter :: b2018 = . 2697602441781337550421531890140860774876933975825845928799740196946913466182988994464_wp real ( wp ), parameter :: b2019 = - . 301065440446940628144612724774332856174131847296639136359884366311074356623894437380 7e-1_wp real ( wp ), parameter :: b211 = - . 540306963360225910864626964493425695755140459941256145376726807487078366992549801645 7e-2_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0 real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0 real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = . 4139045320778312241379049484992085439613081939853923740529945110841130228938567470608_wp real ( wp ), parameter :: b2112 = - . 6225569512435124987325753043472442306739960604338314680453027342793707050930404307846_wp real ( wp ), parameter :: b2113 = . 8734771329093316867790902545034150641322140869164058836843523721471009826005087793734_wp real ( wp ), parameter :: b2114 = - . 4460631186034505809671866759278699513326438900110859254673757293843834232949457511945_wp real ( wp ), parameter :: b2115 = - . 4770024428429503264261245457799687730095056727976098627656199278228457764648229288301_wp real ( wp ), parameter :: b2116 = . 3350194037993700956622540574882038342150917200081189888351569726131444997493018243069_wp real ( wp ), parameter :: b2117 = . 750424846866882833513102782733608286417290505294615615517112565251837019201701928589 7e-1_wp real ( wp ), parameter :: b2118 = . 2868602398412017179778096520767496699075337622961506198525486757858393614463244192166_wp real ( wp ), parameter :: b2119 = - . 3105278876109550093409796945938508430591700006793679865817465482241195091701064106306_wp real ( wp ), parameter :: b2120 = . 5980742748031364157936282749945094293392110393839614650861749046057502083978432774641_wp real ( wp ), parameter :: b221 = - . 804063778362985267038625340842747712983903803989522295832710238438234785438722814058 6e-1_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = 0 real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 1 4.09003825209192451104055534327205557907144506304998967309786817952326707840468519855_wp real ( wp ), parameter :: b2212 = - 1 6.51095452142836096439418777253125778161824307435047496403861839615632359732680906324_wp real ( wp ), parameter :: b2213 = 1 7.13478919889388959512706015258229430254357775856472236246578628732774154201548556949_wp real ( wp ), parameter :: b2214 = . 5162416754963992955466349330401373481541758099272782749146402071285515617224748797349_wp real ( wp ), parameter :: b2215 = - 8.738239054447235555769280431947112005536670926201592356606646679961357074323383907433_wp real ( wp ), parameter :: b2216 = - 7.928763291217204762997981382770542063580344552643223907022402362361688687161033776950_wp real ( wp ), parameter :: b2217 = 1.299607095883618341404631332785395816146491714221581325131902479964394904680531866743_wp real ( wp ), parameter :: b2218 = . 2985974887158637819626343538772133330364013942516888589723607063393086453938726507764_wp real ( wp ), parameter :: b2219 = . 2306899737777788621463004228318904282554044640133218561071121312583287783148540854557_wp real ( wp ), parameter :: b2220 = - . 4162475612748372571090619229550372319146077330570330975546626972398912191287912992344_wp real ( wp ), parameter :: b2221 = . 3046152792810969736488023713665193266324974471792934717484737567812431778577335699415_wp real ( wp ), parameter :: b231 = . 518894406777466491313496588184233863746516753842681259460186640191745312537378044328 8e-1_wp real ( wp ), parameter :: b232 = 0 real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = - 1.283277980375441090269741488559725341590001661469261097548681503281119502510781510671_wp real ( wp ), parameter :: b2312 = 3.197031115178587180279278821590157014124289302868827178494105498343258944734856975984_wp real ( wp ), parameter :: b2313 = - 4.925730995528770332329418001427019544036228452951763539493235207541539355193215629707_wp real ( wp ), parameter :: b2314 = . 4556842843249686735202095835169824346358162044635023939110786683727545600555997662146_wp real ( wp ), parameter :: b2315 = 2.672937738349530686900845106745665406421870114003531687061025215633257210063413548721_wp real ( wp ), parameter :: b2316 = - 1.545486350471516022666399706441233218275810264466541860777249858172892030485892221263_wp real ( wp ), parameter :: b2317 = - . 3721987962685219677888284678662933875128991354125828036313277053504464873414697307303_wp real ( wp ), parameter :: b2318 = . 1275610106742831413187042273550361954603324559021122028077942983877428065036205767992_wp real ( wp ), parameter :: b2319 = 1.955690675673468524392185835321028843337157689840864927642297223731192314442172030656_wp real ( wp ), parameter :: b2320 = . 3191081222387442241092001119049884652557628641382080948098270187047261996513219724153_wp real ( wp ), parameter :: b2321 = 1.121546003224352473639037341460033868464982074905347279402236597305066991912121393629_wp real ( wp ), parameter :: b2322 = - . 8107564764218937636489023156262164031679294933798974588613267897756930246095048550015_wp real ( wp ), parameter :: b241 = - . 701170829716883809332007327182423181155551637683933988976878053377220404609805677864 5e-2_wp real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0 real ( wp ), parameter :: b249 = 0 real ( wp ), parameter :: b2410 = 0 real ( wp ), parameter :: b2411 = 1.191430397515656948185785084406871641958062497543742234300725797836945018037271858084_wp real ( wp ), parameter :: b2412 = - 1.828224802245176636695187739870698589078178771180859212263094110856159464053843046402_wp real ( wp ), parameter :: b2413 = 2.587660024998591526533741070898054580235728551249558749988014852858819613806922059203_wp real ( wp ), parameter :: b2414 = - . 4609429033777800137012176300671539646289103914701490781289612317160305665226273519358_wp real ( wp ), parameter :: b2415 = - 1.325931501693639442980805419646217538577342867896123447497177267595031990967256304102_wp real ( wp ), parameter :: b2416 = . 5048216427266366058315103764214691413381451411460686651485736358879672359427752204445_wp real ( wp ), parameter :: b2417 = . 2194255008759965600775266235750828151587685421380286198819468613425068758315070811985_wp real ( wp ), parameter :: b2418 = . 2580087037350744276193737624019399564007443016182003098695556923721330317034140914297_wp real ( wp ), parameter :: b2419 = - . 7820644366919761953621998768725631028114098091524728093576852041863328545044120664888_wp real ( wp ), parameter :: b2420 = . 4981236112353889237817573857026156554544669576903254922783923277260844155420240361688_wp real ( wp ), parameter :: b2421 = - . 2818659230370184110487250730841700637198882434735413160224991411608463306147813033701_wp real ( wp ), parameter :: b2422 = . 1975630649870201406787729762339550948339749510061280462627577046361617264269398213974_wp real ( wp ), parameter :: b2423 = - . 273778905581816435732031706005041179773534093993671254918029317846966743812267114517 8e-1_wp real ( wp ), parameter :: b251 = . 697122315798549144188954346305896833583280092231569622697321426359994641318713375744 1e-1_wp real ( wp ), parameter :: b252 = 0 real ( wp ), parameter :: b253 = 0 real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = 0 real ( wp ), parameter :: b257 = 0 real ( wp ), parameter :: b258 = 0 real ( wp ), parameter :: b259 = 0 real ( wp ), parameter :: b2510 = 0 real ( wp ), parameter :: b2511 = . 8485072933915981598683071881067011723176540155630964375777672731824955304237165117739_wp real ( wp ), parameter :: b2512 = - 1.504790599380062029550479292004278750516583328735111485609300227641118522265117453228_wp real ( wp ), parameter :: b2513 = 2.971661962491066226601618850699945230551598000336030549022007199066569229936095601265_wp real ( wp ), parameter :: b2514 = . 2189212281135321618639152301919425667361998064642432899287016486436734890226912997813_wp real ( wp ), parameter :: b2515 = - 1.363504916136495083863504916136495083863504916136495083863504916136495083863504916136_wp real ( wp ), parameter :: b2516 = 1.535256651208129648912110087693939955244136470648889182343875125782209378315005545886_wp real ( wp ), parameter :: b2517 = . 2255130922481182477299374148203865138344993252214597927624562120740486384043245934395_wp real ( wp ), parameter :: b2518 = - . 1252487725356194666272520523138563196763786809348751670013078003838735310461344402659_wp real ( wp ), parameter :: b2519 = - 1.433947471579772638181105448843590748725989807918463347706781654253234025872206977656_wp real ( wp ), parameter :: b2520 = - . 2653692486145121794045624436138677664647506121922928212398504961979636551101946127078_wp real ( wp ), parameter :: b2521 = - 1.057083353895191276322695714066286715782319071838176809244435034528746563196511305239_wp real ( wp ), parameter :: b2522 = . 5958992342288874679818860848371024166473432615899828093938621236679595663138268737944_wp real ( wp ), parameter :: b2523 = . 564076397400236016584068475950962239377917411088964287712727994971464949756123568222 8e-1_wp real ( wp ), parameter :: b2524 = . 2280650291404422449145227284026716224019757875996592625955056045913295898305255848960_wp real ( wp ), parameter :: b261 = . 584772440750170780050996402766399551980400187047285037921605393360332144893732038287 3e-1_wp real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = 0 real ( wp ), parameter :: b266 = 0 real ( wp ), parameter :: b267 = 0 real ( wp ), parameter :: b268 = 0 real ( wp ), parameter :: b269 = 0 real ( wp ), parameter :: b2610 = 0 real ( wp ), parameter :: b2611 = . 8482433234853130399472226781516394610296267520150369993929425712656780053034142790857_wp real ( wp ), parameter :: b2612 = - 1.818778337229596341437999685014432821665031881560984595319320029619105771387827231293_wp real ( wp ), parameter :: b2613 = 3.360950949051261986329911895518526801628857587757616068272635548399517354842337530945_wp real ( wp ), parameter :: b2614 = . 1508779656009112841743785043192199515750215073024373320382690391467484988490972888214_wp real ( wp ), parameter :: b2615 = - 1.535625970104296058211732653128688607443092018291498032244748403611478465692632705036_wp real ( wp ), parameter :: b2616 = 1.689710648596447426456373308903510510459502815029443327222583037297243278873766013804_wp real ( wp ), parameter :: b2617 = . 2753763916359371389555315070580325732352897337628204267122697551960198539312003364345_wp real ( wp ), parameter :: b2618 = - . 866399320360343455588069455962531769915158860350794351565513579974269217033207464145 6e-1_wp real ( wp ), parameter :: b2619 = - 1.514109179619982965788582168222695819982704233094238060182049846398573819503074487947_wp real ( wp ), parameter :: b2620 = - . 2731051919432418524342072455220752640028637692479133311886846927223922900302148881433_wp real ( wp ), parameter :: b2621 = - . 7386383863141516263346011834004149434481207761507984915319537912098408949133636097415_wp real ( wp ), parameter :: b2622 = . 6343578675072522696688679414505709253269883958978404947025376176286935002340724649840_wp real ( wp ), parameter :: b2623 = . 221991526800986051063425221368252326988825501687679709007514160539707367422154636492 8e-1_wp real ( wp ), parameter :: b2624 = - . 732965453849356388777981169304047776188807962581791774108414027650862800350429129765 4e-1_wp real ( wp ), parameter :: b2625 = 0 real ( wp ), parameter :: c1 = . 256030042244881864005697373302738151773382407644313695363479840219957968029099366778 5e-1_wp real ( wp ), parameter :: c2 = 0 real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0 real ( wp ), parameter :: c7 = 0 real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0 real ( wp ), parameter :: c10 = 0 real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = 0 real ( wp ), parameter :: c14 = 0 real ( wp ), parameter :: c15 = . 4518777011767389121126592910724741440985372571238852320538195476794258345326944681173_wp real ( wp ), parameter :: c16 = . 1571644835050410342525892218785914023945906781166129113400861908694541485546171465980_wp real ( wp ), parameter :: c17 = 1.587056574024945279877130621604901273153398820663935100541595105228850005414302839405_wp real ( wp ), parameter :: c18 = . 1457164101207840798598697293357824068221719394674815441268910066025070033320249231167_wp real ( wp ), parameter :: c19 = . 675669099287499336570477790695716612153483886928452443181147440035835137579157526912 5e-1_wp real ( wp ), parameter :: c20 = . 2263702829370636470261171189724674060331565741885612750461048803721449531302274282834_wp real ( wp ), parameter :: c21 = . 9585657493693419066100150421626762898713313017234629340723230525017707321578125838875_wp real ( wp ), parameter :: c22 = - . 573751095225372025124339224139770182418288614522996766037715732537967213247067399918 2e-1_wp real ( wp ), parameter :: c23 = - . 8207294363127299380342111455087248111504033000422844250308430626629630466499721876523_wp real ( wp ), parameter :: c24 = - . 8199946795810496733757980690172928576129340372072025495094374198905045106663577622820_wp real ( wp ), parameter :: c25 = - . 9218218898708361658735554044867437117607070020394289598912304554724677090414683888511_wp real ( wp ), parameter :: c26 = 0 real ( wp ), parameter :: d1 = . 261145356755804717432724505302833646662680661588396191468128133636318997291524554487 3e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = 0 real ( wp ), parameter :: d10 = 0 real ( wp ), parameter :: d11 = 0 real ( wp ), parameter :: d12 = 0 real ( wp ), parameter :: d13 = 0 real ( wp ), parameter :: d14 = 0 real ( wp ), parameter :: d15 = . 613078959004402442037534723545751450332216838915461101692410958456725866766942808432 8e-1_wp real ( wp ), parameter :: d16 = . 2225176387207912085954871898906978473895949131807976650805573845853338932568562016822_wp real ( wp ), parameter :: d17 = - . 6452541374509687528609607022885324791758461431623241957335732784511248267767614258399_wp real ( wp ), parameter :: d18 = . 1428813432326775237316522259538641672308222297639395170211160113665720641033224975230_wp real ( wp ), parameter :: d19 = . 199850370351176411605349510612686616431974102322133216722189983150203383389722650760 7e-1_wp real ( wp ), parameter :: d20 = . 2271215662186804051109071916317932366756181626009529050272447503184463361820614170681_wp real ( wp ), parameter :: d21 = . 3555653412963184679461951194576569724124866534036012519458466746801575903667969215385_wp real ( wp ), parameter :: d22 = - . 508414420498458416190831233017756495487706715400107942955977770430294684864492873698 4e-1_wp real ( wp ), parameter :: d23 = . 3451056668568212037936618506732414889276840710489545476476791628380007277211978725437_wp real ( wp ), parameter :: d24 = - . 1182965488838884338743861432044520655991039617854064994056837668531638997325328536863_wp real ( wp ), parameter :: d25 = 0 real ( wp ), parameter :: d26 = . 4137931034482758620689655172413793103448275862068965517241379310344827586206896551724_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 real ( wp ), parameter :: e22 = c22 - d22 real ( wp ), parameter :: e23 = c23 - d23 real ( wp ), parameter :: e24 = c24 - d24 real ( wp ), parameter :: e25 = c25 - d25 real ( wp ), parameter :: e26 = c26 - d26 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 ), & f22 => me % funcs (:, 22 ), & f23 => me % funcs (:, 23 ), & f24 => me % funcs (:, 24 ), & f25 => me % funcs (:, 25 ), & f26 => me % funcs (:, 26 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b221 * f1 + b222 * f2 + b223 * f3 + b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + b2212 * f12 + b2213 * f13 + & b2214 * f14 + b2215 * f15 + b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b231 * f1 + b232 * f2 + b233 * f3 + b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + b2312 * f12 + b2313 * f13 + & b2314 * f14 + b2315 * f15 + b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b241 * f1 + b242 * f2 + b243 * f3 + b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + b2412 * f12 + b2413 * f13 + & b2414 * f14 + b2415 * f15 + b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + h , x + h * ( b251 * f1 + b252 * f2 + b253 * f3 + b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + b2512 * f12 + b2513 * f13 + & b2514 * f14 + b2515 * f15 + b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + b2524 * f24 ), f25 ) call me % f ( t + h , x + h * ( b261 * f1 + b262 * f2 + b263 * f3 + b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + b2612 * f12 + b2613 * f13 + & b2614 * f14 + b2615 * f15 + b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + b2624 * f24 + b2625 * f25 ), f26 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + & c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + c19 * f19 + c20 * f20 + c21 * f21 + c22 * f22 + & c23 * f23 + c24 * f24 + c25 * f25 + c26 * f26 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + & e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + e19 * f19 + e20 * f20 + e21 * f21 + e22 * f22 + & e23 * f23 + e24 * f24 + e25 * f25 + e26 * f26 ) end associate end procedure rks1110a !***************************************************************************************** !***************************************************************************************** end submodule rklib_variable_steps !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_variable_steps.f90.html"},{"title":"rklib_module.F90 – rklib","text":"Files dependent on this one sourcefile~~rklib_module.f90~~AfferentGraph sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_example.f90 rklib_example.f90 sourcefile~rklib_example.f90->sourcefile~rklib_module.f90 sourcefile~rklib_fixed_properties.f90 rklib_fixed_properties.f90 sourcefile~rklib_fixed_properties.f90->sourcefile~rklib_module.f90 sourcefile~rklib_fixed_steps.f90 rklib_fixed_steps.f90 sourcefile~rklib_fixed_steps.f90->sourcefile~rklib_module.f90 sourcefile~rklib_variable_properties.f90 rklib_variable_properties.f90 sourcefile~rklib_variable_properties.f90->sourcefile~rklib_module.f90 sourcefile~rklib_variable_steps.f90 rklib_variable_steps.f90 sourcefile~rklib_variable_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Modules rklib_module Source Code rklib_module.F90 Source Code !***************************************************************************************** !> author: Jacob Williams ! ! Runge-Kutta integration. ! !@note The default real kind (`wp`) can be ! changed using optional preprocessor flags. ! This library was built with real kind: #ifdef REAL32 ! `real(kind=real32)` [4 bytes] #elif REAL64 ! `real(kind=real64)` [8 bytes] #elif REAL128 ! `real(kind=real128)` [16 bytes] #else ! `real(kind=real64)` [8 bytes] #endif module rklib_module use iso_fortran_env use root_module implicit none private #ifdef REAL32 integer , parameter , public :: rk_module_rk = real32 !! real kind used by this module [4 bytes] #elif REAL64 integer , parameter , public :: rk_module_rk = real64 !! real kind used by this module [8 bytes] #elif REAL128 integer , parameter , public :: rk_module_rk = real128 !! real kind used by this module [16 bytes] #else integer , parameter , public :: rk_module_rk = real64 !! real kind used by this module [8 bytes] #endif integer , parameter :: wp = rk_module_rk !! local copy of `rk_module_rk` with a shorter name real ( wp ), parameter :: zero = 0.0_wp integer , parameter :: max_error_len = 100 !! max size of error message strings integer , parameter , public :: RKLIB_ERROR_TOO_MANY_STEPS = - 10 integer , parameter , public :: RKLIB_ERROR_INVALID_RTOL_SIZE = - 9 integer , parameter , public :: RKLIB_ERROR_INVALID_ATOL_SIZE = - 8 integer , parameter , public :: RKLIB_ERROR_INVALID_H = - 7 integer , parameter , public :: RKLIB_ERROR_USER_STOPPED = - 6 integer , parameter , public :: RKLIB_ERROR_MIN_STEP_SIZE = - 5 integer , parameter , public :: RKLIB_ERROR_TOO_MANY_REDUCTIONS = - 4 integer , parameter , public :: RKLIB_ERROR_INVALID_HINIT_METHOD = - 3 integer , parameter , public :: RKLIB_ERROR_G_NOT_ASSOCIATED = - 2 integer , parameter , public :: RKLIB_ERROR_F_NOT_ASSOCIATED = - 1 integer , parameter , public :: RKLIB_ERROR_NONE = 0 character ( len = max_error_len ), dimension ( RKLIB_ERROR_TOO_MANY_STEPS : RKLIB_ERROR_NONE ), parameter :: & rklib_error_messages = [& 'Too many steps ' , & ! -10 'Invalid size for rtol array ' , & ! -9 'Invalid size for atol array ' , & ! -8 'Step size cannot be zero ' , & ! -7 'User stopped the integration ' , & ! -6 'Minimum step size reached ' , & ! -5 'Too many attempts to reduce step size ' , & ! -4 'Invalid initial step size estimation method ' , & ! -3 'The event procedure g is not associated ' , & ! -2 'The function procedure f is not associated ' , & ! -1 'Success ' ] ! 0 !! Status message strings that go with the status codes. !! The index in this array is the `istatus` code. type , public :: rklib_properties !! Properties of an RK method. integer :: order = 0 !! order of the method integer :: number_of_stages = 0 !! number of stages logical :: fsal = . false . !! if it is a FSAL method logical :: low_storage = . false . !! if it is a LS method logical :: strong_stability_preserving = . false . !! if it is a SSP method integer :: number_of_registers = 0 !! number of `f` vectors used real ( wp ) :: cfl = zero !! Courant-Friedrichs-Lewy number character ( len = :), allocatable :: short_name !! short version of the method name character ( len = :), allocatable :: long_name !! longer description of the method end type rklib_properties type , public :: stepsize_class !! Algorithms for adjusting the step size for variable-step !! Runge-Kutta integrators. private logical :: fixed_step_mode = . false . !! if true, then the method runs in !! fixed step mode with not error estimation real ( wp ) :: hmax = 1.0e+6_wp !! maximum allowed step size real ( wp ) :: hmin = 1.0e-6_wp !! minimum allowed step size real ( wp ) :: hfactor_reject = 0.5_wp !! minimum allowed factor for decreasing step size after rejected step real ( wp ) :: hfactor_accept = 2.0_wp !! maximum allowed factor for increasing step size after accepted step integer :: accept_mode = 2 !! method to determine if step is accepted [1,2] integer :: max_attempts = 10000 !! maximum number of attempts to decrease step size before giving up ! for the `hfactor` equation: logical :: relative_err = . false . !! to use `tol*h` in the `hfactor` equation real ( wp ) :: safety_factor = 0.9_wp !! for `hfactor` equation (>0) integer :: p_exponent_offset = 1 !! `p` + this value in the exponent (0 or 1) procedure ( norm_func ), nopass , pointer :: norm => maxval_func !! routine for computing the norm of the state contains private procedure , public :: initialize => stepsize_class_constructor procedure , public :: compute_stepsize procedure , public :: destroy => destroy_stepsize_class end type stepsize_class type , abstract , public :: rk_class !! main integration class private integer :: istatus = 0 !! status code logical :: stopped = . false . !! if user has stopped the integration in `f` or `report`. integer :: num_steps = 0 !! number of accepted steps taken integer :: max_number_of_steps = huge ( 1 ) !! maximum number of steps to take integer :: report_rate = 1 !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. logical :: stop_on_errors = . false . !! if true, then errors will stop the program integer :: n = 0 !! user specified number of variables procedure ( deriv_func ), pointer :: f => null () !! user-specified derivative function procedure ( report_func ), pointer :: report => null () !! user-specified report function procedure ( event_func ), pointer :: g => null () !! event function (stop when this is zero) type ( root_method ) :: solver = root_method_brent !! the root solver method to use for even finding real ( wp ), dimension (:,:), allocatable :: funcs !! matrix to store the function !! evalutaions in the step function. !! this will be size (`n` x `number_of_registers`) contains private procedure , public :: destroy !! destructor procedure , public :: stop => rk_class_stop !! user-callable method to stop the integration procedure , public :: status => rk_class_status !! get status code and message procedure , public :: failed procedure :: init => initialize_rk_class procedure :: begin => begin_integration_rk_class procedure :: raise_exception procedure :: clear_exception procedure :: export_point procedure ( begin_func ), deferred :: begin_integration procedure ( properties_func ), deferred , public :: properties end type rk_class type , extends ( rk_class ), abstract , public :: rk_fixed_step_class !! fixed step size class private contains private procedure ( step_func_fixed ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_fixed_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_fixed_step procedure , public :: integrate_to_event => integrate_to_event_fixed_step procedure :: begin_integration => begin_integration_rk_fixed_step_class end type rk_fixed_step_class type , extends ( rk_class ), abstract , public :: rk_variable_step_class !! Main integration class for variable step size Runge-Kutta methods private type ( stepsize_class ) :: stepsize_method !! the method for varying the step size real ( wp ), dimension (:), allocatable :: rtol !! relative tolerance (`size(n)`) real ( wp ), dimension (:), allocatable :: atol !! absolute tolerance (`size(n)`) integer :: hinit_method = 1 !! if automatically computing the inital step size, which !! method to use. 1 = `hstart`, 2 = `hinit`. integer :: num_rejected_steps = 0 !! number of rejected steps real ( wp ) :: last_accepted_step_size = zero !! the last accepted step size `dt` from the integration !! (positive or negative) contains private procedure ( step_func_variable ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_variable_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_variable_step procedure , public :: integrate_to_event => integrate_to_event_variable_step procedure , public :: info => info_variable_step procedure :: hstart !! for automatically computing the initial step size [this is from DDEABM] procedure :: hinit !! for automatically computing the initial step size [this is from DOP853] procedure :: begin_integration => begin_integration_rk_variable_step_class procedure :: compute_initial_step procedure :: order !! returns `p`, the order of the method end type rk_variable_step_class type , extends ( rk_variable_step_class ), abstract , public :: rk_variable_step_fsal_class !! a variable step method with the \"first same as last\" (FSAL) property. !! Cache the last `f` and `x` vectors to use for the next step. !! !! The assumption is that the nature of the !! function has not changed since the last step. !! If it has, the user would need to manually call [[destroy_fsal_cache]] !! so that the previous point was not reused. private real ( wp ), allocatable :: t_saved !! cached `t` real ( wp ), dimension (:), allocatable :: x_saved !! cached `x` real ( wp ), dimension (:), allocatable :: f_saved !! cached `f` contains private procedure , public :: destroy_fsal_cache procedure , public :: check_fsal_cache procedure , public :: set_fsal_cache end type rk_variable_step_fsal_class #include \"rklib_fixed_classes.i90\" #include \"rklib_variable_classes.i90\" abstract interface subroutine begin_func ( me ) !! routine called before integration begins !! to set up internal variables. import :: rk_class class ( rk_class ), intent ( inout ) :: me end subroutine begin_func subroutine deriv_func ( me , t , x , xdot ) !! derivative function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector real ( wp ), dimension (:), intent ( out ) :: xdot !! derivative of state vector end subroutine deriv_func subroutine event_func ( me , t , x , g ) !! event function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector real ( wp ), intent ( out ) :: g !! g(t,x). The goal is to stop the integration when g=0. end subroutine event_func subroutine report_func ( me , t , x ) !! report function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector end subroutine report_func subroutine step_func_fixed ( me , t , x , h , xf ) !! rk step function for the fixed-step methods. import :: rk_fixed_step_class , wp implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x !! initial state vector real ( wp ), intent ( in ) :: h !! time step |\\Delta t| real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state vector end subroutine step_func_fixed subroutine step_func_variable ( me , t , x , h , xf , xerr ) !! rk step function for the variable-step methods. import :: rk_variable_step_class , wp implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x !! initial state vector real ( wp ), intent ( in ) :: h !! time step |\\Delta t| real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state vector real ( wp ), dimension ( me % n ), intent ( out ) :: xerr !! truncation error estimate end subroutine step_func_variable pure function norm_func ( x ) result ( xmag ) !! Vector norm function. Must return a value \\ge 0 . import :: wp implicit none real ( wp ), dimension (:), intent ( in ) :: x !! a vector real ( wp ) :: xmag !! the magnitude of the vector end function norm_func pure function properties_func ( me ) result ( p ) !! Returns the properties of the method. import :: rk_class , rklib_properties implicit none class ( rk_class ), intent ( in ) :: me type ( rklib_properties ) :: p !! properties of the method end function properties_func end interface ! submodule procedures: interface #include \"rklib_fixed_step_interfaces.i90\" #include \"rklib_variable_step_interfaces.i90\" #include \"rklib_fixed_property_interfaces.i90\" #include \"rklib_variable_property_interfaces.i90\" end interface ! public routines: public :: norm2_func , maxval_func contains !***************************************************************************************** !***************************************************************************************** !> ! Returns the order of the RK method pure function order ( me ) result ( p ) class ( rk_variable_step_class ), intent ( in ) :: me integer :: p !! order of the method type ( rklib_properties ) :: properties properties = me % properties () p = properties % order end function order !***************************************************************************************** !***************************************************************************************** !> ! Clear any exception. subroutine clear_exception ( me ) class ( rk_class ), intent ( inout ) :: me me % istatus = RKLIB_ERROR_NONE end subroutine clear_exception !***************************************************************************************** !***************************************************************************************** !> ! Raise an exception. subroutine raise_exception ( me , error_code ) class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: error_code !! the error to raise me % istatus = error_code if ( error_code < 0 . and . me % stop_on_errors ) then error stop trim ( rklib_error_messages ( error_code )) end if end subroutine raise_exception !***************************************************************************************** !***************************************************************************************** !> ! Destructor for [[rk_class]]. subroutine destroy ( me ) class ( rk_class ), intent ( out ) :: me end subroutine destroy !***************************************************************************************** !***************************************************************************************** !> ! User-callable method to stop the integration. subroutine rk_class_stop ( me ) class ( rk_class ), intent ( inout ) :: me me % stopped = . true . end subroutine rk_class_stop !***************************************************************************************** !***************************************************************************************** !> ! Returns true if there was an error. ! Can use [[rk_class_status]] to get more info. logical function failed ( me ) class ( rk_class ), intent ( in ) :: me failed = me % istatus < 0 end function failed !***************************************************************************************** !***************************************************************************************** !> ! Get the status of an integration. subroutine rk_class_status ( me , istatus , message ) class ( rk_class ), intent ( in ) :: me integer , intent ( out ), optional :: istatus !! status code (`<0` means an error) character ( len = :), allocatable , intent ( out ), optional :: message !! status message if ( present ( istatus )) istatus = me % istatus if ( present ( message )) message = trim ( rklib_error_messages ( me % istatus )) end subroutine rk_class_status !***************************************************************************************** !***************************************************************************************** !> ! Wrapper for exporting points during integration. subroutine export_point ( me , t , x , first_or_last ) class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x logical , intent ( in ), optional :: first_or_last !! if this is the first or !! last point (always reported) logical :: export !! if the point is to be exported if ( associated ( me % report ) . and . me % report_rate > 0 ) then export = . false . if ( present ( first_or_last )) then ! always report first and last step if ( first_or_last ) export = . true . end if if (. not . export ) then ! report steps at user-specified rate export = modulo ( me % num_steps , me % report_rate ) == 0 end if if ( export ) call me % report ( t , x ) end if end subroutine export_point !***************************************************************************************** !***************************************************************************************** !> ! Destructor for the FSAL variables. subroutine destroy_fsal_cache ( me ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me if ( allocated ( me % t_saved )) deallocate ( me % t_saved ) if ( allocated ( me % x_saved )) deallocate ( me % x_saved ) if ( allocated ( me % f_saved )) deallocate ( me % f_saved ) end subroutine destroy_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Check the FSAL cache. subroutine check_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f logical :: fsal !! if we can avoid a step due to first-same-as-last fsal = . false . if ( allocated ( me % x_saved )) then if ( size ( x ) == size ( me % x_saved )) then fsal = all ( x == me % x_saved ) . and . t == me % t_saved end if end if if ( fsal ) then f = me % f_saved else call me % f ( t , x , f ) end if end subroutine check_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Compute the function and add it to the FSAL cache. subroutine set_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f call me % f ( t , x , f ) me % t_saved = t me % x_saved = x me % f_saved = f end subroutine set_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_class]]. subroutine initialize_rk_class ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( event_func ), optional :: g !! for stopping at an event procedure ( report_func ), optional :: report !! for reporting the steps logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. type ( rklib_properties ) :: props !! to get the method properties call me % destroy () me % n = n me % f => f if ( present ( report )) me % report => report if ( present ( g )) me % g => g if ( present ( stop_on_errors )) me % stop_on_errors = stop_on_errors if ( present ( max_number_of_steps )) me % max_number_of_steps = abs ( max_number_of_steps ) if ( present ( report_rate )) me % report_rate = abs ( report_rate ) if ( present ( solver )) me % solver = solver ! allocate the registers: props = me % properties () if ( allocated ( me % funcs )) deallocate ( me % funcs ) allocate ( me % funcs ( n , props % number_of_registers )) me % funcs = zero ! reset internal variables: me % num_steps = 0 me % stopped = . false . end subroutine initialize_rk_class !***************************************************************************************** !***************************************************************************************** !> ! Begin an integration. subroutine begin_integration_rk_class ( me ) class ( rk_class ), intent ( inout ) :: me call me % clear_exception () me % num_steps = 0 me % stopped = . false . end subroutine begin_integration_rk_class !***************************************************************************************** !***************************************************************************************** !> ! Begin a [[rk_fixed_step_class]] integration. subroutine begin_integration_rk_fixed_step_class ( me ) class ( rk_fixed_step_class ), intent ( inout ) :: me call me % begin () ! all we need is base method here. end subroutine begin_integration_rk_fixed_step_class !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_fixed_step_class]]. subroutine initialize_fixed_step ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. ! base init all we need here: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) end subroutine initialize_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Main integration routine for the [[rk_class]]. subroutine integrate_fixed_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t !! current time value real ( wp ) :: dt !! time step from `t` to `t2` real ( wp ) :: t2 !! time to step to from `t` real ( wp ), dimension ( me % n ) :: x !! state vector logical :: last !! if it is the last step if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( h ) > zero ) then t = t0 x = x0 dt = sign ( h , tf - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do else xf = x0 end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Event-finding integration routine for the [[rk_class]]. ! Integrates until g(t,x)=0, or until t=tf (whichever happens first). ! !@note There are some efficiency improvements that could be made here. ! This is a work in progress. subroutine integrate_to_event_fixed_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension (:), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf !local variables: real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum real ( wp ), dimension ( me % n ) :: x !! state vector real ( wp ), dimension ( me % n ) :: g_xf !! state vector from the root finder logical :: first !! it is the first step logical :: last !! it is the last step integer :: iflag !! return flag from `solver` if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t0 , x0 , ga ) !evaluate event function dt = sign ( h , tmax - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . end do end if call me % export_point ( t2 , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g !take a step from t to t+delt and evaluate g function: call me % step ( t , x , delt , g_xf ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Use intrinsic `norm2(x)` for computing the vector norm. pure function norm2_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = norm2 ( x ) end function norm2_func !***************************************************************************************** !***************************************************************************************** !> ! Use `maxval(abs(x))` for computing the vector norm. pure function maxval_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = maxval ( abs ( x )) end function maxval_func !***************************************************************************************** !***************************************************************************************** !> ! Constructor for a [[stepsize_class]]. pure subroutine stepsize_class_constructor ( me , hmin , hmax , hfactor_reject ,& hfactor_accept , norm , accept_mode , relative_err ,& safety_factor , p_exponent_offset , max_attempts ,& fixed_step_mode ) implicit none class ( stepsize_class ), intent ( inout ) :: me real ( wp ), intent ( in ), optional :: hmin !! minimum allowed step size (>0) real ( wp ), intent ( in ), optional :: hmax !! maximum allowed step size (>0) real ( wp ), intent ( in ), optional :: hfactor_reject !! minimum allowed factor for !! decreasing step size after !! rejected step (>0) real ( wp ), intent ( in ), optional :: hfactor_accept !! maximum allowed factor for !! decreasing step size after !! accepted step (>0) procedure ( norm_func ), optional :: norm !! the user-specified ||x|| !! function integer , intent ( in ), optional :: accept_mode !! method to determine if step !! is accepted [1,2] integer , intent ( in ), optional :: max_attempts !! max step size change attempts !! after rejected step logical , intent ( in ), optional :: relative_err !! to use `tol*h` in the `hfactor` equation real ( wp ), intent ( in ), optional :: safety_factor !! for `hfactor` equation (>0) integer , intent ( in ), optional :: p_exponent_offset !! p + this value in the exponent (0 or 1) logical , intent ( in ), optional :: fixed_step_mode !! if true, then the method runs in !! fixed step mode with not error estimation. !! All the other inputs are ignored. Note that !! this requires a `dt /= 0` input for the integrator. if ( present ( hmin )) me % hmin = abs ( hmin ) if ( present ( hmax )) me % hmax = abs ( hmax ) if ( present ( hfactor_reject )) me % hfactor_reject = abs ( hfactor_reject ) if ( present ( hfactor_accept )) me % hfactor_accept = abs ( hfactor_accept ) if ( present ( norm )) me % norm => norm if ( present ( accept_mode )) me % accept_mode = accept_mode if ( present ( max_attempts )) me % max_attempts = max_attempts !if (present(compute_h_factor)) me%compute_h_factor => compute_h_factor if ( present ( relative_err )) me % relative_err = relative_err if ( present ( safety_factor )) me % safety_factor = abs ( safety_factor ) if ( present ( p_exponent_offset )) me % p_exponent_offset = abs ( p_exponent_offset ) if ( present ( fixed_step_mode )) me % fixed_step_mode = fixed_step_mode end subroutine stepsize_class_constructor !***************************************************************************************** !***************************************************************************************** !> ! Destructor for [[stepsize_class]]. subroutine destroy_stepsize_class ( me ) implicit none class ( stepsize_class ), intent ( out ) :: me end subroutine destroy_stepsize_class !***************************************************************************************** !***************************************************************************************** !> ! Compute the new step size using the specific method. subroutine compute_stepsize ( me , n , h , tol , err , p , hnew , accept ) implicit none class ( stepsize_class ), intent ( in ) :: me integer , intent ( in ) :: n !! number of variables real ( wp ), intent ( in ) :: h !! current step size (<>0) real ( wp ), dimension ( n ), intent ( in ) :: tol !! abs error tolerance (>0) real ( wp ), dimension ( n ), intent ( in ) :: err !! truncation error estimate (>0) integer , intent ( in ) :: p !! order of the method real ( wp ), intent ( out ) :: hnew !! new step size (<>0) logical , intent ( out ) :: accept !! if the step is accepted real ( wp ) :: e !! exponent real ( wp ) :: hfactor !! step size factor (>0) real ( wp ) :: max_err !! max error for all the elements real ( wp ), parameter :: small = 1 0.0_wp * epsilon ( 1.0_wp ) !! small error value if ( me % fixed_step_mode ) then ! do not adjust the step size accept = . true . hnew = h else if ( all ( err <= small )) then ! the error is extremely small hfactor = me % hfactor_accept accept = . true . else ! compute base factor based on the selected formula: if ( me % relative_err ) then max_err = me % norm ( err / tol * abs ( h )) else max_err = me % norm ( err / tol ) end if e = 1.0_wp / real ( p + me % p_exponent_offset , wp ) hfactor = abs ( me % safety_factor * ( 1.0_wp / max_err ) ** e ) ! if the step is to be accepted: select case ( me % accept_mode ) case ( 1 ) !algorithm 17.12 accept = hfactor >= 1.0_wp case ( 2 ) !algorithm 17.13 accept = me % norm ( err / tol ) <= 1.0_wp end select !...notes: ! see: L. Shampine \"Some Practical Runge-Kutta Formulas\", ! Mathematics of Computation, 46(173), Jan 1986. ! different conditions for satisfying error conditions: ! ||err|| <= tol -- Error per step (EPS) ! ||err|| <= h*tol -- Error per unit step (EPUS) !compute the actual hfactor based on the limits: if ( accept ) then hfactor = min ( me % hfactor_accept , hfactor ) else hfactor = max ( me % hfactor_reject , hfactor ) end if end if ! compute the new step size (enforce min/max bounds & add sign): hnew = sign ( max ( me % hmin , min ( me % hmax , abs ( h ) * hfactor )), h ) end if end subroutine compute_stepsize !***************************************************************************************** !***************************************************************************************** !> ! Begin a [[rk_variable_step_class]] integration. subroutine begin_integration_rk_variable_step_class ( me ) class ( rk_variable_step_class ), intent ( inout ) :: me call me % begin () ! base ! variable step params: me % num_rejected_steps = 0 me % last_accepted_step_size = zero select type ( me ) class is ( rk_variable_step_fsal_class ) call me % destroy_fsal_cache () end select end subroutine begin_integration_rk_variable_step_class !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_variable_step_class]]. subroutine initialize_variable_step ( me , n , f , rtol , atol , stepsize_method ,& hinit_method , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of equations procedure ( deriv_func ) :: f !! derivative function real ( wp ), dimension (:), intent ( in ), optional :: rtol !! relative tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used real ( wp ), dimension (:), intent ( in ), optional :: atol !! absolute tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used type ( stepsize_class ), intent ( in ), optional :: stepsize_method !! method for varying the step size integer , intent ( in ), optional :: hinit_method !! which method (1 or 2) to use for !! automatic initial step size !! computation. !! 1 = use `hstart`, 2 = use `hinit`. procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. real ( wp ), parameter :: default_tol = 100 * epsilon ( 1.0_wp ) !! if tols not specified ! base init: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) ! variable-step specific inputs: if ( allocated ( me % rtol )) deallocate ( me % rtol ) if ( allocated ( me % atol )) deallocate ( me % atol ) allocate ( me % rtol ( n )) allocate ( me % atol ( n )) if ( present ( rtol )) then if ( size ( rtol ) == 1 ) then me % rtol = abs ( rtol ( 1 )) !use this for all equations else if ( size ( rtol ) == n ) then me % rtol = abs ( rtol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_RTOL_SIZE ) end if else me % rtol = default_tol end if if ( present ( atol )) then if ( size ( atol ) == 1 ) then me % atol = abs ( atol ( 1 )) !use this for all equations else if ( size ( atol ) == n ) then me % atol = abs ( atol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_ATOL_SIZE ) end if else me % atol = default_tol end if if ( present ( hinit_method )) then if ( any ( hinit_method == [ 1 , 2 ])) then me % hinit_method = hinit_method else call me % raise_exception ( RKLIB_ERROR_INVALID_HINIT_METHOD ) return end if end if if ( present ( stepsize_method )) me % stepsize_method = stepsize_method ! reset internal variables: me % num_rejected_steps = 0 me % last_accepted_step_size = zero end subroutine initialize_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Return some info about the integration. subroutine info_variable_step ( me , num_steps , num_rejected_steps , last_accepted_step_size ) implicit none class ( rk_variable_step_class ), intent ( in ) :: me integer , intent ( out ), optional :: num_steps !! number of steps taken integer , intent ( out ), optional :: num_rejected_steps !! number of rejected steps real ( wp ), intent ( out ), optional :: last_accepted_step_size !! the last accepted step size !! `dt` from the integration !! (positive or negative) if ( present ( num_steps )) num_steps = me % num_steps if ( present ( num_rejected_steps )) num_rejected_steps = me % num_rejected_steps if ( present ( last_accepted_step_size )) last_accepted_step_size = me % last_accepted_step_size end subroutine info_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Compute the initial step size. function compute_initial_step ( me , t0 , tf , x0 , h0 ) result ( dt ) class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: h0 !! user-input initial step size (if zero, then one is computed) real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), intent ( in ) :: tf !! final time real ( wp ) :: dt !! step size to use real ( wp ), dimension ( me % n ) :: x0 !! initial state real ( wp ), dimension ( me % n ) :: etol !! tolerance vector real ( wp ), dimension ( me % n ) :: f0 !! initial derivative if ( abs ( h0 ) <= zero ) then ! compute an appropriate initial step size: etol = me % rtol * me % stepsize_method % norm ( x0 ) + me % atol call me % f ( t0 , x0 , f0 ) ! get initial dx/dt select case ( me % hinit_method ) ! value was checked in initialize_variable_step case ( 1 ); call me % hstart ( t0 , tf , x0 , f0 , etol , dt ) case ( 2 ); dt = me % hinit ( t0 , x0 , sign ( 1.0_wp , tf - t0 ), f0 ,& me % stepsize_method % hmax ,& me % atol , me % rtol ) end select else ! user-specified initial step size: dt = sign ( h0 , tf - t0 ) ! (correct sign) end if end function compute_initial_step !***************************************************************************************** !***************************************************************************************** !> ! Main integration routine for the [[rk_variable_step_class]]. subroutine integrate_variable_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! initial abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t , dt , t2 , dt_new real ( wp ), dimension ( me % n ) :: x , xerr , tol logical :: last !! it is the last step logical :: accept !! the step is accepted integer :: i !! max step size reduction attempts counter integer :: p !! order of the method if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tf ) <= zero ) then xf = x0 else t = t0 x = x0 dt = me % compute_initial_step ( t0 , tf , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) tol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , tol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tf ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tf )) ! if ( last ) dt = tf - t ! t2 = t + dt end if end do if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Event-finding integration routine for the [[rk_variable_step_class]]. ! Integrates until g(t,x)=0, or until t=tf (whichever happens first). ! !@note There are some efficiency improvements that could be made here. ! This is a work in progress. subroutine integrate_to_event_variable_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf real ( wp ), dimension ( me % n ) :: x , g_xf real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate real ( wp ), dimension ( me % n ) :: stol integer :: i , p , iflag real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum , dt_new logical :: first , last , accept if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t , x , ga ) !evaluate event function dt = me % compute_initial_step ( t0 , tmax , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) stol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , stol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tmax ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax else t2 = t + dt end if end if end do call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . if ( last ) exit x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate !take a step from t to t+delt and evaluate g function: ! [we don't check the error because we are within a ! step that was already accepted, so it should be ok] call me % step ( t , x , delt , g_xf , xerr ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Computes a starting step size to be used in solving initial ! value problems in ordinary differential equations. ! ! It is based on an estimate of the local lipschitz constant for the ! differential equation (lower bound on a norm of the jacobian) , ! a bound on the differential equation (first derivative), and ! a bound on the partial derivative of the equation with respect to ! the independent variable. (all approximated near the initial point a) ! !@note Subroutine hstart also uses the `me%stepsize_method%norm` ! function for computing vector norms ! !@note This routine is from [DDEABM](https://github.com/jacobwilliams/ddeabm). ! !# History ! * 820301 date written -- watts, h. a., (snla) ! * 890531 changed all specific intrinsics to generic. (wrb) ! * 890831 modified array declarations. (wrb) ! * 890911 removed unnecessary intrinsics. (wrb) ! * 891024 changed references from dvnorm to dhvnrm. (wrb) ! * 891214 prologue converted to version 4.0 format. (bab) ! * 900328 added type section. (wrb) ! * 910722 updated author section. (als) ! * December, 2015 : Refactored this routine (jw) ! * April 2016 : Some modifications for the variable-step RK module (jw) subroutine hstart ( me , a , b , y , yprime , etol , h ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: a !! the initial point of integration. real ( wp ), intent ( in ) :: b !! a value of the independent variable used to define !! the direction of integration. a reasonable choice is to !! set `b` to the first point at which a solution is desired. !! you can also use `b`, if necessary, to restrict the length !! of the first integration step because the algorithm will !! not compute a starting step length which is bigger than !! `abs(b-a)`, unless `b` has been chosen too close to `a`. !! (it is presumed that hstart has been called with `b` !! different from `a` on the machine being used. also see the !! discussion about the parameter `small`.) real ( wp ), dimension ( me % n ), intent ( in ) :: y !! the vector of initial values of the `neq` solution !! components at the initial point `a`. real ( wp ), dimension ( me % n ), intent ( in ) :: yprime !! the vector of derivatives of the `neq` !! solution components at the initial point `a`. !! (defined by the differential equations in subroutine `me%f`) real ( wp ), dimension ( me % n ), intent ( in ) :: etol !! the vector of error tolerances corresponding to !! the `neq` solution components. it is assumed that all !! elements are positive. following the first integration !! step, the tolerances are expected to be used by the !! integrator in an error test which roughly requires that !! `abs(local error) <= etol` for each vector component. real ( wp ), intent ( out ) :: h !! appropriate starting step size to be attempted by the !! differential equation method. real ( wp ), dimension ( me % n ) :: spy !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: pv !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: yp !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: sf !! work array which provide the routine with needed storage space. real ( wp ), parameter :: small = epsilon ( 1.0_wp ) real ( wp ), parameter :: big = huge ( 1.0_wp ) real ( wp ), parameter :: relper = small ** 0.375_wp integer :: j , k , lk real ( wp ) :: absdx , da , delf , dely ,& dfdub , dfdxb ,& dx , dy , fbnd ,& srydpb , tolexp , tolmin , tolp , tolsum , ydpb integer :: morder !! the order of the formula which will be used by !! the initial value method for taking the first integration !! step. morder = me % order () dx = b - a absdx = abs ( dx ) ! compute an approximate bound (dfdxb) on the partial ! derivative of the equation with respect to the ! independent variable. protect against an overflow. ! also compute a bound (fbnd) on the first derivative ! locally. da = sign ( max ( min ( relper * abs ( a ), absdx ), 10 0.0_wp * small * abs ( a )), dx ) if ( da == zero ) da = relper * dx call me % f ( a + da , y , sf ) yp = sf - yprime delf = me % stepsize_method % norm ( yp ) dfdxb = big if ( delf < big * abs ( da )) dfdxb = delf / abs ( da ) fbnd = me % stepsize_method % norm ( sf ) ! compute an estimate (dfdub) of the local lipschitz ! constant for the system of differential equations. this ! also represents an estimate of the norm of the jacobian ! locally. three iterations (two when neq=1) are used to ! estimate the lipschitz constant by numerical differences. ! the first perturbation vector is based on the initial ! derivatives and direction of integration. the second ! perturbation vector is formed using another evaluation of ! the differential equation. the third perturbation vector ! is formed using perturbations based only on the initial ! values. components that are zero are always changed to ! non-zero values (except on the first iteration). when ! information is available, care is taken to ensure that ! components of the perturbation vector have signs which are ! consistent with the slopes of local solution curves. ! also choose the largest bound (fbnd) for the first ! derivative. ! ! perturbation vector size is held ! constant for all iterations. compute ! this change from the ! size of the vector of initial ! values. dely = relper * me % stepsize_method % norm ( y ) if ( dely == zero ) dely = relper dely = sign ( dely , dx ) delf = me % stepsize_method % norm ( yprime ) fbnd = max ( fbnd , delf ) if ( delf == zero ) then ! cannot have a null perturbation vector spy = zero yp = 1.0_wp delf = me % stepsize_method % norm ( yp ) else ! use initial derivatives for first perturbation spy = yprime yp = yprime end if dfdub = zero lk = min ( me % n + 1 , 3 ) do k = 1 , lk ! define perturbed vector of initial values pv = y + yp * ( dely / delf ) if ( k == 2 ) then ! use a shifted value of the independent variable ! in computing one estimate call me % f ( a + da , pv , yp ) pv = yp - sf else ! evaluate derivatives associated with perturbed ! vector and compute corresponding differences call me % f ( a , pv , yp ) pv = yp - yprime end if ! choose largest bounds on the first derivative ! and a local lipschitz constant fbnd = max ( fbnd , me % stepsize_method % norm ( yp )) delf = me % stepsize_method % norm ( pv ) if ( delf >= big * abs ( dely )) then ! protect against an overflow dfdub = big exit end if dfdub = max ( dfdub , delf / abs ( dely )) if ( k == lk ) exit ! choose next perturbation vector if ( delf == zero ) delf = 1.0_wp do j = 1 , me % n if ( k == 2 ) then dy = y ( j ) if ( dy == zero ) dy = dely / relper else dy = abs ( pv ( j )) if ( dy == zero ) dy = delf end if if ( spy ( j ) == zero ) spy ( j ) = yp ( j ) if ( spy ( j ) /= zero ) dy = sign ( dy , spy ( j )) yp ( j ) = dy end do delf = me % stepsize_method % norm ( yp ) end do ! compute a bound (ydpb) on the norm of the second derivative ydpb = dfdxb + dfdub * fbnd ! define the tolerance parameter upon which the starting step ! size is to be based. a value in the middle of the error ! tolerance range is selected. tolmin = big tolsum = zero do k = 1 , me % n tolexp = log10 ( etol ( k )) tolmin = min ( tolmin , tolexp ) tolsum = tolsum + tolexp end do tolp = 1 0.0_wp ** ( 0.5_wp * ( tolsum / me % n + tolmin ) / ( morder + 1 )) ! compute a starting step size based on the above first and ! second derivative information ! ! restrict the step length to be not bigger ! than abs(b-a). (unless b is too close to a) h = absdx if ( ydpb == zero . and . fbnd == zero ) then ! both first derivative term (fbnd) and second ! derivative term (ydpb) are zero if ( tolp < 1.0_wp ) h = absdx * tolp elseif ( ydpb == zero ) then ! only second derivative term (ydpb) is zero if ( tolp < fbnd * absdx ) h = tolp / fbnd else ! second derivative term (ydpb) is non-zero srydpb = sqrt ( 0.5_wp * ydpb ) if ( tolp < srydpb * absdx ) h = tolp / srydpb end if ! further restrict the step length to be not bigger than 1/dfdub if ( h * dfdub > 1.0_wp ) h = 1.0_wp / dfdub ! finally, restrict the step length to be not ! smaller than 100*small*abs(a). however, if ! a=0. and the computed h underflowed to zero, ! the algorithm returns small*abs(b) for the step length. h = max ( h , 10 0.0_wp * small * abs ( a )) if ( h == zero ) h = small * abs ( b ) ! now set direction of integration h = sign ( h , dx ) end subroutine hstart !***************************************************************************************** !***************************************************************************************** !> ! computation of an initial step size guess ! !@note This routine is from dop853. It was modified for this module. function hinit ( me , x , y , posneg , f0 , hmax , atol , rtol ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: x real ( wp ), dimension (:), intent ( in ) :: y !! dimension(n) real ( wp ), intent ( in ) :: posneg !! posneg = sign(1.0_wp,xend-x) real ( wp ), dimension (:), intent ( in ) :: f0 !! dimension(n) real ( wp ), intent ( in ) :: hmax real ( wp ), dimension (:), intent ( in ) :: atol real ( wp ), dimension (:), intent ( in ) :: rtol real ( wp ) :: der12 , der2 , dnf , dny , h , h1 , hinit , sk integer :: i integer :: iord !! order of the method real ( wp ), dimension ( me % n ) :: f1 , y1 iord = me % order () ! compute a first guess for explicit euler as ! h = 0.01 * norm (y0) / norm (f0) ! the increment for explicit euler is small ! compared to the solution dnf = zero dny = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) dnf = dnf + ( f0 ( i ) / sk ) ** 2 dny = dny + ( y ( i ) / sk ) ** 2 end do if ( dnf <= 1.0e-10_wp . or . dny <= 1.0e-10_wp ) then h = 1.0e-6_wp else h = sqrt ( dny / dnf ) * 0.01_wp end if h = min ( h , hmax ) h = sign ( h , posneg ) ! perform an explicit euler step do i = 1 , me % n y1 ( i ) = y ( i ) + h * f0 ( i ) end do call me % f ( x + h , y1 , f1 ) ! estimate the second derivative of the solution der2 = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) der2 = der2 + (( f1 ( i ) - f0 ( i )) / sk ) ** 2 end do der2 = sqrt ( der2 ) / h ! step size is computed such that ! h**iord * max ( norm (f0), norm (der2)) = 0.01 der12 = max ( abs ( der2 ), sqrt ( dnf )) if ( der12 <= 1.0e-15_wp ) then h1 = max ( 1.0e-6_wp , abs ( h ) * 1.0e-3_wp ) else h1 = ( 0.01_wp / der12 ) ** ( 1.0_wp / iord ) end if h = min ( 10 0.0_wp * abs ( h ), h1 , hmax ) hinit = sign ( h , posneg ) end function hinit !***************************************************************************************** !***************************************************************************************** end module rklib_module !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_module.f90.html"},{"title":"rklib_fixed_steps.f90 – rklib","text":"This file depends on sourcefile~~rklib_fixed_steps.f90~~EfferentGraph sourcefile~rklib_fixed_steps.f90 rklib_fixed_steps.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_fixed_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_fixed_steps Source Code rklib_fixed_steps.f90 Source Code !***************************************************************************************** !> ! Fixed-step RK formulas. submodule ( rklib_module ) rklib_fixed_steps implicit none contains !***************************************************************************************** !***************************************************************************************** !> ! Euler (1st order) integration method. module procedure euler associate ( f1 => me % funcs (:, 1 )) call me % f ( t , x , f1 ) xf = x + h * f1 end associate end procedure euler !***************************************************************************************** !***************************************************************************************** !> ! Midpoint (2nd order) integration method. module procedure midpoint associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 )) call me % f ( t , x , f1 ) call me % f ( t + 0.5_wp * h , x + 0.5_wp * h * f1 , f2 ) xf = x + h * f2 end associate end procedure midpoint !***************************************************************************************** !***************************************************************************************** !> ! Heun's (2nd order) integration method module procedure heun associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 )) call me % f ( t , x , f1 ) call me % f ( t + h , x + h * f1 , f2 ) xf = x + 0.5_wp * h * ( f1 + f2 ) end associate end procedure heun !***************************************************************************************** !***************************************************************************************** !> ! 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. ! !### Reference ! * C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory ! shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471. ! https://doi.org/10.1016/0021-9991(88)90177-5. module procedure rkssp22 associate ( fs => me % funcs (:, 1 )) call me % f ( t , x , fs ) xf = x + h * fs call me % f ( t + h , xf , fs ) xf = ( x + xf + h * fs ) / 2.0_wp end associate end procedure rkssp22 !***************************************************************************************** !***************************************************************************************** !> ! 3rd order, 3 steps RK integration method module procedure rk3 real ( wp ), parameter :: a1 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a2 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b2 = 1.0_wp / 2.0_wp !real(wp),parameter :: b3 = 1.0_wp real ( wp ), parameter :: c21 = 1.0_wp / 2.0_wp !real(wp),parameter :: c31 = -1.0_wp real ( wp ), parameter :: c32 = 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 )) call me % f ( t , x , f1 ) call me % f ( t + b2 * h , x + h * c21 * f1 , f2 ) call me % f ( t + h , x + h * ( - f1 + c32 * f2 ), f3 ) xf = x + h * ( a1 * f1 + a2 * f2 + a3 * f3 ) end associate end procedure rk3 !***************************************************************************************** !***************************************************************************************** !> ! 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. ! !### Reference ! * C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory ! shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471. ! https://doi.org/10.1016/0021-9991(88)90177-5. module procedure rkssp33 associate ( fs => me % funcs (:, 1 )) call me % f ( t , x , fs ) xf = x + h * fs call me % f ( t + h , xf , fs ) xf = ( 3.0_wp * x + xf + h * fs ) / 4.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = ( x + 2.0_wp * xf + 2.0_wp * h * fs ) / 3.0_wp end associate end procedure rkssp33 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. ! !### Reference ! * Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta ! methods.\" Mathematics of Computation 75.253 (2006): 183-207. ! https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf ! !@note the coefficients here are only 15 digits of precision. module procedure rkssp53 real ( wp ), parameter :: a30 = 0.355909775063327_wp real ( wp ), parameter :: a32 = 0.644090224936674_wp real ( wp ), parameter :: a40 = 0.367933791638137_wp real ( wp ), parameter :: a43 = 0.632066208361863_wp real ( wp ), parameter :: a52 = 0.237593836598569_wp real ( wp ), parameter :: a54 = 0.762406163401431_wp real ( wp ), parameter :: b10 = 0.377268915331368_wp real ( wp ), parameter :: b21 = 0.377268915331368_wp real ( wp ), parameter :: b32 = 0.242995220537396_wp real ( wp ), parameter :: b43 = 0.238458932846290_wp real ( wp ), parameter :: b54 = 0.287632146308408_wp real ( wp ), parameter :: c1 = 0.377268915331368_wp real ( wp ), parameter :: c2 = 0.754537830662736_wp real ( wp ), parameter :: c3 = 0.728985661612188_wp real ( wp ), parameter :: c4 = 0.699226135931670_wp associate ( xs => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) call me % f ( t , x , fs ) ! x1 as xs xs = x + b10 * h * fs call me % f ( t + c1 * h , xs , fs ) ! x2 as xf xf = xs + b21 * h * fs call me % f ( t + c2 * h , xf , fs ) ! x3 as xs xs = a30 * x + a32 * xf + b32 * h * fs call me % f ( t + c3 * h , xs , fs ) ! x4 as xs xs = a40 * x + a43 * xs + b43 * h * fs call me % f ( t + c4 * h , xs , fs ) xf = a52 * xf + a54 * xs + b54 * h * fs end associate end procedure rkssp53 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 4 integration step: `t -> t+h (x -> xf)` module procedure rk4 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & h2 => 0.5_wp * h ) call me % f ( t , x , f1 ) call me % f ( t + h2 , x + h2 * f1 , f2 ) call me % f ( t + h2 , x + h2 * f2 , f3 ) call me % f ( t + h , x + h * f3 , f4 ) xf = x + h * ( f1 + f2 + f2 + f3 + f3 + f4 ) / 6.0_wp end associate end procedure rk4 !***************************************************************************************** !***************************************************************************************** !> ! 4th order Runge Kutta Shanks (4 points) ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rks4 real ( wp ), parameter :: a1 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: a2 = 3.0_wp / 5.0_wp !real(wp),parameter :: a3 = 1.0_wp real ( wp ), parameter :: c = 1.0_wp / 7009 2.0_wp real ( wp ), parameter :: c0 = - 17912 4.0_wp real ( wp ), parameter :: c1 = 20000 0.0_wp real ( wp ), parameter :: c2 = 4042 5.0_wp real ( wp ), parameter :: c3 = 879 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 24 5.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 879 1.0_wp real ( wp ), parameter :: b20 = - 427 8.0_wp real ( wp ), parameter :: b21 = 442 5.0_wp real ( wp ), parameter :: b30 = 52474 6.0_wp real ( wp ), parameter :: b31 = - 53212 5.0_wp real ( wp ), parameter :: b32 = 1617 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + h , x + aa3 * h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) xf = x + h * c * ( c0 * f0 + c1 * f1 + c2 * f2 + c3 * f3 ) end associate end procedure rks4 !***************************************************************************************** !***************************************************************************************** !> ! Ralston 4th order method with minimum truncation error. ! !### Reference ! * Ralston, Anthony (1962). ! \"[Runge-Kutta Methods with Minimum Error Bounds](https://www.ams.org/journals/mcom/1962-16-080/S0025-5718-1962-0150954-0/S0025-5718-1962-0150954-0.pdf)\". ! Math. Comput. 16 (80): 431-437. module procedure rkr4 real ( wp ), parameter :: sqrt5 = sqrt ( 5.0_wp ) real ( wp ), parameter :: a2 = 4.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = ( 1 4.0_wp - 3.0_wp * sqrt5 ) / 1 6.0_wp ! .45573725 real ( wp ), parameter :: b21 = 4.0_wp / 1 0.0_wp real ( wp ), parameter :: b31 = ( - 288 9.0_wp + 142 8.0_wp * sqrt5 ) / 102 4.0_wp ! .29697761 real ( wp ), parameter :: b32 = ( 378 5.0_wp - 162 0.0_wp * sqrt5 ) / 102 4.0_wp ! .15875964 real ( wp ), parameter :: b41 = ( - 336 5.0_wp + 209 4.0_wp * sqrt5 ) / 604 0.0_wp ! .21810040 real ( wp ), parameter :: b42 = ( - 97 5.0_wp - 304 6.0_wp * sqrt5 ) / 255 2.0_wp ! -3.05096516 real ( wp ), parameter :: b43 = ( 46704 0.0_wp + 20396 8.0_wp * sqrt5 ) / 24084 5.0_wp ! 3.83286476 real ( wp ), parameter :: c1 = ( 26 3.0_wp + 2 4.0_wp * sqrt5 ) / 181 2.0_wp ! .17476028 real ( wp ), parameter :: c2 = ( 12 5.0_wp - 100 0.0_wp * sqrt5 ) / 382 8.0_wp ! -.55148066 real ( wp ), parameter :: c3 = 102 4.0_wp * ( 334 6.0_wp + 162 3.0_wp * sqrt5 ) / 592478 7.0_wp ! 1.20553560 real ( wp ), parameter :: c4 = ( 3 0.0_wp - 4.0_wp * sqrt5 ) / 12 3.0_wp ! .17118478 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 ) end associate end procedure rkr4 !***************************************************************************************** !***************************************************************************************** !> ! 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). ! !### Reference ! * Method: Jiang, Guang-Shan, and Chi-Wang Shu. \"Efficient implementation of weighted ENO ! schemes.\" Journal of computational physics 126.1 (1996): 202-228. ! https://ntrs.nasa.gov/api/citations/19960007052/downloads/19960007052.pdf ! * Implementation: J. M. F. Donnert et al 2019 ApJS 241 23. ! https://iopscience.iop.org/article/10.3847/1538-4365/ab09fb module procedure rkls44 associate ( xs => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) xf = x xs = - 4.0_wp * x / 3.0_wp call me % f ( t , xf , fs ) xf = x + h * fs / 2.0_wp xs = xs + xf / 3.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = x + h * fs / 2.0_wp xs = xs + 2.0_wp * xf / 3.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = x + h * fs xs = xs + xf / 3.0_wp call me % f ( t + h , xf , fs ) xf = x + h * fs / 6.0_wp xf = xf + xs end associate end procedure rkls44 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. ! !### Reference ! * Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta ! methods.\" Mathematics of Computation 75.253 (2006): 183-207. ! https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf module procedure rkssp54 real ( wp ), parameter :: b10 = 0.391752226571890_wp real ( wp ), parameter :: a20 = 0.444370493651235_wp real ( wp ), parameter :: a21 = 0.555629506348765_wp real ( wp ), parameter :: b21 = 0.368410593050371_wp real ( wp ), parameter :: a30 = 0.620101851488403_wp real ( wp ), parameter :: a32 = 0.379898148511597_wp real ( wp ), parameter :: b32 = 0.251891774271694_wp real ( wp ), parameter :: a40 = 0.178079954393132_wp real ( wp ), parameter :: a43 = 0.821920045606868_wp real ( wp ), parameter :: b43 = 0.544974750228521_wp real ( wp ), parameter :: a52 = 0.517231671970585_wp real ( wp ), parameter :: a53 = 0.096059710526147_wp real ( wp ), parameter :: b53 = 0.063692468666290_wp real ( wp ), parameter :: a54 = 0.386708617503269_wp real ( wp ), parameter :: b54 = 0.226007483236906_wp real ( wp ), parameter :: c1 = 0.391752226571890_wp real ( wp ), parameter :: c2 = 0.586079689311540_wp real ( wp ), parameter :: c3 = 0.474542363121400_wp real ( wp ), parameter :: c4 = 0.935010630967653_wp associate ( x2 => me % funcs (:, 1 ), & x3 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & fs => me % funcs (:, 4 )) call me % f ( t , x , fs ) ! x2 as x1 x2 = x + b10 * h * fs call me % f ( t + c1 * h , x2 , fs ) x2 = a20 * x + a21 * x2 + b21 * h * fs call me % f ( t + c2 * h , x2 , fs ) x3 = a30 * x + a32 * x2 + b32 * h * fs call me % f ( t + c3 * h , x3 , f3 ) ! xf as x4 xf = a40 * x + a43 * x3 + b43 * h * f3 call me % f ( t + c4 * h , xf , fs ) xf = a52 * x2 + a53 * x3 + b53 * h * f3 + a54 * xf + b54 * h * fs end associate end procedure rkssp54 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994). ! CFL<=0.32 ! !### Reference ! * Carpenter, Mark H., and Christopher A. Kennedy. Fourth-order 2N-storage Runge-Kutta ! schemes. No. NASA-TM-109112. 1994. ! https://ntrs.nasa.gov/api/citations/19940028444/downloads/19940028444.pdf module procedure rkls54 real ( wp ), parameter :: a ( 2 : 5 ) = [ - 56730180577 3.0_wp / 135753705908 7.0_wp , & - 240426799039 3.0_wp / 201674669523 8.0_wp , & - 355091868664 6.0_wp / 209150117938 5.0_wp , & - 127580623766 8.0_wp / 84257045769 9.0_wp ] real ( wp ), parameter :: b ( 1 : 5 ) = [ 143299717447 7.0_wp / 957508044175 5.0_wp , & 516183667771 7.0_wp / 1361206829235 7.0_wp , & 172014632154 9.0_wp / 209020694949 8.0_wp , & 313456435353 7.0_wp / 448146731033 8.0_wp , & 227782119143 7.0_wp / 1488215175481 9.0_wp ] real ( wp ), parameter :: c ( 2 : 5 ) = [ 143299717447 7.0_wp / 957508044175 5.0_wp , & 252626934142 9.0_wp / 682036396289 6.0_wp , & 200634551931 7.0_wp / 322431006377 6.0_wp , & 280232161313 8.0_wp / 292431792625 1.0_wp ] integer :: i !! counter associate ( ds => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) call me % f ( t , x , fs ) ds = h * fs xf = x + b ( 1 ) * ds do i = 2 , 5 call me % f ( t + c ( i ) * h , xf , fs ) ds = a ( i ) * ds + h * fs xf = xf + b ( i ) * ds end do end associate end procedure rkls54 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Shanks (5th order) ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rks5 real ( wp ), parameter :: a1 = 1.0_wp / 900 0.0_wp real ( wp ), parameter :: a2 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 4.0_wp real ( wp ), parameter :: c = 1.0_wp / 113 4.0_wp real ( wp ), parameter :: c0 = 10 5.0_wp real ( wp ), parameter :: c2 = 50 0.0_wp real ( wp ), parameter :: c3 = 44 8.0_wp real ( wp ), parameter :: c4 = 8 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 900 0.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 8 1.0_wp real ( wp ), parameter :: b20 = - 404 7.0_wp real ( wp ), parameter :: b21 = 405 0.0_wp real ( wp ), parameter :: b30 = 2024 1.0_wp real ( wp ), parameter :: b31 = - 2025 0.0_wp real ( wp ), parameter :: b32 = 1 5.0_wp real ( wp ), parameter :: b40 = - 93104 1.0_wp real ( wp ), parameter :: b41 = 93150 0.0_wp real ( wp ), parameter :: b42 = - 49 0.0_wp real ( wp ), parameter :: b43 = 11 2.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + aa4 * h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) xf = x + h * c * ( c0 * f0 + c2 * f2 + c3 * f3 + c4 * f4 ) end associate end procedure rks5 !***************************************************************************************** !***************************************************************************************** !> ! Runge's 5th order method. module procedure rk5 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b41 = 9.0_wp / 4.0_wp real ( wp ), parameter :: b42 = - 5.0_wp real ( wp ), parameter :: b43 = 1 5.0_wp / 4.0_wp real ( wp ), parameter :: b51 = - 6 3.0_wp / 10 0.0_wp real ( wp ), parameter :: b52 = 9.0_wp / 5.0_wp real ( wp ), parameter :: b53 = - 1 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b54 = 2.0_wp / 2 5.0_wp real ( wp ), parameter :: b61 = - 6.0_wp / 2 5.0_wp real ( wp ), parameter :: b62 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b63 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b64 = 8.0_wp / 7 5.0_wp real ( wp ), parameter :: c1 = 1 7.0_wp / 14 4.0_wp real ( wp ), parameter :: c3 = 2 5.0_wp / 3 6.0_wp real ( wp ), parameter :: c4 = 1.0_wp / 7 2.0_wp real ( wp ), parameter :: c5 = - 2 5.0_wp / 7 2.0_wp real ( wp ), parameter :: c6 = 2 5.0_wp / 4 8.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rk5 !***************************************************************************************** !***************************************************************************************** !> ! Cassity's Order 5 method ! !### Reference ! * C.R. Cassity, Solutions of the fifth order Runge-Kutta equations, ! SIAM J. Numer. Anal., 3, (1966), pp. 598-606 ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5a_3.pdf) module procedure rkc5 real ( wp ), parameter :: a2 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a3 = 5.0_wp / 1 4.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 1 4.0_wp real ( wp ), parameter :: a5 = 6.0_wp / 7.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b31 = - 36 7.0_wp / 408 8.0_wp real ( wp ), parameter :: b32 = 26 1.0_wp / 58 4.0_wp real ( wp ), parameter :: b41 = 4199 1.0_wp / 204 4.0_wp real ( wp ), parameter :: b42 = - 249 3.0_wp / 7 3.0_wp real ( wp ), parameter :: b43 = 5 7.0_wp / 4.0_wp real ( wp ), parameter :: b51 = - 10841 3.0_wp / 19622 4.0_wp real ( wp ), parameter :: b52 = 5886 5.0_wp / 6540 8.0_wp real ( wp ), parameter :: b53 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b54 = 26 5.0_wp / 134 4.0_wp real ( wp ), parameter :: b61 = - 20441 9.0_wp / 5898 4.0_wp real ( wp ), parameter :: b62 = 14382 9.0_wp / 5898 4.0_wp real ( wp ), parameter :: b63 = 17 1.0_wp / 20 2.0_wp real ( wp ), parameter :: b64 = 220 5.0_wp / 40 4.0_wp real ( wp ), parameter :: b65 = - 43 2.0_wp / 10 1.0_wp real ( wp ), parameter :: c1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: c2 = 7.0_wp / 270 0.0_wp real ( wp ), parameter :: c3 = 41 3.0_wp / 81 0.0_wp real ( wp ), parameter :: c4 = 7.0_wp / 45 0.0_wp real ( wp ), parameter :: c5 = 2 8.0_wp / 7 5.0_wp real ( wp ), parameter :: c6 = - 10 1.0_wp / 810 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rkc5 !***************************************************************************************** !***************************************************************************************** !> ! 5th order Lawson ! !### References ! * An Order Five Runge Kutta Process with Extended Region of Stability, ! J. Douglas Lawson, Siam Journal on Numerical Analysis, ! Vol. 3, No. 4, (Dec., 1966) pages 593-597 module procedure rkl5 real ( wp ), parameter :: a2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b31 = - 1.0_wp / 8.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 8.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 5.0_wp real ( wp ), parameter :: b42 = - 9.0_wp / 1 0.0_wp real ( wp ), parameter :: b43 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b51 = 3 9.0_wp / 8 0.0_wp real ( wp ), parameter :: b52 = - 9.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b54 = 9.0_wp / 1 6.0_wp real ( wp ), parameter :: b61 = - 5 9.0_wp / 3 5.0_wp real ( wp ), parameter :: b62 = 6 6.0_wp / 3 5.0_wp real ( wp ), parameter :: b63 = 4 8.0_wp / 3 5.0_wp real ( wp ), parameter :: b64 = - 1 2.0_wp / 7.0_wp real ( wp ), parameter :: b65 = 8.0_wp / 7.0_wp real ( wp ), parameter :: c1 = 7.0_wp / 9 0.0_wp real ( wp ), parameter :: c3 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c4 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: c5 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c6 = 7.0_wp / 9 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rkl5 !***************************************************************************************** !***************************************************************************************** !> ! Luther and Konen's 5th order method (1) ! !### References ! * H.A.Luther and H.P.Konen, ! \"Some Fifth-Order Classical Runge Kutta Formulas\", ! Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. module procedure rklk5a real ( wp ), parameter :: sqrt5 = sqrt ( 5.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp - 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp + 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 1 0.0_wp - 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: b41 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b42 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b51 = 1.0_wp / 2 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt5 real ( wp ), parameter :: b52 = - 1.0_wp / 5.0_wp real ( wp ), parameter :: b53 = 1.0_wp / 4.0_wp + 3.0_wp / 2 0.0_wp * sqrt5 real ( wp ), parameter :: b54 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b61 = 1.0_wp / 4.0_wp * sqrt5 - 1.0_wp / 4.0_wp real ( wp ), parameter :: b62 = 1.0_wp / 2.0_wp * sqrt5 - 1.0_wp / 2.0_wp real ( wp ), parameter :: b63 = 5.0_wp / 4.0_wp - 1.0_wp / 4.0_wp * sqrt5 real ( wp ), parameter :: b64 = - 2.0_wp real ( wp ), parameter :: b65 = 5.0_wp / 2.0_wp - 1.0_wp / 2.0_wp * sqrt5 real ( wp ), parameter :: c1 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: c3 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: c5 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: c6 = 1.0_wp / 1 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c5 * f5 + c6 * f6 ) end associate end procedure rklk5a !***************************************************************************************** !***************************************************************************************** !> ! Luther and Konen's 5th order method (2) ! !### References ! * H.A.Luther and H.P.Konen, ! \"Some Fifth-Order Classical Runge Kutta Formulas\", ! Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. module procedure rklk5b real ( wp ), parameter :: sqrt15 = sqrt ( 1 5.0_wp ) real ( wp ), parameter :: a2 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp - 1.0_wp / 1 0.0_wp * sqrt15 real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp + 1.0_wp / 1 0.0_wp * sqrt15 real ( wp ), parameter :: b21 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 1 6.0_wp real ( wp ), parameter :: b32 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b42 = - 5.0_wp / 4.0_wp real ( wp ), parameter :: b43 = 2.0_wp real ( wp ), parameter :: b51 = 3.0_wp / 2 0.0_wp - 1.0_wp / 10 0.0_wp * sqrt15 real ( wp ), parameter :: b52 = - 1.0_wp / 4.0_wp real ( wp ), parameter :: b53 = 3.0_wp / 5.0_wp - 2.0_wp / 2 5.0_wp * sqrt15 real ( wp ), parameter :: b54 = - 1.0_wp / 10 0.0_wp * sqrt15 real ( wp ), parameter :: b61 = - 3.0_wp / 2 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt15 real ( wp ), parameter :: b62 = - 1.0_wp / 4.0_wp real ( wp ), parameter :: b63 = 3.0_wp / 5.0_wp real ( wp ), parameter :: b64 = 3.0_wp / 1 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt15 real ( wp ), parameter :: b65 = 1.0_wp / 5.0_wp * sqrt15 real ( wp ), parameter :: c3 = 4.0_wp / 9.0_wp real ( wp ), parameter :: c5 = 5.0_wp / 1 8.0_wp real ( wp ), parameter :: c6 = 5.0_wp / 1 8.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c3 * f3 + c5 * f5 + c6 * f6 ) end associate end procedure rklk5b !***************************************************************************************** !***************************************************************************************** !> ! Butcher's 6th order method. 7 function evaluations. ! !### References ! * Butcher, J. (1964). On Runge-Kutta processes of high order. ! Journal of the Australian Mathematical Society, 4(2), 179-194. module procedure rkb6 real ( wp ), parameter :: a2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 3.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b42 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b43 = - 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b51 = - 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b52 = 9.0_wp / 8.0_wp real ( wp ), parameter :: b53 = - 3.0_wp / 1 6.0_wp real ( wp ), parameter :: b54 = - 3.0_wp / 8.0_wp real ( wp ), parameter :: b62 = 9.0_wp / 8.0_wp real ( wp ), parameter :: b63 = - 3.0_wp / 8.0_wp real ( wp ), parameter :: b64 = - 3.0_wp / 4.0_wp real ( wp ), parameter :: b65 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b71 = 9.0_wp / 4 4.0_wp real ( wp ), parameter :: b72 = - 9.0_wp / 1 1.0_wp real ( wp ), parameter :: b73 = 6 3.0_wp / 4 4.0_wp real ( wp ), parameter :: b74 = 1 8.0_wp / 1 1.0_wp real ( wp ), parameter :: b76 = - 1 6.0_wp / 1 1.0_wp real ( wp ), parameter :: c1 = 1 1.0_wp / 12 0.0_wp real ( wp ), parameter :: c3 = 2 7.0_wp / 4 0.0_wp real ( wp ), parameter :: c4 = 2 7.0_wp / 4 0.0_wp real ( wp ), parameter :: c5 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: c6 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: c7 = 1 1.0_wp / 12 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) end associate end procedure rkb6 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 7 integration step: `t -> t+h (x -> xf)` ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rk7 real ( wp ), parameter :: a1 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 8.0_wp / 9.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a7 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 214032 0.0_wp real ( wp ), parameter :: c0 = 11020 1.0_wp real ( wp ), parameter :: c3 = 76793 6.0_wp real ( wp ), parameter :: c4 = 63504 0.0_wp real ( wp ), parameter :: c5 = - 5904 9.0_wp real ( wp ), parameter :: c6 = - 5904 9.0_wp real ( wp ), parameter :: c7 = 63504 0.0_wp real ( wp ), parameter :: c8 = 11020 1.0_wp real ( wp ), parameter :: aa1 = 2.0_wp / 9.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 21 6.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 72 9.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 15163 2.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 137592 0.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 25188 8.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b40 = 2 3.0_wp real ( wp ), parameter :: b42 = 2 1.0_wp real ( wp ), parameter :: b43 = - 8.0_wp real ( wp ), parameter :: b50 = - 413 6.0_wp real ( wp ), parameter :: b52 = - 1358 4.0_wp real ( wp ), parameter :: b53 = 526 4.0_wp real ( wp ), parameter :: b54 = 1310 4.0_wp real ( wp ), parameter :: b60 = 10513 1.0_wp real ( wp ), parameter :: b62 = 30201 6.0_wp real ( wp ), parameter :: b63 = - 10774 4.0_wp real ( wp ), parameter :: b64 = - 28425 6.0_wp real ( wp ), parameter :: b65 = 170 1.0_wp real ( wp ), parameter :: b70 = - 77522 9.0_wp real ( wp ), parameter :: b72 = - 277095 0.0_wp real ( wp ), parameter :: b73 = 173513 6.0_wp real ( wp ), parameter :: b74 = 254721 6.0_wp real ( wp ), parameter :: b75 = 8189 1.0_wp real ( wp ), parameter :: b76 = 32853 6.0_wp real ( wp ), parameter :: b80 = 2356 9.0_wp real ( wp ), parameter :: b82 = - 12230 4.0_wp real ( wp ), parameter :: b83 = - 2038 4.0_wp real ( wp ), parameter :: b84 = 69552 0.0_wp real ( wp ), parameter :: b85 = - 9987 3.0_wp real ( wp ), parameter :: b86 = - 46656 0.0_wp real ( wp ), parameter :: b87 = 24192 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * ( f0 ), f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + aa7 * h * ( b70 * f0 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + aa8 * h * ( b80 * f0 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) xf = x + h * c * ( c0 * f0 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) end associate end procedure rk7 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 8 integration step: `t -> t+h (x -> xf)` ! This is Formula (8-10) from Reference [1]. ! !# Reference ! 1. E. B. Shanks, \"[Higher Order Approximations of Runge-Kutta Type](http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19650022581.pdf)\", ! NASA Technical Note, NASA TN D-2920, Sept. 1965. module procedure rk8_10 real ( wp ), parameter :: a1 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: a2 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a8 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c0 = 4 1.0_wp real ( wp ), parameter :: c3 = 2 7.0_wp real ( wp ), parameter :: c4 = 27 2.0_wp real ( wp ), parameter :: c5 = 2 7.0_wp real ( wp ), parameter :: c6 = 21 6.0_wp real ( wp ), parameter :: c8 = 21 6.0_wp real ( wp ), parameter :: c9 = 4 1.0_wp real ( wp ), parameter :: aa1 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 5 4.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 432 0.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 28 8.0_wp real ( wp ), parameter :: aa9 = 1.0_wp / 82 0.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b43 = 3.0_wp real ( wp ), parameter :: b50 = 1 3.0_wp real ( wp ), parameter :: b52 = - 2 7.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp real ( wp ), parameter :: b54 = 8.0_wp real ( wp ), parameter :: b60 = 38 9.0_wp real ( wp ), parameter :: b62 = - 5 4.0_wp real ( wp ), parameter :: b63 = 96 6.0_wp real ( wp ), parameter :: b64 = - 82 4.0_wp real ( wp ), parameter :: b65 = 24 3.0_wp real ( wp ), parameter :: b70 = - 23 1.0_wp real ( wp ), parameter :: b72 = 8 1.0_wp real ( wp ), parameter :: b73 = - 116 4.0_wp real ( wp ), parameter :: b74 = 65 6.0_wp real ( wp ), parameter :: b75 = - 12 2.0_wp real ( wp ), parameter :: b76 = 80 0.0_wp real ( wp ), parameter :: b80 = - 12 7.0_wp real ( wp ), parameter :: b82 = 1 8.0_wp real ( wp ), parameter :: b83 = - 67 8.0_wp real ( wp ), parameter :: b84 = 45 6.0_wp real ( wp ), parameter :: b85 = - 9.0_wp real ( wp ), parameter :: b86 = 57 6.0_wp real ( wp ), parameter :: b87 = 4.0_wp real ( wp ), parameter :: b90 = 148 1.0_wp real ( wp ), parameter :: b92 = - 8 1.0_wp real ( wp ), parameter :: b93 = 710 4.0_wp real ( wp ), parameter :: b94 = - 337 6.0_wp real ( wp ), parameter :: b95 = 7 2.0_wp real ( wp ), parameter :: b96 = - 504 0.0_wp real ( wp ), parameter :: b97 = - 6 0.0_wp real ( wp ), parameter :: b98 = 72 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( f0 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + aa7 * h * ( b70 * f0 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + aa8 * h * ( b80 * f0 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + aa9 * h * ( b90 * f0 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * c * ( c0 * f0 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c8 * f8 + c9 * f9 ) end associate end procedure rk8_10 !***************************************************************************************** !***************************************************************************************** !> ! 8th order Shanks, 12 function evaluations. ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rk8_12 real ( wp ), parameter :: a1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a8 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a10 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c0 = 4 1.0_wp real ( wp ), parameter :: c5 = 21 6.0_wp real ( wp ), parameter :: c6 = 27 2.0_wp real ( wp ), parameter :: c7 = 2 7.0_wp real ( wp ), parameter :: c8 = 2 7.0_wp real ( wp ), parameter :: c9 = 3 6.0_wp real ( wp ), parameter :: c10 = 18 0.0_wp real ( wp ), parameter :: c11 = 4 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 1 6.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 50 0.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 97 2.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 3 6.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 24 3.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 32 4.0_wp real ( wp ), parameter :: aa9 = 1.0_wp / 32 4.0_wp real ( wp ), parameter :: aa10 = 1.0_wp / 162 0.0_wp real ( wp ), parameter :: aa11 = 1.0_wp / 442 8.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b40 = 2 9.0_wp real ( wp ), parameter :: b42 = 3 3.0_wp real ( wp ), parameter :: b43 = - 1 2.0_wp real ( wp ), parameter :: b50 = 3 3.0_wp real ( wp ), parameter :: b53 = 4.0_wp real ( wp ), parameter :: b54 = 12 5.0_wp real ( wp ), parameter :: b60 = - 2 1.0_wp real ( wp ), parameter :: b63 = 7 6.0_wp real ( wp ), parameter :: b64 = 12 5.0_wp real ( wp ), parameter :: b65 = - 16 2.0_wp real ( wp ), parameter :: b70 = - 3 0.0_wp real ( wp ), parameter :: b73 = - 3 2.0_wp real ( wp ), parameter :: b74 = 12 5.0_wp real ( wp ), parameter :: b76 = 9 9.0_wp real ( wp ), parameter :: b80 = 117 5.0_wp real ( wp ), parameter :: b83 = - 345 6.0_wp real ( wp ), parameter :: b84 = - 625 0.0_wp real ( wp ), parameter :: b85 = 842 4.0_wp real ( wp ), parameter :: b86 = 24 2.0_wp real ( wp ), parameter :: b87 = - 2 7.0_wp real ( wp ), parameter :: b90 = 29 3.0_wp real ( wp ), parameter :: b93 = - 85 2.0_wp real ( wp ), parameter :: b94 = - 137 5.0_wp real ( wp ), parameter :: b95 = 183 6.0_wp real ( wp ), parameter :: b96 = - 11 8.0_wp real ( wp ), parameter :: b97 = 16 2.0_wp real ( wp ), parameter :: b98 = 32 4.0_wp real ( wp ), parameter :: b100 = 130 3.0_wp real ( wp ), parameter :: b103 = - 426 0.0_wp real ( wp ), parameter :: b104 = - 687 5.0_wp real ( wp ), parameter :: b105 = 999 0.0_wp real ( wp ), parameter :: b106 = 103 0.0_wp real ( wp ), parameter :: b109 = 16 2.0_wp real ( wp ), parameter :: b110 = - 859 5.0_wp real ( wp ), parameter :: b113 = 3072 0.0_wp real ( wp ), parameter :: b114 = 4875 0.0_wp real ( wp ), parameter :: b115 = - 6609 6.0_wp real ( wp ), parameter :: b116 = 37 8.0_wp real ( wp ), parameter :: b117 = - 72 9.0_wp real ( wp ), parameter :: b118 = - 194 4.0_wp real ( wp ), parameter :: b119 = - 129 6.0_wp real ( wp ), parameter :: b1110 = 324 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * ( f0 ), f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + aa7 * h * ( b70 * f0 + b73 * f3 + b74 * f4 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + aa8 * h * ( b80 * f0 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + aa9 * h * ( b90 * f0 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + aa10 * h * ( b100 * f0 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b109 * f9 ), f10 ) call me % f ( t + h , x + aa11 * h * ( b110 * f0 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) xf = x + h * c * ( c0 * f0 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) end associate end procedure rk8_12 !***************************************************************************************** !***************************************************************************************** !> ! Cooper-Verner 11 stage, 8th order Runge-Kutta method. ! !### Reference ! * Some Explicit Runge-Kutta Methods of High Order, by G. J. Cooper and J. H. Verner, ! SIAM Journal on Numerical Analysis, Vol. 9, No. 3, (September 1972), pages 389 to 405 ! * http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8b_1.pdf module procedure rkcv8 real ( wp ), parameter :: s = sqrt ( 2 1.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 2.0_wp + 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a8 = 1.0_wp / 2.0_wp + 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a9 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a10 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b42 = - 1.0_wp / 1 4.0_wp + 3.0_wp / 9 8.0_wp * s real ( wp ), parameter :: b43 = 3.0_wp / 7.0_wp - 5.0_wp / 4 9.0_wp * s real ( wp ), parameter :: b51 = 1 1.0_wp / 8 4.0_wp - 1.0_wp / 8 4.0_wp * s real ( wp ), parameter :: b53 = 2.0_wp / 7.0_wp - 4.0_wp / 6 3.0_wp * s real ( wp ), parameter :: b54 = 1.0_wp / 1 2.0_wp + 1.0_wp / 25 2.0_wp * s real ( wp ), parameter :: b61 = 5.0_wp / 4 8.0_wp - 1.0_wp / 4 8.0_wp * s real ( wp ), parameter :: b63 = 1.0_wp / 4.0_wp - 1.0_wp / 3 6.0_wp * s real ( wp ), parameter :: b64 = - 7 7.0_wp / 12 0.0_wp - 7.0_wp / 18 0.0_wp * s real ( wp ), parameter :: b65 = 6 3.0_wp / 8 0.0_wp + 7.0_wp / 8 0.0_wp * s real ( wp ), parameter :: b71 = 5.0_wp / 2 1.0_wp + 1.0_wp / 4 2.0_wp * s real ( wp ), parameter :: b73 = - 4 8.0_wp / 3 5.0_wp - 9 2.0_wp / 31 5.0_wp * s real ( wp ), parameter :: b74 = 21 1.0_wp / 3 0.0_wp + 2 9.0_wp / 1 8.0_wp * s real ( wp ), parameter :: b75 = - 3 6.0_wp / 5.0_wp - 2 3.0_wp / 1 4.0_wp * s real ( wp ), parameter :: b76 = 9.0_wp / 5.0_wp + 1 3.0_wp / 3 5.0_wp * s real ( wp ), parameter :: b81 = 1.0_wp / 1 4.0_wp real ( wp ), parameter :: b85 = 1.0_wp / 9.0_wp + 1.0_wp / 4 2.0_wp * s real ( wp ), parameter :: b86 = 1 3.0_wp / 6 3.0_wp + 1.0_wp / 2 1.0_wp * s real ( wp ), parameter :: b87 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b91 = 1.0_wp / 3 2.0_wp real ( wp ), parameter :: b95 = 9 1.0_wp / 57 6.0_wp + 7.0_wp / 19 2.0_wp * s real ( wp ), parameter :: b96 = 1 1.0_wp / 7 2.0_wp real ( wp ), parameter :: b97 = - 38 5.0_wp / 115 2.0_wp + 2 5.0_wp / 38 4.0_wp * s real ( wp ), parameter :: b98 = 6 3.0_wp / 12 8.0_wp - 1 3.0_wp / 12 8.0_wp * s real ( wp ), parameter :: b101 = 1.0_wp / 1 4.0_wp real ( wp ), parameter :: b105 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b106 = - 73 3.0_wp / 220 5.0_wp + 1.0_wp / 1 5.0_wp * s real ( wp ), parameter :: b107 = 51 5.0_wp / 50 4.0_wp - 3 7.0_wp / 16 8.0_wp * s real ( wp ), parameter :: b108 = - 5 1.0_wp / 5 6.0_wp + 1 1.0_wp / 5 6.0_wp * s real ( wp ), parameter :: b109 = 13 2.0_wp / 24 5.0_wp - 4.0_wp / 3 5.0_wp * s real ( wp ), parameter :: b115 = - 7.0_wp / 3.0_wp - 7.0_wp / 1 8.0_wp * s real ( wp ), parameter :: b116 = - 2.0_wp / 5.0_wp - 2 8.0_wp / 4 5.0_wp * s real ( wp ), parameter :: b117 = - 9 1.0_wp / 2 4.0_wp + 5 3.0_wp / 7 2.0_wp * s real ( wp ), parameter :: b118 = 30 1.0_wp / 7 2.0_wp - 5 3.0_wp / 7 2.0_wp * s real ( wp ), parameter :: b119 = 2 8.0_wp / 4 5.0_wp + 2 8.0_wp / 4 5.0_wp * s real ( wp ), parameter :: b1110 = 4 9.0_wp / 18 + 7.0_wp / 1 8.0_wp * s real ( wp ), parameter :: c1 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: c8 = 4 9.0_wp / 18 0.0_wp real ( wp ), parameter :: c9 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c10 = 4 9.0_wp / 18 0.0_wp real ( wp ), parameter :: c11 = 1.0_wp / 2 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) end associate end procedure rkcv8 !***************************************************************************************** !***************************************************************************************** !> ! Zhang 10th order ! !### Reference ! * David K. Zhang, \"Discovering New Runge-Kutta Methods Using Unstructured Numerical Search\", ! Thesis, April 16, 2019 [1911.00318.pdf](https://arxiv.org/pdf/1911.00318.pdf) ! * [Coefficients](https://github.com/dzhang314/rktk/blob/master/methods/Zhang10.txt) module procedure rkz10 real ( wp ), parameter :: b21 = + 0.06888096612188652230677098661632935381315159322698285980682460033484176156636_wp real ( wp ), parameter :: b31 = - 0.83810520353364237535186366202804838694106968892100493081079119861616316483888_wp real ( wp ), parameter :: b32 = + 1.25369004871695465344923436259290210937215845259642921936068038992469719487344_wp real ( wp ), parameter :: b41 = - 0.00490948675932680175369634467679043271190185159760893197940412354439119879747_wp real ( wp ), parameter :: b42 = + 0.08232173030768021571147603044143500716498050758632346872918243517328221749373_wp real ( wp ), parameter :: b43 = - 0.00853127742646689165100869914831522063992706276173167694295371129404925712991_wp real ( wp ), parameter :: b51 = + 1.04893195376435953811751460952804681519865641127045728585681123905425821150864_wp real ( wp ), parameter :: b52 = - 0.75382817731759581241904280322911590179250916990960557195131331600659134298994_wp real ( wp ), parameter :: b53 = + 0.80522815974064911780476652756884437914316713728791543021500322792680878839117_wp real ( wp ), parameter :: b54 = - 0.38446322074238561063992159166768203951623890872336238198515458977800812023865_wp real ( wp ), parameter :: b61 = - 0.23992383433329995270018501071487605020336614587127799309879281304981537313900_wp real ( wp ), parameter :: b62 = - 0.06364261163929229571107164643776483490956349179570579724023318438638668084701_wp real ( wp ), parameter :: b63 = + 0.19967543135197895864283978317448663244372194705250026204952108330132418721869_wp real ( wp ), parameter :: b64 = + 0.61035379509547002158981202467825146906358429601618359949777530100370262806814_wp real ( wp ), parameter :: b65 = + 0.37859947224999048426403753064329493462141566215033797838496558400426835557965_wp real ( wp ), parameter :: b71 = + 0.01778833946316172550067667113299992644020408256145083580468064240809624146756_wp real ( wp ), parameter :: b72 = - 0.01105021905501825472152093430479940021746699824126398377648788328289961044531_wp real ( wp ), parameter :: b73 = - 0.00439342855052892929633342674635339618911779936473248023015437836908839819799_wp real ( wp ), parameter :: b74 = + 0.10597527290509018731505658395393495306363828909501538659771103682791206047696_wp real ( wp ), parameter :: b75 = + 0.00405089069638330732472929903714130352675532845602736909932582009874330236167_wp real ( wp ), parameter :: b76 = - 0.00167929709134223461022001825411827908084682305838572957913124250043819202374_wp real ( wp ), parameter :: b81 = + 0.23566046225418537925692690356824973135127585829120749799176100081366132717900_wp real ( wp ), parameter :: b82 = + 0.08893362689701559656112930868794335701480724068673657440558996917556014206620_wp real ( wp ), parameter :: b83 = + 0.04138834709876858545169518341465722051417932518424807026039922164100253591914_wp real ( wp ), parameter :: b84 = - 0.85290303603263069912309614093599359240031750375681439893926580845622126359984_wp real ( wp ), parameter :: b85 = - 0.02308087548113625563008379864870135277272977633339373075859414529485111031087_wp real ( wp ), parameter :: b86 = + 0.00968592188591852514590807745954989979539211465004178878459403530669594442891_wp real ( wp ), parameter :: b87 = + 0.80144977934196893864833794701047679699141990680205169668196460489197395944287_wp real ( wp ), parameter :: b91 = + 0.09048693760705330681795027653195090842362561521235737211709949607524998063814_wp real ( wp ), parameter :: b92 = + 0.03204427202479226242378001797390171191984804295279358947221505285617826137779_wp real ( wp ), parameter :: b93 = + 0.12433768215891056280095053314827014992247446913700152962717366852615035330919_wp real ( wp ), parameter :: b94 = - 0.30731521755038158104946232011583084977900951861660916480042444618524837737411_wp real ( wp ), parameter :: b95 = + 0.16447843681160268810163161551627427448581444120771873237010859382161886567365_wp real ( wp ), parameter :: b96 = - 0.04100681167344768439646557295106150922485658224571650562701715147123044716022_wp real ( wp ), parameter :: b97 = + 0.40661989930773198456977153545461924102851176247811339291440854490078881632775_wp real ( wp ), parameter :: b98 = + 0.18669987124631939180018777607871869034096434382893787663176153320303681978038_wp real ( wp ), parameter :: b101 = - 0.12815849137721058028379122684114729957595452282110310092889040855742427673083_wp real ( wp ), parameter :: b102 = - 0.09494292242532245543748881606192770346771760827967185000597507680447193729080_wp real ( wp ), parameter :: b103 = - 0.14450344511826259894917045729900439186304081642314445476990786282061867102157_wp real ( wp ), parameter :: b104 = + 0.92134940704406912363606156819205798706915260363096464763106069459083167107327_wp real ( wp ), parameter :: b105 = - 0.13265301054949046320484467982507968172620145761107284691851092173475314294014_wp real ( wp ), parameter :: b106 = + 0.01661485872631464348319012586897860991564771318706900087871886151957318825574_wp real ( wp ), parameter :: b107 = - 0.64461773243991825568826538659502156175792556790721387489238296660149971176174_wp real ( wp ), parameter :: b108 = + 0.47148463683422024098060807066053294761028203774917809473770514989820710158152_wp real ( wp ), parameter :: b109 = + 0.15101154448891262356107150246546481622684638215041867281807172181868980886911_wp real ( wp ), parameter :: b111 = - 0.35394262889926481874318272132638227200275604000107564690424492655250744148526_wp real ( wp ), parameter :: b112 = - 0.12999250061102426001102206164524015480707041252098090235235458563228391897841_wp real ( wp ), parameter :: b113 = + 0.07296717474130959358123820183761890201581557542115580687780801792533382974931_wp real ( wp ), parameter :: b114 = + 1.23409288203437673148811178545199717478084359792767549031487434785241641765067_wp real ( wp ), parameter :: b115 = + 0.24325479314414790350916184694938182359002523242070889454561579643424180130675_wp real ( wp ), parameter :: b116 = - 0.04886415340347670065787549059652108014832442895629947389530738182689787996728_wp real ( wp ), parameter :: b117 = - 0.51442371407978914516038594645191171303742863244306956194414424856852330710239_wp real ( wp ), parameter :: b118 = + 0.07088500449199304304537010242765865457286791828303557337358385517356109210099_wp real ( wp ), parameter :: b119 = - 0.20555333994396552677698205301698855743095009068049025897065388713681681672772_wp real ( wp ), parameter :: b1110 = + 0.04716132770900545782293703693524094489806604422476436750471220364001025348790_wp real ( wp ), parameter :: b121 = - 1.28883596401187309154174375754588391722337985378291577953064993833085325077145_wp real ( wp ), parameter :: b122 = - 0.28020869761589692854933312826845810393637896090137224607343344880154309805585_wp real ( wp ), parameter :: b123 = + 2.95502531060581466025398140893693575414694538631086569687435523799636000133369_wp real ( wp ), parameter :: b124 = + 2.68729452804277601048934070442766694554427130448420986662047690713132366345266_wp real ( wp ), parameter :: b125 = + 4.94062342991935573838476417426809163760371481941041460313006887242753416771859_wp real ( wp ), parameter :: b126 = - 1.10669748003212502578007105340045335120159611347391447923604138591653946190627_wp real ( wp ), parameter :: b127 = - 1.01499184284449721513261150169983810954496707583685170059698090784083909089787_wp real ( wp ), parameter :: b128 = + 2.53750982609373480524394613209930567128221625331336116097749979112883387569908_wp real ( wp ), parameter :: b129 = - 3.05085435525303312587778339284072228780737127406865428592625671405448243077510_wp real ( wp ), parameter :: b1210 = - 4.48248369012964780236263511347668602256466957962418723733767273268597925464354_wp real ( wp ), parameter :: b1211 = - 1.21257843188510861623323738621796488386816954981559478788233918659317859600661_wp real ( wp ), parameter :: b131 = - 0.26440344286774078027313975052115341819194404740705505988980388884472351746613_wp real ( wp ), parameter :: b132 = - 0.06681118811399606825394685412417487195704333031683770523718698572711060614338_wp real ( wp ), parameter :: b133 = + 0.22983178806827308655694675660046084355033982772309698316158066683955449428729_wp real ( wp ), parameter :: b134 = + 0.64074149645736181719485655167408177784648088775776468738158085006283347730738_wp real ( wp ), parameter :: b135 = + 0.42942911081576828545053652299580217770451868606900245607955202491949872419495_wp real ( wp ), parameter :: b136 = - 0.00967078876662303036856558223558993132212111489612543886857914521712390529304_wp real ( wp ), parameter :: b137 = + 0.01613666672999681392501812041282804272240296713357286534780333216134004281864_wp real ( wp ), parameter :: b138 = - 0.03596314318487727365094853269870982256844289210631058204493077377818835633949_wp real ( wp ), parameter :: b139 = - 0.04902670091896965612083428201101205091198148478269054303875029017005640576667_wp real ( wp ), parameter :: b1310 = + 0.01388537673498896790224810676002758506392838309962714417674884945696557987538_wp real ( wp ), parameter :: b1311 = - 0.02329475109524907760636494276820464664967810607545806961371703044079964798003_wp real ( wp ), parameter :: b1312 = + 0.00411071472206196739547606137318514638902786727009559929394539277815884070579_wp real ( wp ), parameter :: b141 = + 1.28995927881082034516023610876593719136951515200841564716720963602983766539309_wp real ( wp ), parameter :: b142 = + 0.13503265202676397192358271319486347590315093450300003507414087911915346743493_wp real ( wp ), parameter :: b143 = - 1.57533735338626298015011591165511659112640458688783385930436332029909777715227_wp real ( wp ), parameter :: b144 = - 1.13614144125767380945133294734170682018114470434355261134291967031467884444496_wp real ( wp ), parameter :: b145 = - 2.60629976327340284860734294234508518773200013764798796731373995419345584010989_wp real ( wp ), parameter :: b146 = - 0.14225514857221282929776869245957057127882456911938845124276329363250774479820_wp real ( wp ), parameter :: b147 = - 1.30050279397530175137190231972314623324238865480815606289913301764254981931424_wp real ( wp ), parameter :: b148 = + 2.70797163114645615543070920761013389431867941711011998785845670786144007733081_wp real ( wp ), parameter :: b149 = + 2.43554296946750176014394493560037156798756615586273835416220476865949138763199_wp real ( wp ), parameter :: b1410 = - 0.26458182516446999987007272710827096690076304619434648405874330108389046658365_wp real ( wp ), parameter :: b1411 = + 0.28431747275350668428305940521170347967298804085514279367418757904848425107603_wp real ( wp ), parameter :: b1412 = - 0.01567336501605444936187349334932741547111318613954509638698908027760861917463_wp real ( wp ), parameter :: b1413 = + 0.60355253162364202926624736416406789911182794847681800316234125803391629274555_wp real ( wp ), parameter :: b151 = - 0.82170145239485721248182614307298014363501501247665665859542963907661741852252_wp real ( wp ), parameter :: b152 = + 1.25591221619821840505806060191670198289896021578755350597122093077684012752648_wp real ( wp ), parameter :: b153 = - 0.01615284116525821921698589364201132298146948312403205059324494512949466638820_wp real ( wp ), parameter :: b154 = - 0.02297038987201048533939731478067813642773684981394747854111883904855646952919_wp real ( wp ), parameter :: b155 = - 0.02796034376707111482574969609615809805957457730932703561247060660045527963337_wp real ( wp ), parameter :: b156 = - 0.75094298727080692288567852962945843784728392190426468013732662611274129611030_wp real ( wp ), parameter :: b157 = - 0.00831029089278008603544533798969572897337060350821384521268253868513966100453_wp real ( wp ), parameter :: b158 = + 0.02785523862077057819395231768788127899618354611871665730619924470585495216854_wp real ( wp ), parameter :: b159 = + 0.04021421539333651503730432703988977024358721548426886753518601253708363296062_wp real ( wp ), parameter :: b1510 = + 1.61713646360095425893804116572314412328254887955289755326352595104935489454125_wp real ( wp ), parameter :: b1511 = - 1.39628377741243214317623603663032161218084680028714877542197062209713837494256_wp real ( wp ), parameter :: b1512 = - 0.01424439159061064208304848726946155039179802539115130281665541763757472383980_wp real ( wp ), parameter :: b1513 = + 0.75709054336643265169970374917936196757291644158102449813751290304179069353124_wp real ( wp ), parameter :: b1514 = - 0.22405735763057330478532402187136037006601226103429496673285661641467238072308_wp real ( wp ), parameter :: b161 = + 0.27726401853185531071095250844208662954769209843860654782270439586107555912462_wp real ( wp ), parameter :: b162 = + 0.09453818370728229619312145290868518019954577268055790438905422269619151226603_wp real ( wp ), parameter :: b163 = + 0.84172754295454286541980788975065897179825972249436132684274103676922879908590_wp real ( wp ), parameter :: b164 = - 0.90665259832844475943298457713954683980649043330939335614048943465366310987303_wp real ( wp ), parameter :: b165 = - 0.09334858033923263720339222938292231543826754868386677793091178055855225779084_wp real ( wp ), parameter :: b166 = + 4.08887758914114010965574538791054120551785765841976165061624483740399180627400_wp real ( wp ), parameter :: b167 = + 0.79539986499428990687079492545982314739495812782573436535546220822826278953650_wp real ( wp ), parameter :: b168 = - 0.04859175145875636251218702854395529418032114353274620641007859711365783956136_wp real ( wp ), parameter :: b169 = + 0.14819851457498430887143064575970769402240035004018486609649448109702272035773_wp real ( wp ), parameter :: b1610 = - 1.77021148062189597056755123808303838576982978034562033343027660487016998355672_wp real ( wp ), parameter :: b1611 = + 1.83821084492008174732030666893446362369060575712213328902105414298283276556307_wp real ( wp ), parameter :: b1612 = + 0.04909344463430916722179909282844531508454281205967923461622573420987424382584_wp real ( wp ), parameter :: b1613 = - 3.80378823067007538071243467410680278604792596795503781745130930797860484235966_wp real ( wp ), parameter :: b1614 = + 0.33157239872339854149205035234217673029656296754907585248267975563293121409049_wp real ( wp ), parameter :: b1615 = - 0.84228976076347914332745917708032287630959039280343054587959508970676337698255_wp real ( wp ), parameter :: c1 = + 0.03181927458023409759419419944088926839595967458804889313841865851348230504492_wp real ( wp ), parameter :: c3 = + 0.04681369289018421954398607025172424191865836856120072277976273594277845007872_wp real ( wp ), parameter :: c6 = + 1.37553536170545749013126339747598151094852489823041688723220548486290269295630_wp real ( wp ), parameter :: c7 = + 0.17506567143964248943590740397548086595186840317795589108615338820052040464001_wp real ( wp ), parameter :: c8 = + 0.14924798653008455234489054168544610975862154045444166485218499565185924479229_wp real ( wp ), parameter :: c9 = + 0.27180992312662372142355988162582830282467844949919584507610421296773792690656_wp real ( wp ), parameter :: c10 = - 0.17077940511361075387191294440611902706762757201779959741914461935949309724569_wp real ( wp ), parameter :: c11 = + 0.30035519768848521819453255694344499143765502380409939822945376435190034136303_wp real ( wp ), parameter :: c12 = - 0.01014254403202798636405231311418830930667910487160410011307114999518762983823_wp real ( wp ), parameter :: c13 = - 1.19177815782093190956613115811061881440838744821819017576359936663422556606341_wp real ( wp ), parameter :: c14 = + 0.03639139354170713653095246097302347593652682408895579802073390992985525665017_wp real ( wp ), parameter :: c15 = - 0.04683316086510645556720041443823709643011325850704077997225219431585033242635_wp real ( wp ), parameter :: c16 = + 0.03249476632925818017001031769734448004031420121031955285305017988372000314167_wp ! see Equation 1.20 in reference: real ( wp ), parameter :: a1 = 0 real ( wp ), parameter :: a2 = b21 real ( wp ), parameter :: a3 = b31 + b32 real ( wp ), parameter :: a4 = b41 + b42 + b43 real ( wp ), parameter :: a5 = b51 + b52 + b53 + b54 real ( wp ), parameter :: a6 = b61 + b62 + b63 + b64 + b65 real ( wp ), parameter :: a7 = b71 + b72 + b73 + b74 + b75 + b76 real ( wp ), parameter :: a8 = b81 + b82 + b83 + b84 + b85 + b86 + b87 real ( wp ), parameter :: a9 = b91 + b92 + b93 + b94 + b95 + b96 + b97 + b98 real ( wp ), parameter :: a10 = b101 + b102 + b103 + b104 + b105 + b106 + b107 + b108 + b109 real ( wp ), parameter :: a11 = b111 + b112 + b113 + b114 + b115 + b116 + b117 + b118 + b119 + b1110 real ( wp ), parameter :: a12 = b121 + b122 + b123 + b124 + b125 + b126 + b127 + b128 + b129 + b1210 + b1211 real ( wp ), parameter :: a13 = b131 + b132 + b133 + b134 + b135 + b136 + b137 + b138 + b139 + b1310 + b1311 + b1312 real ( wp ), parameter :: a14 = b141 + b142 + b143 + b144 + b145 + b146 + b147 + b148 + b149 + b1410 + b1411 + b1412 + b1413 real ( wp ), parameter :: a15 = b151 + b152 + b153 + b154 + b155 + b156 + b157 + b158 + b159 + b1510 + b1511 + b1512 + b1513 + b1514 real ( wp ), parameter :: a16 = b161 + b162 + b163 + b164 + b165 + b166 + b167 + b168 + b169 + b1610 + b1611 + b1612 + b1613 + b1614 + b1615 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + a1 * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + & b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + & b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + & b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + & b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + & b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + & b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + & b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) xf = x + h * ( c1 * f1 + c3 * f3 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) end associate end procedure rkz10 !***************************************************************************************** !***************************************************************************************** !> ! Ono's 10th order method ! !### References ! * Hiroshi Ono, \"A Runge-Kutta method of order 10 which minimizes truncation error\", ! The Japan Society for Industrial and Applied Mathematics, ! Vol. 13, No. 1, 2003, pp 35 - 44. module procedure rko10 real ( wp ), parameter :: a2 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: a3 = . 5263563553500217821118595221339767434067222948292617539626688113669112965383197614021_wp real ( wp ), parameter :: a4 = . 7895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a5 = . 1852155685265047076970656199437875208987680209449849941608024849050604421517806064228_wp real ( wp ), parameter :: a6 = . 2895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a7 = . 7659879027055932401898717206953675811356898851157703878511505293452324618973555436361_wp real ( wp ), parameter :: a8 = . 1080739009578824490100240661758266719014599665988034811870817465871751958605805741080_wp real ( wp ), parameter :: a9 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a10 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a11 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a12 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a13 = . 7659879027055932401898717206953675811356898851157703878511505293452324618973555436361_wp real ( wp ), parameter :: a14 = . 2895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a15 = . 5263563553500217821118595221339767434067222948292617539626688113669112965383197614021_wp real ( wp ), parameter :: a16 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b21 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b31 = . 1137717040478783056449396184425018992536986324028992632761012508174661576282091865815_wp real ( wp ), parameter :: b32 = . 4125846513021434764669199036914748441530236624263624906865675605494451389101105748206_wp real ( wp ), parameter :: b41 = . 1973836332562581682919473208002412787775208605609731577360008042625917362018699105258_wp real ( wp ), parameter :: b43 = . 5921508997687745048758419624007238363325625816829194732080024127877752086056097315774_wp real ( wp ), parameter :: b51 = . 1360001717992528326665261557210531883399922632350163155393510462488093550801937826726_wp real ( wp ), parameter :: b53 = . 824720805202811222379079977574504818037996000363091041777905360271594623631069354283 7e-1_wp real ( wp ), parameter :: b54 = - . 332566837930292472073685335347161492450238423263404255563390973709083752915201116781 5e-1_wp real ( wp ), parameter :: b61 = . 654678519948111057975663033586887072416508858302450954893843449284860127842110887181 8e-1_wp real ( wp ), parameter :: b64 = . 685871562042303399396682664055028198509388868123613585975699418887138553966287647885 9e-3_wp real ( wp ), parameter :: b65 = . 2233808094681792639708262971782213796699231675455239218686431727029937934693022657371_wp real ( wp ), parameter :: b71 = . 2379439999135994223360182301765245366877534054337310606780367192080205084533052094979_wp real ( wp ), parameter :: b74 = . 1285793626493546102687479560301629068933431333159680850577212924587597635005521433930_wp real ( wp ), parameter :: b75 = - . 7303763776380165799305971651206183012312272113455920027358381669467410091843571268521_wp real ( wp ), parameter :: b76 = 1.129840917780655787515702699609298438785820557711663244851230684625193199127855317597_wp real ( wp ), parameter :: b81 = . 606278089644172041828851763289449356101383929213871935662188828124574009433854416577 5e-1_wp real ( wp ), parameter :: b85 = . 788822224869202238639802956157355708195673413893998012378730299018568351728356274717 9e-1_wp real ( wp ), parameter :: b86 = - . 321321350412593900510162678207448391177877251765465842094683934155351160999215185781 5e-1_wp real ( wp ), parameter :: b87 = . 696004547804411014174862051891004589541957464563070592458227288396075844281023556639 4e-3_wp real ( wp ), parameter :: b91 = . 310441586543872188908409753881999593035847986835220089359164492112482866700568653692 0e-1_wp real ( wp ), parameter :: b96 = . 1571656120644442171909172634188670081467914525944196307657031602142991040495820182979_wp real ( wp ), parameter :: b97 = . 111763854138408430298968733827150564266166391841703707104175280155396971597072215560 9e-3_wp real ( wp ), parameter :: b98 = . 1690627071867076073308672954386663460258558459670039606814010070304482468516642450265_wp real ( wp ), parameter :: b101 = . 143061420142267773294341145620270598158292988407553851922433281175939125604562870960 1e-1_wp real ( wp ), parameter :: b106 = - . 3914725335338579386439799990026912235591541327277623987271673700062264924050571982953_wp real ( wp ), parameter :: b107 = . 2848400967322984698670378405298733357388045123736554424201702352859211869408079104816_wp real ( wp ), parameter :: b108 = . 2559426777170804941167590501634194225203620020234561863154326261989141389268124787652_wp real ( wp ), parameter :: b109 = . 7189112790349845437562504807270404806670261637579475044631123583223249124963937790142_wp real ( wp ), parameter :: b111 = . 100666845742663178817227082262022726090612102393137172374184106085273098952254964164 8e-1_wp real ( wp ), parameter :: b116 = - . 3683271809355001194608455001594963737510628435069995678571139196388186857259494651043_wp real ( wp ), parameter :: b117 = . 857550262402229990354693960925451370506815971267273889165067994976749715636339652326 6e-1_wp real ( wp ), parameter :: b118 = . 2633792404483482304677774849110341109669789276529274236259927084605103685123897043694_wp real ( wp ), parameter :: b119 = . 6783120744401823352568978305425238981627472606453781308422134412090277276134222894570_wp real ( wp ), parameter :: b1110 = - . 265700865271972150239464225923695090789044157941343968551422318730727264016221912804 5e-1_wp real ( wp ), parameter :: b121 = . 421257301570145802287543187145341282749104461888283907786317114955424946915941038412 6e-1_wp real ( wp ), parameter :: b126 = - . 114073025739498662832358741501332045332754077505475889494504614085885658522072079316 0e-1_wp real ( wp ), parameter :: b127 = - . 357732358388104164263985491039084383847709475224877912599477197450717910777081667362 2e-2_wp real ( wp ), parameter :: b128 = . 847808506904718159588379566933344327419896519600476705478313620344711827543672159469 2e-1_wp real ( wp ), parameter :: b129 = - . 823689740384519053451672363846415534369879668146873991026026659538430170751318715182 3e-4_wp real ( wp ), parameter :: b1210 = . 792017493664916044525153500594110464427146269240442858078643804091120854614237759251 2e-3_wp real ( wp ), parameter :: b1211 = . 484073482598570117360198040877694326099440178344243162621494079641713115706434186756 3e-2_wp real ( wp ), parameter :: b131 = . 1866168584194642618748985099397434698267694490527249444362505121514680479505442836574_wp real ( wp ), parameter :: b134 = . 1285793626493546102687479560301629068933431333159680850577212924587597635005521433930_wp real ( wp ), parameter :: b135 = - . 7303763776380165799305971651206183012312272113455920027358381669467410091843571268521_wp real ( wp ), parameter :: b136 = . 3365620746651354218129539461265307620933082614096471567813938850533189571406833598679_wp real ( wp ), parameter :: b137 = . 3439152195696137654283681672732838006806635738118480999635325742827372086353048385257_wp real ( wp ), parameter :: b138 = . 6116809614283795957124860804122425718138169583157463948158033894717678649195939132136_wp real ( wp ), parameter :: b139 = . 8555642651045021202243366091904917631763787495189342130253621820535903092162656518481_wp real ( wp ), parameter :: b1310 = - . 891392852486696004845640155766881857316512047949986128540746584443895055096019167947 2e-1_wp real ( wp ), parameter :: b1311 = - . 4263317531098201582091498458499961586420389075833366648914840378325891404712881232497_wp real ( wp ), parameter :: b1312 = - . 4510834231343501965076085217297850477436729165851712257475164429026900343003414799732_wp real ( wp ), parameter :: b141 = . 813272217458117794807280979168314150245787313612597895474152882582268286833402023137 4e-1_wp real ( wp ), parameter :: b144 = . 685871562042303399396682664055028198509388868123613585975699418887138553966287647885 9e-3_wp real ( wp ), parameter :: b145 = . 2233808094681792639708262971782213796699231675455239218686431727029937934693022657371_wp real ( wp ), parameter :: b146 = - . 3543152669595614715438074770044728248424634682417120916726014150358797064660842419218_wp real ( wp ), parameter :: b147 = - . 1614228337471357340842753214971350545154909424968569413717974406833347832344548170007_wp real ( wp ), parameter :: b148 = - 1.267989518319081979614362221100086229540210555088918164010191288219362963604567702803_wp real ( wp ), parameter :: b149 = . 2482505660965057784745955362600844051763121832196360142449926255422280563592831868088_wp real ( wp ), parameter :: b1410 = . 189401507220432986230430508826749566454355835084831097010333170836962862919660196114 5e-2_wp real ( wp ), parameter :: b1411 = - . 236710850425040469729927587547751462365353620277346625237201541217354742435686516188 2e-1_wp real ( wp ), parameter :: b1412 = 1.376373544047006195976245547649688122109906103559164922810806152088122419417100442009_wp real ( wp ), parameter :: b1413 = . 1650212091015662542191305948002865244010106371945579174943772453918520072439660689694_wp real ( wp ), parameter :: b151 = . 1137717040478783056449396184425018992536986324028992632761012508174661576282091865815_wp real ( wp ), parameter :: b152 = . 4125846513021434764669199036914748441530236624263624906865675605494451389101105748206_wp real ( wp ), parameter :: b156 = - . 5266141894222268880524004361760397955773267936583064281992495328485812564705031059898_wp real ( wp ), parameter :: b157 = . 4270299995350464166415042303891280056028480962227556089080302280248036279775533169729_wp real ( wp ), parameter :: b1513 = - . 4270299995350464166415042303891280056028480962227556089080302280248036279775533169729_wp real ( wp ), parameter :: b1514 = . 5266141894222268880524004361760397955773267936583064281992495328485812564705031059898_wp real ( wp ), parameter :: b161 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b163 = - . 4368367083891407610190158064846822677554138099678168504498524386288907219928146135373_wp real ( wp ), parameter :: b1615 = . 4368367083891407610190158064846822677554138099678168504498524386288907219928146135373_wp real ( wp ), parameter :: b171 = . 352840091453906575769537425002052698379204209477870663357404857513859839544537545996 4e-1_wp real ( wp ), parameter :: b172 = - . 4368588562339554617519938616027395568153523718226810275461527253101515442644071737416_wp real ( wp ), parameter :: b173 = - . 5185253025751911700815354370658368214653404020923461413204927007907407344767758710502_wp real ( wp ), parameter :: b176 = . 835388214631834770882397990787144429369302489753300898028685113495020955686828548199 8e-1_wp real ( wp ), parameter :: b177 = . 3357324883823615793514438806416832609180686549969009829861766772233990660034579152038_wp real ( wp ), parameter :: b178 = - . 1180346853290197678148440843338719378456952414935754110833043790640005049977678056530_wp real ( wp ), parameter :: b179 = - . 2028121524999718341813208304021045923675061150408674489110338814798518734278169865166_wp real ( wp ), parameter :: b1710 = . 4018734442526045674154192467995252408036818247069631361197899796078897150680466096292_wp real ( wp ), parameter :: b1711 = . 6982808681238487516481594542254805552510541794271997632640921307356093400075120505480_wp real ( wp ), parameter :: b1712 = . 2745953340127460413630142920026546525788337913278252157685398122819348957290706395825_wp real ( wp ), parameter :: b1713 = - . 8071051158813288531951186779278104056732084407804403857002131168492985419909905100904_wp real ( wp ), parameter :: b1714 = . 2986469883301853807480531774155235135599206769328769914173437804434298240853514778770_wp real ( wp ), parameter :: b1715 = . 5185253025751911700815354370658368214653404020923461413204927007907407344767758710502_wp real ( wp ), parameter :: b1716 = . 4368588562339554617519938616027395568153523718226810275461527253101515442644071737416_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = - . 219224283305227655986509274873524451939291736930860033726812816188870151770657672849 9e-1_wp real ( wp ), parameter :: c3 = - . 567107750472589792060491493383742911153119092627599243856332703213610586011342155009 5e-1_wp real ( wp ), parameter :: c6 = - . 560471976401179941002949852507374631268436578171091445427728613569321533923303834808 3e-1_wp real ( wp ), parameter :: c7 = . 1789297658862876254180602006688963210702341137123745819397993311036789297658862876254_wp real ( wp ), parameter :: c9 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c10 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c11 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c12 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c13 = - . 1789297658862876254180602006688963210702341137123745819397993311036789297658862876254_wp real ( wp ), parameter :: c14 = . 560471976401179941002949852507374631268436578171091445427728613569321533923303834808 3e-1_wp real ( wp ), parameter :: c15 = . 567107750472589792060491493383742911153119092627599243856332703213610586011342155009 5e-1_wp real ( wp ), parameter :: c16 = . 219224283305227655986509274873524451939291736930860033726812816188870151770657672849 9e-1_wp real ( wp ), parameter :: c17 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b156 * f6 + b157 * f7 + & b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b163 * f3 + b1615 * f15 ), f16 ) call me % f ( t + h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c6 * f6 + c7 * f7 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 ) end associate end procedure rko10 !***************************************************************************************** !***************************************************************************************** !> ! Hairer 10th order method. ! !### References ! * Ernst Hairer, \"A Runge-Kutta Method of Order 10\" ! January 1978, IMA Journal of Applied Mathematics 21(1) module procedure rkh10 real ( wp ), parameter :: a2 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: a3 = . 5265091001416125727329516734775408259523008085442588621240322448552569517961160776999_wp real ( wp ), parameter :: a4 = . 7897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a5 = . 3939235701256720143227738119996521367488350094732736567444747389961242969755195414769_wp real ( wp ), parameter :: a6 = . 7666539862535505911932668693560686601417881683220066628197494388337786524595845606945_wp real ( wp ), parameter :: a7 = . 2897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a8 = . 1084776892195672933536461100396272126536495082872530661076180009074872219675135232227_wp real ( wp ), parameter :: a9 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a10 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a11 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a12 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a13 = . 7666539862535505911932668693560686601417881683220066628197494388337786524595845606945_wp real ( wp ), parameter :: a14 = . 2897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a15 = . 5265091001416125727329516734775408259523008085442588621240322448552569517961160776999_wp real ( wp ), parameter :: a16 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b21 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b31 = . 2616697163778127283312402097548997641973627614039327706102102491953717704187699219879_wp real ( wp ), parameter :: b32 = . 2648393837637998444017114637226410617549380471403260915138219956598851813773461557120_wp real ( wp ), parameter :: b41 = . 1974409125531047147748568775540778097321128032040970732965120918207213569235435291375_wp real ( wp ), parameter :: b43 = . 5923227376593141443245706326622334291963384096122912198895362754621640707706305874124_wp real ( wp ), parameter :: b51 = . 1973205486287023067036649485978952117578825584337199991656132317825743833021058860612_wp real ( wp ), parameter :: b53 = . 2950833340926721918228255598274359230145509784596048092593866299668586683096812321792_wp real ( wp ), parameter :: b54 = - . 984803125957024842037166964256789980235985274200511516805251227533087546362675767635 1e-1_wp real ( wp ), parameter :: b61 = . 1313134173444616536130177999345909470542768366990469474228776563495603985387834598888_wp real ( wp ), parameter :: b64 = . 1101544395386396206773696967716892932905881833462590372574439152868807925960672597269_wp real ( wp ), parameter :: b65 = . 5251861293704493169028793726497884197969231482767006781394278671973374613247338410788_wp real ( wp ), parameter :: b71 = . 1342003418463226002727476951680931444018781918996634475042938727232827990267510411664_wp real ( wp ), parameter :: b74 = . 6960887032881160802299824047678314828416281106463280160258778625630871045892118300249_wp real ( wp ), parameter :: b75 = . 2504977215703398097125518092509800218006823479445679226772611578145189247821334145350_wp real ( wp ), parameter :: b76 = - . 7910231164923596311158543989705934101157374376741710930213845258180034007039221691766_wp real ( wp ), parameter :: b81 = . 722182741896626194200508184551704977047411771786043553816725961719388531778723978951 7e-1_wp real ( wp ), parameter :: b85 = - . 583363229364561071638060613893065187416111593185084019437153089695318415302860382615 8e-1_wp real ( wp ), parameter :: b86 = . 304755766857452522017495007029403609251908255228701578304998246785713162928493623293 3e-2_wp real ( wp ), parameter :: b87 = . 915481802977862558772264029034691975980004078748700968866107312372230786906422273561 9e-1_wp real ( wp ), parameter :: b91 = . 312550081351661794705012052826347661215092881180084429562242445312997971185711894214 0e-1_wp real ( wp ), parameter :: b96 = . 109123821542412892929483495520771649461954647478325118571959619118955095607399521855 8e-3_wp real ( wp ), parameter :: b97 = . 1567257586309938356246107465648794708917441337700138495832023584660674808897051732313_wp real ( wp ), parameter :: b98 = . 1692943511719750238548830676365254553777828871012866864321262291196648014390164387346_wp real ( wp ), parameter :: b101 = . 119066044146686192421688425808092509950954606115616378176147857033813431604361732217 3e-1_wp real ( wp ), parameter :: b106 = . 2834370820246027860255992266982188665428702252125274101591962479489267620092644600260_wp real ( wp ), parameter :: b107 = - . 4163121675706282353724276181356300212164192944619403444080980777942870933794472685216_wp real ( wp ), parameter :: b108 = . 2646463339497663668210902091085361027053564926326924812994390366777834273576276339310_wp real ( wp ), parameter :: b109 = . 7388498091463228097090708267277348761559649602732109347956391853827232193715322584046_wp real ( wp ), parameter :: b111 = . 234065736913319789147083837798400784250394685775684541636233986599966237705791696029 0e-1_wp real ( wp ), parameter :: b116 = . 944931301894936540130025309560561432498251662377734609644880062513095401829593904774 0e-1_wp real ( wp ), parameter :: b117 = - . 2728720559019952606363092580665963250433705067252372208829562550632597611313198545757_wp real ( wp ), parameter :: b118 = . 2240220461156057997944315522518131846261124699330640294272458923970695162204120486767_wp real ( wp ), parameter :: b119 = . 6043814410751657569719347222576085340011863610739072982875214128849988434755301302413_wp real ( wp ), parameter :: b1110 = - . 308153769292793809006924341582820792992912227338633260500472468662657970610610853317 3e-1_wp real ( wp ), parameter :: b121 = . 454437753101761631576538990815309649864589094199196117783663313790235366676063368708 8e-1_wp real ( wp ), parameter :: b126 = - . 118799667186402858676525421928535634337628599017638647489115092924566035574213086018 3e-2_wp real ( wp ), parameter :: b127 = . 120356549909226109796618821723436205851544669504769411623189591929644148009012557559 6e-1_wp real ( wp ), parameter :: b128 = . 751269029876496682162752137156557214027531550065624051350452811259815018139344504866 6e-1_wp real ( wp ), parameter :: b129 = - . 182209240988801240314118610597483889276157985919218207469682836908895976741907756717 8e-1_wp real ( wp ), parameter :: b1210 = - . 257152854084104346880637622177139620546035418151340038310609043034595616298103127820 7e-3_wp real ( wp ), parameter :: b1211 = . 453207837134746818596527095201150273430374435523846952064829404667274184437570948454 0e-2_wp real ( wp ), parameter :: b131 = . 1767137782592772030958798765711993346076326211800572275450227165783753236705910865492_wp real ( wp ), parameter :: b134 = . 1101544395386396206773696967716892932905881833462590372574439152868807925960672597269_wp real ( wp ), parameter :: b135 = . 5251861293704493169028793726497884197969231482767006781394278671973374613247338410788_wp real ( wp ), parameter :: b136 = - . 4716207672801957948798217912152359376250630852495511063738116933651587031904328351457_wp real ( wp ), parameter :: b137 = . 8990310498491875266368990071875152922763468480002185650326986125011485318362907529907_wp real ( wp ), parameter :: b138 = - . 7467230306916289638599602008088168117750310724922743198498253813592425510843163068237_wp real ( wp ), parameter :: b139 = - 1.017101516756146040853186972006065972987027196800421553809421717321497529906933631477_wp real ( wp ), parameter :: b1310 = . 1263508715195988962951307827687648346421985369266969430473204298972536422365713122404_wp real ( wp ), parameter :: b1311 = . 5660138272355064270682732249907470012763799581315503842554078250210353407723389384909_wp real ( wp ), parameter :: b1312 = . 5986492052088624001098038724464832066388402270027708075754868643976463442046741430643_wp real ( wp ), parameter :: b141 = . 1277534947480869822694777006880571541639616513225826576695303067404023367054772185702_wp real ( wp ), parameter :: b144 = . 6960887032881160802299824047678314828416281106463280160258778625630871045892118300249_wp real ( wp ), parameter :: b145 = . 2504977215703398097125518092509800218006823479445679226772611578145189247821334145350_wp real ( wp ), parameter :: b146 = - . 7368246436028416867609246757454535374296880219263938462439002090823944915566264811824_wp real ( wp ), parameter :: b147 = - . 2778578777108241826773273374900723250222301109862216853553157201018147214465526588169_wp real ( wp ), parameter :: b148 = - . 5997526313598403501296884799197753021563938240370770948150479630779446286262003432092_wp real ( wp ), parameter :: b149 = . 2024692338910704693500237585621903123505161701229471467587157451308903694383321235511_wp real ( wp ), parameter :: b1410 = . 543203698236384978060068465263444360146818996967866677504671881322498988341610487144 5e-2_wp real ( wp ), parameter :: b1411 = - . 107447247415504792010120691989438133712544466427220502431479893641873325892076956337 0e-1_wp real ( wp ), parameter :: b1412 = . 6951688484570234004700591858164146072357628221597117426434839740273190245052113679250_wp real ( wp ), parameter :: b1413 = - . 624665113095250339443154711675518050860016757570131827064555161802161479910207640856 2e-1_wp real ( wp ), parameter :: b151 = . 2616697163778127283312402097548997641973627614039327706102102491953717704187699219879_wp real ( wp ), parameter :: b152 = . 2648393837637998444017114637226410617549380471403260915138219956598851813773461557120_wp real ( wp ), parameter :: b156 = - . 1998011270205324791079663580830885049848273745422651189682301346802905866051733476638_wp real ( wp ), parameter :: b157 = - . 6510499873052827124921914489683813643155863882516440645794556633240216912803403931627_wp real ( wp ), parameter :: b1513 = . 1998011270205324791079663580830885049848273745422651189682301346802905866051733476638_wp real ( wp ), parameter :: b1514 = . 6510499873052827124921914489683813643155863882516440645794556633240216912803403931627_wp real ( wp ), parameter :: b161 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b163 = - . 5558812136754302060726143105309293455559184141943321053532734480099926250948077261183_wp real ( wp ), parameter :: b1615 = . 5558812136754302060726143105309293455559184141943321053532734480099926250948077261183_wp real ( wp ), parameter :: b171 = . 573207954320655910311426170510398365649521650486746231028599442807856804316065443979 5e-1_wp real ( wp ), parameter :: b172 = - . 5499710763899945608115841896290187887481592249811405834035066676393750158953834290913_wp real ( wp ), parameter :: b173 = - . 6499374174008749135116607420010890619711618624173024222960650740195874521599402439688_wp real ( wp ), parameter :: b176 = - 1.061667370401756207240019539023157074172524666307437022389776456477183230723296269940_wp real ( wp ), parameter :: b177 = - . 404015668980635829426968223421218330826256202391248636522064257787040249155571106248 0e-1_wp real ( wp ), parameter :: b178 = - . 1828302366407607254710272774065261039379052622607190097473388370699414811305446343873_wp real ( wp ), parameter :: b179 = - . 3336592706492786845666575661828162687906558601961826440714525336287466822150370633233_wp real ( wp ), parameter :: b1710 = . 3956485423760567568801345107166015519577734440834727480004748180136901286634710478955_wp real ( wp ), parameter :: b1711 = . 6950570494599735891002099282005158129027126868215679095299345058137097320818106877162_wp real ( wp ), parameter :: b1712 = . 2714873764573748588377263058539220945263829691804714618529052530298982146739754552950_wp real ( wp ), parameter :: b1713 = . 6071810560414041202873774349794680164722661545496003750296400378855628528787164400954_wp real ( wp ), parameter :: b1714 = . 5918636248229842840838104081530739675596239893196764223449596939309288102548549028752_wp real ( wp ), parameter :: b1715 = . 6499374174008749135116607420010890619711618624173024222960650740195874521599402439688_wp real ( wp ), parameter :: b1716 = . 5499710763899945608115841896290187887481592249811405834035066676393750158953834290913_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = - . 384615384615384615384615384615384615384615384615384615384615384615384615384615384615 4e-1_wp real ( wp ), parameter :: c3 = - . 909090909090909090909090909090909090909090909090909090909090909090909090909090909090 9e-1_wp real ( wp ), parameter :: c6 = - . 1348314606741573033707865168539325842696629213483146067415730337078651685393258426966_wp real ( wp ), parameter :: c7 = - . 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c9 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c10 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c11 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c12 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c13 = . 1348314606741573033707865168539325842696629213483146067415730337078651685393258426966_wp real ( wp ), parameter :: c14 = . 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c15 = . 909090909090909090909090909090909090909090909090909090909090909090909090909090909090 9e-1_wp real ( wp ), parameter :: c16 = . 384615384615384615384615384615384615384615384615384615384615384615384615384615384615 4e-1_wp real ( wp ), parameter :: c17 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + & b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b156 * f6 + b157 * f7 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b163 * f3 + b1615 * f15 ), f16 ) call me % f ( t + h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b176 * f6 + b177 * f7 + b178 * f8 + b179 * f9 + & b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c6 * f6 + c7 * f7 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 ) end associate end procedure rkh10 !***************************************************************************************** !***************************************************************************************** end submodule rklib_fixed_steps !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_fixed_steps.f90.html"},{"title":"rklib_example.f90 – rklib","text":"This file depends on sourcefile~~rklib_example.f90~~EfferentGraph sourcefile~rklib_example.f90 rklib_example.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_example.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Programs rklib_example Source Code rklib_example.f90 Source Code program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example","tags":"","loc":"sourcefile/rklib_example.f90.html"}]} \ No newline at end of file +var tipuesearch = {"pages":[{"title":" rklib ","text":"rklib rklib : A modern Fortran library of fixed and variable-step Runge-Kutta solvers. Description This is a work in progress! The focus of this library is single-step, explicit Runge-Kutta solvers for 1st order differential equations. Novel features: The library includes a wide range of both fixed and variable-step Runge-Kutta methods, from very low to very high order. It is object-oriented and written in modern Fortran. It allows for defining a variable-step size integrator with a custom-tuned step size selection method. See stepsize_class in the code. The real kind is selectable via a compiler directive ( REAL32 , REAL64 , or REAL128 ). Integration to an event is also supported. The root-finding method is also selectable (via the roots-fortran library). Available Runge-Kutta methods: Number of fixed-step methods: 27 Number of variable-step methods: 48 Total number of methods: 75 Fixed-step methods: Name Description Properties Order Stages Registers CFL Reference euler Euler 1 1 1 1.0 Euler (1768) midpoint Midpoint 2 2 2 ? heun Heun 2 2 2 ? rkssp22 2-stage, 2nd order TVD Runge-Kutta Shu-Osher SSP 2 2 1 1.0 Shu & Oscher (1988) rk3 3th order Runge-Kutta 3 3 3 ? rkssp33 3-stage, 3rd order TVD Runge-Kutta Shu-Osher SSP 3 3 1 1.0 Shu & Oscher (1988) rkssp53 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth SSP 3 5 2 2.65 Ruuth (2006) rk4 Classic 4th order Runge-Kutta 4 4 4 Kutta (1901) rks4 4th order Runge-Kutta Shanks 4 4 4 Shanks (1965) rkr4 4th order Runge-Kutta Ralston 4 4 4 Ralston (1962) rkls44 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu LS 4 4 2 Jiang and Shu (1988) rkls54 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy LS 4 5 2 0.32 Carpenter & Kennedy (1994) rkssp54 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth SSP 4 5 4 1.51 Ruuth (2006) rks5 5th order Runge-Kutta Shanks 5 5 5 Shanks (1965) rk5 5th order Runge-Kutta 5 6 6 ? rkc5 5th order Runge-Kutta Cassity 5 6 6 Cassity (1966) rkl5 5th order Runge-Kutta Lawson 5 6 6 Lawson (1966) rklk5a 5th order Runge-Kutta Luther-Konen 1 5 6 6 Luther & Konen (1965) rklk5b 5th order Runge-Kutta Luther-Konen 2 5 6 6 Luther & Konen (1965) rkb6 6th order Runge-Kutta Butcher 6 7 7 Butcher (1963) rk7 7th order Runge-Kutta Shanks 7 9 9 Shanks (1965) rk8_10 10-stage, 8th order Runge-Kutta Shanks 8 10 10 Shanks (1965) rkcv8 11-stage, 8th order Runge-Kutta Cooper-Verner 8 11 11 Cooper & Verner (1972) rk8_12 12-stage, 8th order Runge-Kutta Shanks 8 12 12 Shanks (1965) rkz10 10th order Runge-Kutta Zhang 10 16 16 Zhang (2019) rko10 10th order Runge-Kutta Ono 10 17 17 Ono (2003) rkh10 10th order Runge-Kutta Hairer 10 17 17 Hairer (1978) Variable-step methods: Name Description Properties Order Stages Registers CFL Reference rkbs32 Bogacki & Shampine 3(2) FSAL 3 4 4 Bogacki & Shampine (1989) rkssp43 4-stage, 3rd order SSP SSP, LS 3 4 2 2.0 Kraaijevanger (1991) , Conde et al. (2018) rkf45 Fehlberg 4(5) 4 6 6 Fehlberg (1969) rkck54 Cash & Karp 5(4) 5 6 6 Cash & Karp (1990) rkdp54 Dormand-Prince 5(4) FSAL 5 7 7 Dormand & Prince (1980) rkt54 Tsitouras 5(4) FSAL 5 7 7 Tsitouras (2011) rks54 Stepanov 5(4) FSAL 5 7 7 Stepanov (2022) rkpp54 Papakostas-PapaGeorgiou 5(4) FSAL 5 7 7 Papakostas & Papageorgiou (1996) rkpp54b Papakostas-PapaGeorgiou 5(4) b FSAL 5 7 7 Papakostas & Papageorgiou (1996) rkbs54 Bogacki & Shampine 5(4) 5 8 8 Bogacki & Shampine (1996) rkss54 Sharp & Smart 5(4) 5 7 7 Sharp & Smart (1993) rkdp65 Dormand-Prince 6(5) 6 8 8 Dormand & Prince (1981) rkc65 Calvo 6(5) 6 9 9 Calvo (1990) rktp64 Tsitouras & Papakostas NEW6(4) 6 7 7 Tsitouras & Papakostas (1999) rkv65e Verner efficient (9,6(5)) FSAL 6 9 9 Verner (1994) rkv65r Verner robust (9,6(5)) FSAL 6 9 9 Verner (1994) rkv65 Verner 6(5) 6 8 8 Verner (2006) dverk65 Verner 6(5) \"DVERK\" 6 8 8 Verner (?) rktf65 Tsitouras & Famelis 6(5) FSAL 6 9 9 Tsitouras & Famelis (2006) rktp75 Tsitouras & Papakostas NEW7(5) 7 9 9 Tsitouras & Papakostas (1999) rktmy7 7th order Tanaka-Muramatsu-Yamashita 7 10 10 Tanaka, Muramatsu & Yamashita (1992) rktmy7s 7th order Stable Tanaka-Muramatsu-Yamashita 7 10 10 Tanaka, Muramatsu & Yamashita (1992) rkv76e Verner efficient (10:7(6)) 7 10 10 Verner (1978) rkv76r Verner robust (10:7(6)) 7 10 10 Verner (1978) rkss76 Sharp & Smart 7(6) 7 11 11 Sharp & Smart (1993) rkf78 Fehlberg 7(8) 7 13 13 Fehlberg (1968) rkv78 Verner 7(8) 7 13 13 Verner (1978) dverk78 Verner \"Maple\" 7(8) 7 13 13 Verner (?) rkdp85 Dormand-Prince 8(5) 8 12 12 Hairer (1993) rktp86 Tsitouras & Papakostas NEW8(6) 8 12 12 Tsitouras & Papakostas (1999) rkdp87 Dormand & Prince RK8(7)13M 8 13 13 Prince & Dormand (1981) rkv87e Verner efficient (8)7 8 13 13 Verner (1978) rkv87r Verner robust (8)7 8 13 13 Verner (1978) rkev87 Enright-Verner (8)7 8 13 13 Enright (1993) rkk87 Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) 8 13 13 Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras (2022) rkf89 Fehlberg 8(9) 8 17 17 Fehlberg (1968) rkv89 Verner 8(9) 8 16 16 Verner (1978) rkt98a Tsitouras 9(8) A 9 16 16 Tsitouras (2001) rkv98e Verner efficient (16:9(8)) 9 16 16 Verner (1978) rkv98r Verner robust (16:9(8)) 9 16 16 Verner (1978) rks98 Sharp 9(8) 9 16 16 Sharp (2000) rkf108 Feagin 8(10) 10 17 17 Feagin (2006) rkc108 Curtis 10(8) 10 21 21 Curtis (1975) rkb109 Baker 10(9) 10 21 21 Baker (?) rks1110a Stone 11(10) 11 26 26 Stone (2015) rkf1210 Feagin 12(10) 12 25 25 Feagin (2006) rko129 Ono 12(9) 12 29 29 Ono (2006) rkf1412 Feagin 14(12) 14 35 35 Feagin (2006) Properties key: LS = Low storage SSP = Strong stability preserving FSAL = First same as last CFL = Courant-Friedrichs-Lewy Example use case Basic use of the library is shown here (this uses the rktp86 method): program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example The result is: Success\ntf = 100.00\nxf = -0.1360372426E+01 0.1325538438E+01 Example performance comparison Running the unit tests will generate some performance plots. The following is for the variable-step methods compiled with quadruple precision (e.g, fpm test rk_test_variable_step --compiler ifort --flag \"-DREAL128\" ): Compiling A Fortran Package Manager manifest file is included, so that the library and test cases can be compiled with FPM. For example: fpm build --profile release\nfpm test --profile release To use rklib within your FPM project, add the following to your fpm.toml file: [dependencies] rklib = { git = \"https://github.com/jacobwilliams/rklib.git\" } By default, the library is built with double precision ( real64 ) real values. Explicitly specifying the real kind can be done using the following processor flags: Preprocessor flag Kind Number of bytes REAL32 real(kind=real32) 4 REAL64 real(kind=real64) 8 REAL128 real(kind=real128) 16 For example, to build a single precision version of the library, use: fpm build --profile release --flag \"-DREAL32\" To generate the documentation using FORD , run: ford ford.md 3rd Party Dependencies The library requires roots-fortran . The unit tests require pyplot-fortran , to generate the performance plots. The coefficients app (not required to use the library, but used to generate some of the code) requires the mpfun2020-var1 arbitrary precision library. All of these will be automatically downloaded by FPM. Documentation The latest API documentation for the master branch can be found here . This was generated from the source code using FORD . Notes The original version of this code was split off from the Fortran Astrodynamics Toolkit in September 2022. For developers To add a new method to this library: Update the tables (either the fixed or variable one in scripts/generate_files.py ) Run python scripts/generate_files.py to update all the include files. This script will generate all the boilerplate code for all the methods. It will also this README file. Add a step function (either in rklib_fixed_steps.f90 or rklib_variable_steps.f90 ). Note that you can generate a template of an RK step function using the scripts/generate_rk_code.py script. The two command line arguments are the number of function evaluations required and the method name (e.g., 'rk4' ). Edit the template accordingly (note at the FSAL ones have a slightly different format). Update the unit tests. License The rklib source code and related files and documentation are distributed under a permissive free software license (BSD-3). References E. B. Shanks, \" Higher Order Approximations of Runge-Kutta Type \", NASA Technical Note, NASA TN D-2920, Sept. 1965. E. B. Shanks, \" Solutions of Differential Equations by Evaluations of Functions \" Math. Comp. 20 (1966). E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 , 1968. E. Fehlberg, \" Low-order classical Runge-Kutta formulas with stepsize control and their application to some heat transfer problems \", NASA Technical Report R-315, July 1, 1969. J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", SIAM Journal on Numerical Analysis, 15(4), 772-790, 1978. T. Feagin, \" High-Order Explicit Runge-Kutta Methods \" J. C. Butcher, \" A history of Runge-Kutta methods \", Applied Numerical Mathematics, Volume 20, Issue 3, March 1996, Pages 247-260 J. C. Butcher, \" On Runge-Kutta Processes of High Order \", Oct. 28, 1963. G. E. Müllges & F. Uhlig, \"Numerical Algorithms with Fortran\", Springer, 1996. K. Fox, \" Numerical Integration of the Equations of Motion of Celestial Mechanics \", Celestial Mechanics 33, p 127-142, 1984. Mathematics Source Library Maple worksheets on the derivation of Runge-Kutta schemes Index of numerical integrators J. Williams, Fehlberg's Runge-Kutta Methods , Feb. 10, 2018. C.-W. Shu, S. Osher, \" Efficient implementation of essentially non-oscillatory shock-capturing schemes \", Journal of Computational Physics, 77(2), 439-471, 1988. S. Ruuth, \" Global optimization of explicit strong-stability-preserving Runge-Kutta methods. \" Mathematics of Computation 75.253 (2006): 183-207. Jiang, Guang-Shan, and Chi-Wang Shu. \" Efficient implementation of weighted ENO schemes. \" Journal of computational physics 126.1 (1996): 202-228. See also FOODIE FLINT DDEABM DOP853 DVODE ODEPACK libode Developer Info Jacob Williams","tags":"home","loc":"index.html"},{"title":"rklib_properties – rklib ","text":"type, public :: rklib_properties Properties of an RK method. Contents Variables order number_of_stages fsal low_storage strong_stability_preserving number_of_registers cfl short_name long_name Source Code rklib_properties Components Type Visibility Attributes Name Initial integer, public :: order = 0 order of the method integer, public :: number_of_stages = 0 number of stages logical, public :: fsal = .false. if it is a FSAL method logical, public :: low_storage = .false. if it is a LS method logical, public :: strong_stability_preserving = .false. if it is a SSP method integer, public :: number_of_registers = 0 number of f vectors used real(kind=wp), public :: cfl = zero Courant-Friedrichs-Lewy number character(len=:), public, allocatable :: short_name short version of the method name character(len=:), public, allocatable :: long_name longer description of the method Source Code type , public :: rklib_properties !! Properties of an RK method. integer :: order = 0 !! order of the method integer :: number_of_stages = 0 !! number of stages logical :: fsal = . false . !! if it is a FSAL method logical :: low_storage = . false . !! if it is a LS method logical :: strong_stability_preserving = . false . !! if it is a SSP method integer :: number_of_registers = 0 !! number of `f` vectors used real ( wp ) :: cfl = zero !! Courant-Friedrichs-Lewy number character ( len = :), allocatable :: short_name !! short version of the method name character ( len = :), allocatable :: long_name !! longer description of the method end type rklib_properties","tags":"","loc":"type/rklib_properties.html"},{"title":"stepsize_class – rklib ","text":"type, public :: stepsize_class Algorithms for adjusting the step size for variable-step\nRunge-Kutta integrators. Inherited by type~~stepsize_class~~InheritedByGraph type~stepsize_class stepsize_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_class->type~stepsize_class stepsize_method type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables fixed_step_mode hmax hmin hfactor_reject hfactor_accept accept_mode max_attempts relative_err safety_factor p_exponent_offset norm Type-Bound Procedures initialize compute_stepsize destroy Source Code stepsize_class Components Type Visibility Attributes Name Initial logical, private :: fixed_step_mode = .false. if true, then the method runs in\nfixed step mode with not error estimation real(kind=wp), private :: hmax = 1.0e+6_wp maximum allowed step size real(kind=wp), private :: hmin = 1.0e-6_wp minimum allowed step size real(kind=wp), private :: hfactor_reject = 0.5_wp minimum allowed factor for decreasing step size after rejected step real(kind=wp), private :: hfactor_accept = 2.0_wp maximum allowed factor for increasing step size after accepted step integer, private :: accept_mode = 2 method to determine if step is accepted [1,2] integer, private :: max_attempts = 10000 maximum number of attempts to decrease step size before giving up logical, private :: relative_err = .false. to use tol*h in the hfactor equation real(kind=wp), private :: safety_factor = 0.9_wp for hfactor equation (>0) integer, private :: p_exponent_offset = 1 p + this value in the exponent (0 or 1) procedure( norm_func ), private, nopass, pointer :: norm => maxval_func routine for computing the norm of the state Type-Bound Procedures procedure, public :: initialize => stepsize_class_constructor private pure subroutine stepsize_class_constructor (me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. procedure, public :: compute_stepsize private subroutine compute_stepsize (me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted procedure, public :: destroy => destroy_stepsize_class private subroutine destroy_stepsize_class (me) Destructor for stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me Source Code type , public :: stepsize_class !! Algorithms for adjusting the step size for variable-step !! Runge-Kutta integrators. private logical :: fixed_step_mode = . false . !! if true, then the method runs in !! fixed step mode with not error estimation real ( wp ) :: hmax = 1.0e+6_wp !! maximum allowed step size real ( wp ) :: hmin = 1.0e-6_wp !! minimum allowed step size real ( wp ) :: hfactor_reject = 0.5_wp !! minimum allowed factor for decreasing step size after rejected step real ( wp ) :: hfactor_accept = 2.0_wp !! maximum allowed factor for increasing step size after accepted step integer :: accept_mode = 2 !! method to determine if step is accepted [1,2] integer :: max_attempts = 10000 !! maximum number of attempts to decrease step size before giving up ! for the `hfactor` equation: logical :: relative_err = . false . !! to use `tol*h` in the `hfactor` equation real ( wp ) :: safety_factor = 0.9_wp !! for `hfactor` equation (>0) integer :: p_exponent_offset = 1 !! `p` + this value in the exponent (0 or 1) procedure ( norm_func ), nopass , pointer :: norm => maxval_func !! routine for computing the norm of the state contains private procedure , public :: initialize => stepsize_class_constructor procedure , public :: compute_stepsize procedure , public :: destroy => destroy_stepsize_class end type stepsize_class","tags":"","loc":"type/stepsize_class.html"},{"title":"rk_class – rklib ","text":"type, public, abstract :: rk_class main integration class Inherits type~~rk_class~~InheritsGraph type~rk_class rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_class~~InheritedByGraph type~rk_class rk_class type~rk_fixed_step_class rk_fixed_step_class type~rk_fixed_step_class->type~rk_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_class->type~rk_class type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~euler_class euler_class type~euler_class->type~rk_fixed_step_class type~heun_class heun_class type~heun_class->type~rk_fixed_step_class type~midpoint_class midpoint_class type~midpoint_class->type~rk_fixed_step_class type~rk3_class rk3_class type~rk3_class->type~rk_fixed_step_class type~rk4_class rk4_class type~rk4_class->type~rk_fixed_step_class type~rk5_class rk5_class type~rk5_class->type~rk_fixed_step_class type~rk7_class rk7_class type~rk7_class->type~rk_fixed_step_class type~rk8_10_class rk8_10_class type~rk8_10_class->type~rk_fixed_step_class type~rk8_12_class rk8_12_class type~rk8_12_class->type~rk_fixed_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkb6_class rkb6_class type~rkb6_class->type~rk_fixed_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc5_class rkc5_class type~rkc5_class->type~rk_fixed_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkcv8_class rkcv8_class type~rkcv8_class->type~rk_fixed_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkh10_class rkh10_class type~rkh10_class->type~rk_fixed_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rkl5_class rkl5_class type~rkl5_class->type~rk_fixed_step_class type~rklk5a_class rklk5a_class type~rklk5a_class->type~rk_fixed_step_class type~rklk5b_class rklk5b_class type~rklk5b_class->type~rk_fixed_step_class type~rkls44_class rkls44_class type~rkls44_class->type~rk_fixed_step_class type~rkls54_class rkls54_class type~rkls54_class->type~rk_fixed_step_class type~rko10_class rko10_class type~rko10_class->type~rk_fixed_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rkr4_class rkr4_class type~rkr4_class->type~rk_fixed_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks4_class rks4_class type~rks4_class->type~rk_fixed_step_class type~rks5_class rks5_class type~rks5_class->type~rk_fixed_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp22_class rkssp22_class type~rkssp22_class->type~rk_fixed_step_class type~rkssp33_class rkssp33_class type~rkssp33_class->type~rk_fixed_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkssp53_class rkssp53_class type~rkssp53_class->type~rk_fixed_step_class type~rkssp54_class rkssp54_class type~rkssp54_class->type~rk_fixed_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkz10_class rkz10_class type~rkz10_class->type~rk_fixed_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables istatus stopped num_steps max_number_of_steps report_rate stop_on_errors n f report g solver funcs Type-Bound Procedures destroy stop status failed init begin raise_exception clear_exception export_point begin_integration properties Source Code rk_class Components Type Visibility Attributes Name Initial integer, private :: istatus = 0 status code logical, private :: stopped = .false. if user has stopped the integration in f or report . integer, private :: num_steps = 0 number of accepted steps taken integer, private :: max_number_of_steps = huge(1) maximum number of steps to take integer, private :: report_rate = 1 how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. logical, private :: stop_on_errors = .false. if true, then errors will stop the program integer, private :: n = 0 user specified number of variables procedure( deriv_func ), private, pointer :: f => null() user-specified derivative function procedure( report_func ), private, pointer :: report => null() user-specified report function procedure( event_func ), private, pointer :: g => null() event function (stop when this is zero) type(root_method), private :: solver = root_method_brent the root solver method to use for even finding real(kind=wp), private, dimension(:,:), allocatable :: funcs matrix to store the function\nevalutaions in the step function.\nthis will be size ( n x number_of_registers ) Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, private, :: init => initialize_rk_class private subroutine initialize_rk_class (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, private, :: begin => begin_integration_rk_class private subroutine begin_integration_rk_class (me) Begin an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, private, :: raise_exception private subroutine raise_exception (me, error_code) Raise an exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise procedure, private, :: clear_exception private subroutine clear_exception (me) Clear any exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, private, :: export_point private subroutine export_point (me, t, x, first_or_last) Wrapper for exporting points during integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) procedure( begin_func ), private, deferred :: begin_integration subroutine begin_func(me) Prototype routine called before integration begins\nto set up internal variables. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Source Code type , abstract , public :: rk_class !! main integration class private integer :: istatus = 0 !! status code logical :: stopped = . false . !! if user has stopped the integration in `f` or `report`. integer :: num_steps = 0 !! number of accepted steps taken integer :: max_number_of_steps = huge ( 1 ) !! maximum number of steps to take integer :: report_rate = 1 !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. logical :: stop_on_errors = . false . !! if true, then errors will stop the program integer :: n = 0 !! user specified number of variables procedure ( deriv_func ), pointer :: f => null () !! user-specified derivative function procedure ( report_func ), pointer :: report => null () !! user-specified report function procedure ( event_func ), pointer :: g => null () !! event function (stop when this is zero) type ( root_method ) :: solver = root_method_brent !! the root solver method to use for even finding real ( wp ), dimension (:,:), allocatable :: funcs !! matrix to store the function !! evalutaions in the step function. !! this will be size (`n` x `number_of_registers`) contains private procedure , public :: destroy !! destructor procedure , public :: stop => rk_class_stop !! user-callable method to stop the integration procedure , public :: status => rk_class_status !! get status code and message procedure , public :: failed procedure :: init => initialize_rk_class procedure :: begin => begin_integration_rk_class procedure :: raise_exception procedure :: clear_exception procedure :: export_point procedure ( begin_func ), deferred :: begin_integration procedure ( properties_func ), deferred , public :: properties end type rk_class","tags":"","loc":"type/rk_class.html"},{"title":"rk_fixed_step_class – rklib ","text":"type, public, abstract, extends( rk_class ) :: rk_fixed_step_class fixed step size class Inherits type~~rk_fixed_step_class~~InheritsGraph type~rk_fixed_step_class rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_fixed_step_class~~InheritedByGraph type~rk_fixed_step_class rk_fixed_step_class type~euler_class euler_class type~euler_class->type~rk_fixed_step_class type~heun_class heun_class type~heun_class->type~rk_fixed_step_class type~midpoint_class midpoint_class type~midpoint_class->type~rk_fixed_step_class type~rk3_class rk3_class type~rk3_class->type~rk_fixed_step_class type~rk4_class rk4_class type~rk4_class->type~rk_fixed_step_class type~rk5_class rk5_class type~rk5_class->type~rk_fixed_step_class type~rk7_class rk7_class type~rk7_class->type~rk_fixed_step_class type~rk8_10_class rk8_10_class type~rk8_10_class->type~rk_fixed_step_class type~rk8_12_class rk8_12_class type~rk8_12_class->type~rk_fixed_step_class type~rkb6_class rkb6_class type~rkb6_class->type~rk_fixed_step_class type~rkc5_class rkc5_class type~rkc5_class->type~rk_fixed_step_class type~rkcv8_class rkcv8_class type~rkcv8_class->type~rk_fixed_step_class type~rkh10_class rkh10_class type~rkh10_class->type~rk_fixed_step_class type~rkl5_class rkl5_class type~rkl5_class->type~rk_fixed_step_class type~rklk5a_class rklk5a_class type~rklk5a_class->type~rk_fixed_step_class type~rklk5b_class rklk5b_class type~rklk5b_class->type~rk_fixed_step_class type~rkls44_class rkls44_class type~rkls44_class->type~rk_fixed_step_class type~rkls54_class rkls54_class type~rkls54_class->type~rk_fixed_step_class type~rko10_class rko10_class type~rko10_class->type~rk_fixed_step_class type~rkr4_class rkr4_class type~rkr4_class->type~rk_fixed_step_class type~rks4_class rks4_class type~rks4_class->type~rk_fixed_step_class type~rks5_class rks5_class type~rks5_class->type~rk_fixed_step_class type~rkssp22_class rkssp22_class type~rkssp22_class->type~rk_fixed_step_class type~rkssp33_class rkssp33_class type~rkssp33_class->type~rk_fixed_step_class type~rkssp53_class rkssp53_class type~rkssp53_class->type~rk_fixed_step_class type~rkssp54_class rkssp54_class type~rkssp54_class->type~rk_fixed_step_class type~rkz10_class rkz10_class type~rkz10_class->type~rk_fixed_step_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed properties step initialize integrate integrate_to_event begin_integration Source Code rk_fixed_step_class Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure( step_func_fixed ), private, deferred :: step the step routine for the rk method subroutine step_func_fixed(me, t, x, h, xf) Prototype rk step function for the fixed-step methods. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, private, :: begin_integration => begin_integration_rk_fixed_step_class private subroutine begin_integration_rk_fixed_step_class (me) Begin a rk_fixed_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me Source Code type , extends ( rk_class ), abstract , public :: rk_fixed_step_class !! fixed step size class private contains private procedure ( step_func_fixed ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_fixed_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_fixed_step procedure , public :: integrate_to_event => integrate_to_event_fixed_step procedure :: begin_integration => begin_integration_rk_fixed_step_class end type rk_fixed_step_class","tags":"","loc":"type/rk_fixed_step_class.html"},{"title":"rk_variable_step_class – rklib ","text":"type, public, abstract, extends( rk_class ) :: rk_variable_step_class Main integration class for variable step size Runge-Kutta methods Inherits type~~rk_variable_step_class~~InheritsGraph type~rk_variable_step_class rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_variable_step_class~~InheritedByGraph type~rk_variable_step_class rk_variable_step_class type~dverk65_class dverk65_class type~dverk65_class->type~rk_variable_step_class type~dverk78_class dverk78_class type~dverk78_class->type~rk_variable_step_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rkb109_class rkb109_class type~rkb109_class->type~rk_variable_step_class type~rkbs54_class rkbs54_class type~rkbs54_class->type~rk_variable_step_class type~rkc108_class rkc108_class type~rkc108_class->type~rk_variable_step_class type~rkc65_class rkc65_class type~rkc65_class->type~rk_variable_step_class type~rkck54_class rkck54_class type~rkck54_class->type~rk_variable_step_class type~rkdp65_class rkdp65_class type~rkdp65_class->type~rk_variable_step_class type~rkdp85_class rkdp85_class type~rkdp85_class->type~rk_variable_step_class type~rkdp87_class rkdp87_class type~rkdp87_class->type~rk_variable_step_class type~rkev87_class rkev87_class type~rkev87_class->type~rk_variable_step_class type~rkf108_class rkf108_class type~rkf108_class->type~rk_variable_step_class type~rkf1210_class rkf1210_class type~rkf1210_class->type~rk_variable_step_class type~rkf1412_class rkf1412_class type~rkf1412_class->type~rk_variable_step_class type~rkf45_class rkf45_class type~rkf45_class->type~rk_variable_step_class type~rkf78_class rkf78_class type~rkf78_class->type~rk_variable_step_class type~rkf89_class rkf89_class type~rkf89_class->type~rk_variable_step_class type~rkk87_class rkk87_class type~rkk87_class->type~rk_variable_step_class type~rko129_class rko129_class type~rko129_class->type~rk_variable_step_class type~rks1110a_class rks1110a_class type~rks1110a_class->type~rk_variable_step_class type~rks98_class rks98_class type~rks98_class->type~rk_variable_step_class type~rkss54_class rkss54_class type~rkss54_class->type~rk_variable_step_class type~rkss76_class rkss76_class type~rkss76_class->type~rk_variable_step_class type~rkssp43_class rkssp43_class type~rkssp43_class->type~rk_variable_step_class type~rkt98a_class rkt98a_class type~rkt98a_class->type~rk_variable_step_class type~rktmy7_class rktmy7_class type~rktmy7_class->type~rk_variable_step_class type~rktmy7s_class rktmy7s_class type~rktmy7s_class->type~rk_variable_step_class type~rktp64_class rktp64_class type~rktp64_class->type~rk_variable_step_class type~rktp75_class rktp75_class type~rktp75_class->type~rk_variable_step_class type~rktp86_class rktp86_class type~rktp86_class->type~rk_variable_step_class type~rkv65_class rkv65_class type~rkv65_class->type~rk_variable_step_class type~rkv76e_class rkv76e_class type~rkv76e_class->type~rk_variable_step_class type~rkv76r_class rkv76r_class type~rkv76r_class->type~rk_variable_step_class type~rkv78_class rkv78_class type~rkv78_class->type~rk_variable_step_class type~rkv87e_class rkv87e_class type~rkv87e_class->type~rk_variable_step_class type~rkv87r_class rkv87r_class type~rkv87r_class->type~rk_variable_step_class type~rkv89_class rkv89_class type~rkv89_class->type~rk_variable_step_class type~rkv98e_class rkv98e_class type~rkv98e_class->type~rk_variable_step_class type~rkv98r_class rkv98r_class type~rkv98r_class->type~rk_variable_step_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables stepsize_method rtol atol hinit_method num_rejected_steps last_accepted_step_size Type-Bound Procedures destroy stop status failed properties step initialize integrate integrate_to_event info hstart hinit begin_integration compute_initial_step order Source Code rk_variable_step_class Components Type Visibility Attributes Name Initial type( stepsize_class ), private :: stepsize_method the method for varying the step size real(kind=wp), private, dimension(:), allocatable :: rtol relative tolerance ( size(n) ) real(kind=wp), private, dimension(:), allocatable :: atol absolute tolerance ( size(n) ) integer, private :: hinit_method = 1 if automatically computing the inital step size, which\nmethod to use. 1 = hstart , 2 = hinit . integer, private :: num_rejected_steps = 0 number of rejected steps real(kind=wp), private :: last_accepted_step_size = zero the last accepted step size dt from the integration\n(positive or negative) Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure( step_func_variable ), private, deferred :: step the step routine for the rk method subroutine step_func_variable(me, t, x, h, xf, xerr) Prototype rk step function for the variable-step methods. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, private, :: hstart for automatically computing the initial step size [this is from DDEABM] private subroutine hstart (me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. It is based on an estimate of the local lipschitz constant for the\n differential equation (lower bound on a norm of the jacobian) ,\n a bound on the differential equation (first derivative), and\n a bound on the partial derivative of the equation with respect to\n the independent variable. (all approximated near the initial point a) Note Subroutine hstart also uses the me%stepsize_method%norm function for computing vector norms Note This routine is from DDEABM . History 820301 date written -- watts, h. a., (snla) 890531 changed all specific intrinsics to generic. (wrb) 890831 modified array declarations. (wrb) 890911 removed unnecessary intrinsics. (wrb) 891024 changed references from dvnorm to dhvnrm. (wrb) 891214 prologue converted to version 4.0 format. (bab) 900328 added type section. (wrb) 910722 updated author section. (als) December, 2015 : Refactored this routine (jw) April 2016 : Some modifications for the variable-step RK module (jw) Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method. procedure, private, :: hinit for automatically computing the initial step size [this is from DOP853] private function hinit (me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Note This routine is from dop853. It was modified for this module. Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) procedure, private, :: begin_integration => begin_integration_rk_variable_step_class private subroutine begin_integration_rk_variable_step_class (me) Begin a rk_variable_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me procedure, private, :: compute_initial_step private function compute_initial_step (me, t0, tf, x0, h0) result(dt) Compute the initial step size. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use procedure, private, :: order returns p , the order of the method private pure function order (me) result(p) Returns the order of the RK method Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method Source Code type , extends ( rk_class ), abstract , public :: rk_variable_step_class !! Main integration class for variable step size Runge-Kutta methods private type ( stepsize_class ) :: stepsize_method !! the method for varying the step size real ( wp ), dimension (:), allocatable :: rtol !! relative tolerance (`size(n)`) real ( wp ), dimension (:), allocatable :: atol !! absolute tolerance (`size(n)`) integer :: hinit_method = 1 !! if automatically computing the inital step size, which !! method to use. 1 = `hstart`, 2 = `hinit`. integer :: num_rejected_steps = 0 !! number of rejected steps real ( wp ) :: last_accepted_step_size = zero !! the last accepted step size `dt` from the integration !! (positive or negative) contains private procedure ( step_func_variable ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_variable_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_variable_step procedure , public :: integrate_to_event => integrate_to_event_variable_step procedure , public :: info => info_variable_step procedure :: hstart !! for automatically computing the initial step size [this is from DDEABM] procedure :: hinit !! for automatically computing the initial step size [this is from DOP853] procedure :: begin_integration => begin_integration_rk_variable_step_class procedure :: compute_initial_step procedure :: order !! returns `p`, the order of the method end type rk_variable_step_class","tags":"","loc":"type/rk_variable_step_class.html"},{"title":"rk_variable_step_fsal_class – rklib ","text":"type, public, abstract, extends( rk_variable_step_class ) :: rk_variable_step_fsal_class a variable step method with the \"first same as last\" (FSAL) property.\nCache the last f and x vectors to use for the next step. The assumption is that the nature of the\nfunction has not changed since the last step.\nIf it has, the user would need to manually call destroy_fsal_cache so that the previous point was not reused. Inherits type~~rk_variable_step_fsal_class~~InheritsGraph type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Inherited by type~~rk_variable_step_fsal_class~~InheritedByGraph type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkbs32_class rkbs32_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rkdp54_class rkdp54_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rkpp54_class rkpp54_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rkpp54b_class rkpp54b_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rks54_class rks54_class type~rks54_class->type~rk_variable_step_fsal_class type~rkt54_class rkt54_class type~rkt54_class->type~rk_variable_step_fsal_class type~rktf65_class rktf65_class type~rktf65_class->type~rk_variable_step_fsal_class type~rkv65e_class rkv65e_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rkv65r_class rkv65r_class type~rkv65r_class->type~rk_variable_step_fsal_class Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Variables t_saved x_saved f_saved Type-Bound Procedures destroy stop status failed properties initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache Source Code rk_variable_step_fsal_class Components Type Visibility Attributes Name Initial real(kind=wp), private, allocatable :: t_saved cached t real(kind=wp), private, dimension(:), allocatable :: x_saved cached x real(kind=wp), private, dimension(:), allocatable :: f_saved cached f Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure( properties_func ), public, deferred :: properties pure function properties_func(me) result(p) Prototype Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Source Code type , extends ( rk_variable_step_class ), abstract , public :: rk_variable_step_fsal_class !! a variable step method with the \"first same as last\" (FSAL) property. !! Cache the last `f` and `x` vectors to use for the next step. !! !! The assumption is that the nature of the !! function has not changed since the last step. !! If it has, the user would need to manually call [[destroy_fsal_cache]] !! so that the previous point was not reused. private real ( wp ), allocatable :: t_saved !! cached `t` real ( wp ), dimension (:), allocatable :: x_saved !! cached `x` real ( wp ), dimension (:), allocatable :: f_saved !! cached `f` contains private procedure , public :: destroy_fsal_cache procedure , public :: check_fsal_cache procedure , public :: set_fsal_cache end type rk_variable_step_fsal_class","tags":"","loc":"type/rk_variable_step_fsal_class.html"},{"title":"euler_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: euler_class Euler Inherits type~~euler_class~~InheritsGraph type~euler_class euler_class type~rk_fixed_step_class rk_fixed_step_class type~euler_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => euler interface private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => euler_properties interface private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/euler_class.html"},{"title":"midpoint_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: midpoint_class Midpoint Inherits type~~midpoint_class~~InheritsGraph type~midpoint_class midpoint_class type~rk_fixed_step_class rk_fixed_step_class type~midpoint_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => midpoint interface private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => midpoint_properties interface private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/midpoint_class.html"},{"title":"heun_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: heun_class Heun Inherits type~~heun_class~~InheritsGraph type~heun_class heun_class type~rk_fixed_step_class rk_fixed_step_class type~heun_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => heun interface private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => heun_properties interface private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/heun_class.html"},{"title":"rkssp22_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp22_class 2-stage, 2nd order TVD Runge-Kutta Shu-Osher Inherits type~~rkssp22_class~~InheritsGraph type~rkssp22_class rkssp22_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp22_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp22 interface private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp22_properties interface private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp22_class.html"},{"title":"rk3_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk3_class 3th order Runge-Kutta Inherits type~~rk3_class~~InheritsGraph type~rk3_class rk3_class type~rk_fixed_step_class rk_fixed_step_class type~rk3_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk3 interface private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk3_properties interface private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk3_class.html"},{"title":"rkssp33_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp33_class 3-stage, 3rd order TVD Runge-Kutta Shu-Osher Inherits type~~rkssp33_class~~InheritsGraph type~rkssp33_class rkssp33_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp33_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp33 interface private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp33_properties interface private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp33_class.html"},{"title":"rkssp53_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp53_class 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth Inherits type~~rkssp53_class~~InheritsGraph type~rkssp53_class rkssp53_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp53_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp53 interface private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp53_properties interface private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp53_class.html"},{"title":"rk4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk4_class Classic 4th order Runge-Kutta Inherits type~~rk4_class~~InheritsGraph type~rk4_class rk4_class type~rk_fixed_step_class rk_fixed_step_class type~rk4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk4 interface private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk4_properties interface private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk4_class.html"},{"title":"rks4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rks4_class 4th order Runge-Kutta Shanks Inherits type~~rks4_class~~InheritsGraph type~rks4_class rks4_class type~rk_fixed_step_class rk_fixed_step_class type~rks4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rks4 interface private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rks4_properties interface private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks4_class.html"},{"title":"rkr4_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkr4_class 4th order Runge-Kutta Ralston Inherits type~~rkr4_class~~InheritsGraph type~rkr4_class rkr4_class type~rk_fixed_step_class rk_fixed_step_class type~rkr4_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkr4 interface private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkr4_properties interface private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkr4_class.html"},{"title":"rkls44_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkls44_class 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu Inherits type~~rkls44_class~~InheritsGraph type~rkls44_class rkls44_class type~rk_fixed_step_class rk_fixed_step_class type~rkls44_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkls44 interface private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkls44_properties interface private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkls44_class.html"},{"title":"rkls54_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkls54_class 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy Inherits type~~rkls54_class~~InheritsGraph type~rkls54_class rkls54_class type~rk_fixed_step_class rk_fixed_step_class type~rkls54_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkls54 interface private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkls54_properties interface private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkls54_class.html"},{"title":"rkssp54_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkssp54_class 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth Inherits type~~rkssp54_class~~InheritsGraph type~rkssp54_class rkssp54_class type~rk_fixed_step_class rk_fixed_step_class type~rkssp54_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkssp54 interface private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkssp54_properties interface private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp54_class.html"},{"title":"rks5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rks5_class 5th order Runge-Kutta Shanks Inherits type~~rks5_class~~InheritsGraph type~rks5_class rks5_class type~rk_fixed_step_class rk_fixed_step_class type~rks5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rks5 interface private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rks5_properties interface private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks5_class.html"},{"title":"rk5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk5_class 5th order Runge-Kutta Inherits type~~rk5_class~~InheritsGraph type~rk5_class rk5_class type~rk_fixed_step_class rk_fixed_step_class type~rk5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk5 interface private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk5_properties interface private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk5_class.html"},{"title":"rkc5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkc5_class 5th order Runge-Kutta Cassity Inherits type~~rkc5_class~~InheritsGraph type~rkc5_class rkc5_class type~rk_fixed_step_class rk_fixed_step_class type~rkc5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkc5 interface private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkc5_properties interface private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc5_class.html"},{"title":"rkl5_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkl5_class 5th order Runge-Kutta Lawson Inherits type~~rkl5_class~~InheritsGraph type~rkl5_class rkl5_class type~rk_fixed_step_class rk_fixed_step_class type~rkl5_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkl5 interface private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkl5_properties interface private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkl5_class.html"},{"title":"rklk5a_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rklk5a_class 5th order Runge-Kutta Luther-Konen 1 Inherits type~~rklk5a_class~~InheritsGraph type~rklk5a_class rklk5a_class type~rk_fixed_step_class rk_fixed_step_class type~rklk5a_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rklk5a interface private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rklk5a_properties interface private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rklk5a_class.html"},{"title":"rklk5b_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rklk5b_class 5th order Runge-Kutta Luther-Konen 2 Inherits type~~rklk5b_class~~InheritsGraph type~rklk5b_class rklk5b_class type~rk_fixed_step_class rk_fixed_step_class type~rklk5b_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rklk5b interface private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rklk5b_properties interface private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rklk5b_class.html"},{"title":"rkb6_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkb6_class 6th order Runge-Kutta Butcher Inherits type~~rkb6_class~~InheritsGraph type~rkb6_class rkb6_class type~rk_fixed_step_class rk_fixed_step_class type~rkb6_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkb6 interface private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkb6_properties interface private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkb6_class.html"},{"title":"rk7_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk7_class 7th order Runge-Kutta Shanks Inherits type~~rk7_class~~InheritsGraph type~rk7_class rk7_class type~rk_fixed_step_class rk_fixed_step_class type~rk7_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk7 interface private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk7_properties interface private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk7_class.html"},{"title":"rk8_10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk8_10_class 10-stage, 8th order Runge-Kutta Shanks Inherits type~~rk8_10_class~~InheritsGraph type~rk8_10_class rk8_10_class type~rk_fixed_step_class rk_fixed_step_class type~rk8_10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk8_10 interface private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk8_10_properties interface private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk8_10_class.html"},{"title":"rkcv8_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkcv8_class 11-stage, 8th order Runge-Kutta Cooper-Verner Inherits type~~rkcv8_class~~InheritsGraph type~rkcv8_class rkcv8_class type~rk_fixed_step_class rk_fixed_step_class type~rkcv8_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkcv8 interface private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkcv8_properties interface private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkcv8_class.html"},{"title":"rk8_12_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rk8_12_class 12-stage, 8th order Runge-Kutta Shanks Inherits type~~rk8_12_class~~InheritsGraph type~rk8_12_class rk8_12_class type~rk_fixed_step_class rk_fixed_step_class type~rk8_12_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rk8_12 interface private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rk8_12_properties interface private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rk8_12_class.html"},{"title":"rkz10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkz10_class 10th order Runge-Kutta Zhang Inherits type~~rkz10_class~~InheritsGraph type~rkz10_class rkz10_class type~rk_fixed_step_class rk_fixed_step_class type~rkz10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkz10 interface private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkz10_properties interface private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkz10_class.html"},{"title":"rko10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rko10_class 10th order Runge-Kutta Ono Inherits type~~rko10_class~~InheritsGraph type~rko10_class rko10_class type~rk_fixed_step_class rk_fixed_step_class type~rko10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rko10 interface private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rko10_properties interface private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rko10_class.html"},{"title":"rkh10_class – rklib ","text":"type, public, extends( rk_fixed_step_class ) :: rkh10_class 10th order Runge-Kutta Hairer Inherits type~~rkh10_class~~InheritsGraph type~rkh10_class rkh10_class type~rk_fixed_step_class rk_fixed_step_class type~rkh10_class->type~rk_fixed_step_class type~rk_class rk_class type~rk_fixed_step_class->type~rk_class root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_fixed_step initialize the class (set n,f, and report) private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_fixed_step private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_fixed_step private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public, :: step => rkh10 interface private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h procedure, public, :: properties => rkh10_properties interface private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkh10_class.html"},{"title":"rkbs32_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkbs32_class Bogacki & Shampine 3(2) Inherits type~~rkbs32_class~~InheritsGraph type~rkbs32_class rkbs32_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkbs32_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkbs32 interface private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkbs32_properties interface private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkbs32_class.html"},{"title":"rkssp43_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkssp43_class 4-stage, 3rd order SSP Inherits type~~rkssp43_class~~InheritsGraph type~rkssp43_class rkssp43_class type~rk_variable_step_class rk_variable_step_class type~rkssp43_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkssp43 interface private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkssp43_properties interface private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkssp43_class.html"},{"title":"rkf45_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf45_class Fehlberg 4(5) Inherits type~~rkf45_class~~InheritsGraph type~rkf45_class rkf45_class type~rk_variable_step_class rk_variable_step_class type~rkf45_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf45 interface private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf45_properties interface private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf45_class.html"},{"title":"rkck54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkck54_class Cash & Karp 5(4) Inherits type~~rkck54_class~~InheritsGraph type~rkck54_class rkck54_class type~rk_variable_step_class rk_variable_step_class type~rkck54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkck54 interface private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkck54_properties interface private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkck54_class.html"},{"title":"rkdp54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkdp54_class Dormand-Prince 5(4) Inherits type~~rkdp54_class~~InheritsGraph type~rkdp54_class rkdp54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkdp54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkdp54 interface private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp54_properties interface private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp54_class.html"},{"title":"rkt54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkt54_class Tsitouras 5(4) Inherits type~~rkt54_class~~InheritsGraph type~rkt54_class rkt54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkt54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkt54 interface private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkt54_properties interface private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkt54_class.html"},{"title":"rks54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rks54_class Stepanov 5(4) Inherits type~~rks54_class~~InheritsGraph type~rks54_class rks54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rks54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rks54 interface private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks54_properties interface private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks54_class.html"},{"title":"rkpp54_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkpp54_class Papakostas-PapaGeorgiou 5(4) Inherits type~~rkpp54_class~~InheritsGraph type~rkpp54_class rkpp54_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkpp54_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkpp54 interface private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkpp54_properties interface private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkpp54_class.html"},{"title":"rkpp54b_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkpp54b_class Papakostas-PapaGeorgiou 5(4) b Inherits type~~rkpp54b_class~~InheritsGraph type~rkpp54b_class rkpp54b_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkpp54b_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkpp54b interface private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkpp54b_properties interface private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkpp54b_class.html"},{"title":"rkbs54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkbs54_class Bogacki & Shampine 5(4) Inherits type~~rkbs54_class~~InheritsGraph type~rkbs54_class rkbs54_class type~rk_variable_step_class rk_variable_step_class type~rkbs54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkbs54 interface private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkbs54_properties interface private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkbs54_class.html"},{"title":"rkss54_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkss54_class Sharp & Smart 5(4) Inherits type~~rkss54_class~~InheritsGraph type~rkss54_class rkss54_class type~rk_variable_step_class rk_variable_step_class type~rkss54_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkss54 interface private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkss54_properties interface private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkss54_class.html"},{"title":"rkdp65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp65_class Dormand-Prince 6(5) Inherits type~~rkdp65_class~~InheritsGraph type~rkdp65_class rkdp65_class type~rk_variable_step_class rk_variable_step_class type~rkdp65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp65 interface private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp65_properties interface private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp65_class.html"},{"title":"rkc65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkc65_class Calvo 6(5) Inherits type~~rkc65_class~~InheritsGraph type~rkc65_class rkc65_class type~rk_variable_step_class rk_variable_step_class type~rkc65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkc65 interface private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkc65_properties interface private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc65_class.html"},{"title":"rktp64_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp64_class Tsitouras & Papakostas NEW6(4) Inherits type~~rktp64_class~~InheritsGraph type~rktp64_class rktp64_class type~rk_variable_step_class rk_variable_step_class type~rktp64_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp64 interface private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp64_properties interface private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp64_class.html"},{"title":"rkv65e_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkv65e_class Verner efficient (9,6(5)) Inherits type~~rkv65e_class~~InheritsGraph type~rkv65e_class rkv65e_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkv65e_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkv65e interface private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65e_properties interface private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65e_class.html"},{"title":"rkv65r_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rkv65r_class Verner robust (9,6(5)) Inherits type~~rkv65r_class~~InheritsGraph type~rkv65r_class rkv65r_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rkv65r_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rkv65r interface private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65r_properties interface private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65r_class.html"},{"title":"rkv65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv65_class Verner 6(5) Inherits type~~rkv65_class~~InheritsGraph type~rkv65_class rkv65_class type~rk_variable_step_class rk_variable_step_class type~rkv65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv65 interface private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv65_properties interface private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv65_class.html"},{"title":"dverk65_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: dverk65_class Verner 6(5) \"DVERK\" Inherits type~~dverk65_class~~InheritsGraph type~dverk65_class dverk65_class type~rk_variable_step_class rk_variable_step_class type~dverk65_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => dverk65 interface private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => dverk65_properties interface private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/dverk65_class.html"},{"title":"rktf65_class – rklib ","text":"type, public, extends( rk_variable_step_fsal_class ) :: rktf65_class Tsitouras & Famelis 6(5) Inherits type~~rktf65_class~~InheritsGraph type~rktf65_class rktf65_class type~rk_variable_step_fsal_class rk_variable_step_fsal_class type~rktf65_class->type~rk_variable_step_fsal_class type~rk_variable_step_class rk_variable_step_class type~rk_variable_step_fsal_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info destroy_fsal_cache check_fsal_cache set_fsal_cache step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public :: destroy_fsal_cache private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me procedure, public :: check_fsal_cache private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public :: set_fsal_cache private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f procedure, public, :: step => rktf65 interface private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktf65_properties interface private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktf65_class.html"},{"title":"rktp75_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp75_class Tsitouras & Papakostas NEW7(5) Inherits type~~rktp75_class~~InheritsGraph type~rktp75_class rktp75_class type~rk_variable_step_class rk_variable_step_class type~rktp75_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp75 interface private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp75_properties interface private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp75_class.html"},{"title":"rktmy7_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktmy7_class 7th order Tanaka-Muramatsu-Yamashita Inherits type~~rktmy7_class~~InheritsGraph type~rktmy7_class rktmy7_class type~rk_variable_step_class rk_variable_step_class type~rktmy7_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktmy7 interface private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktmy7_properties interface private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktmy7_class.html"},{"title":"rktmy7s_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktmy7s_class 7th order Stable Tanaka-Muramatsu-Yamashita Inherits type~~rktmy7s_class~~InheritsGraph type~rktmy7s_class rktmy7s_class type~rk_variable_step_class rk_variable_step_class type~rktmy7s_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktmy7s interface private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktmy7s_properties interface private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktmy7s_class.html"},{"title":"rkv76e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv76e_class Verner efficient (10:7(6)) Inherits type~~rkv76e_class~~InheritsGraph type~rkv76e_class rkv76e_class type~rk_variable_step_class rk_variable_step_class type~rkv76e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv76e interface private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv76e_properties interface private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv76e_class.html"},{"title":"rkv76r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv76r_class Verner robust (10:7(6)) Inherits type~~rkv76r_class~~InheritsGraph type~rkv76r_class rkv76r_class type~rk_variable_step_class rk_variable_step_class type~rkv76r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv76r interface private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv76r_properties interface private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv76r_class.html"},{"title":"rkss76_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkss76_class Sharp & Smart 7(6) Inherits type~~rkss76_class~~InheritsGraph type~rkss76_class rkss76_class type~rk_variable_step_class rk_variable_step_class type~rkss76_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkss76 interface private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkss76_properties interface private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkss76_class.html"},{"title":"rkf78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf78_class Fehlberg 7(8) Inherits type~~rkf78_class~~InheritsGraph type~rkf78_class rkf78_class type~rk_variable_step_class rk_variable_step_class type~rkf78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf78 interface private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf78_properties interface private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf78_class.html"},{"title":"rkv78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv78_class Verner 7(8) Inherits type~~rkv78_class~~InheritsGraph type~rkv78_class rkv78_class type~rk_variable_step_class rk_variable_step_class type~rkv78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv78 interface private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv78_properties interface private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv78_class.html"},{"title":"dverk78_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: dverk78_class Verner \"Maple\" 7(8) Inherits type~~dverk78_class~~InheritsGraph type~dverk78_class dverk78_class type~rk_variable_step_class rk_variable_step_class type~dverk78_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => dverk78 interface private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => dverk78_properties interface private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/dverk78_class.html"},{"title":"rkdp85_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp85_class Dormand-Prince 8(5) Inherits type~~rkdp85_class~~InheritsGraph type~rkdp85_class rkdp85_class type~rk_variable_step_class rk_variable_step_class type~rkdp85_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp85 interface private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp85_properties interface private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp85_class.html"},{"title":"rktp86_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rktp86_class Tsitouras & Papakostas NEW8(6) Inherits type~~rktp86_class~~InheritsGraph type~rktp86_class rktp86_class type~rk_variable_step_class rk_variable_step_class type~rktp86_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rktp86 interface private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rktp86_properties interface private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rktp86_class.html"},{"title":"rkdp87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkdp87_class Dormand & Prince RK8(7)13M Inherits type~~rkdp87_class~~InheritsGraph type~rkdp87_class rkdp87_class type~rk_variable_step_class rk_variable_step_class type~rkdp87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkdp87 interface private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkdp87_properties interface private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkdp87_class.html"},{"title":"rkv87e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv87e_class Verner efficient (8)7 Inherits type~~rkv87e_class~~InheritsGraph type~rkv87e_class rkv87e_class type~rk_variable_step_class rk_variable_step_class type~rkv87e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv87e interface private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv87e_properties interface private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv87e_class.html"},{"title":"rkv87r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv87r_class Verner robust (8)7 Inherits type~~rkv87r_class~~InheritsGraph type~rkv87r_class rkv87r_class type~rk_variable_step_class rk_variable_step_class type~rkv87r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv87r interface private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv87r_properties interface private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv87r_class.html"},{"title":"rkev87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkev87_class Enright-Verner (8)7 Inherits type~~rkev87_class~~InheritsGraph type~rkev87_class rkev87_class type~rk_variable_step_class rk_variable_step_class type~rkev87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkev87 interface private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkev87_properties interface private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkev87_class.html"},{"title":"rkk87_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkk87_class Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) Inherits type~~rkk87_class~~InheritsGraph type~rkk87_class rkk87_class type~rk_variable_step_class rk_variable_step_class type~rkk87_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkk87 interface private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkk87_properties interface private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkk87_class.html"},{"title":"rkf89_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf89_class Fehlberg 8(9) Inherits type~~rkf89_class~~InheritsGraph type~rkf89_class rkf89_class type~rk_variable_step_class rk_variable_step_class type~rkf89_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf89 interface private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf89_properties interface private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf89_class.html"},{"title":"rkv89_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv89_class Verner 8(9) Inherits type~~rkv89_class~~InheritsGraph type~rkv89_class rkv89_class type~rk_variable_step_class rk_variable_step_class type~rkv89_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv89 interface private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv89_properties interface private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv89_class.html"},{"title":"rkt98a_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkt98a_class Tsitouras 9(8) A Inherits type~~rkt98a_class~~InheritsGraph type~rkt98a_class rkt98a_class type~rk_variable_step_class rk_variable_step_class type~rkt98a_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkt98a interface private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkt98a_properties interface private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkt98a_class.html"},{"title":"rkv98e_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv98e_class Verner efficient (16:9(8)) Inherits type~~rkv98e_class~~InheritsGraph type~rkv98e_class rkv98e_class type~rk_variable_step_class rk_variable_step_class type~rkv98e_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv98e interface private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv98e_properties interface private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv98e_class.html"},{"title":"rkv98r_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkv98r_class Verner robust (16:9(8)) Inherits type~~rkv98r_class~~InheritsGraph type~rkv98r_class rkv98r_class type~rk_variable_step_class rk_variable_step_class type~rkv98r_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkv98r interface private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkv98r_properties interface private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkv98r_class.html"},{"title":"rks98_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rks98_class Sharp 9(8) Inherits type~~rks98_class~~InheritsGraph type~rks98_class rks98_class type~rk_variable_step_class rk_variable_step_class type~rks98_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rks98 interface private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks98_properties interface private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks98_class.html"},{"title":"rkf108_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf108_class Feagin 8(10) Inherits type~~rkf108_class~~InheritsGraph type~rkf108_class rkf108_class type~rk_variable_step_class rk_variable_step_class type~rkf108_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf108 interface private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf108_properties interface private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf108_class.html"},{"title":"rkc108_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkc108_class Curtis 10(8) Inherits type~~rkc108_class~~InheritsGraph type~rkc108_class rkc108_class type~rk_variable_step_class rk_variable_step_class type~rkc108_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkc108 interface private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkc108_properties interface private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkc108_class.html"},{"title":"rkb109_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkb109_class Baker 10(9) Inherits type~~rkb109_class~~InheritsGraph type~rkb109_class rkb109_class type~rk_variable_step_class rk_variable_step_class type~rkb109_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkb109 interface private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkb109_properties interface private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkb109_class.html"},{"title":"rks1110a_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rks1110a_class Stone 11(10) Inherits type~~rks1110a_class~~InheritsGraph type~rks1110a_class rks1110a_class type~rk_variable_step_class rk_variable_step_class type~rks1110a_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rks1110a interface private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rks1110a_properties interface private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rks1110a_class.html"},{"title":"rkf1210_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf1210_class Feagin 12(10) Inherits type~~rkf1210_class~~InheritsGraph type~rkf1210_class rkf1210_class type~rk_variable_step_class rk_variable_step_class type~rkf1210_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf1210 interface private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf1210_properties interface private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf1210_class.html"},{"title":"rko129_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rko129_class Ono 12(9) Inherits type~~rko129_class~~InheritsGraph type~rko129_class rko129_class type~rk_variable_step_class rk_variable_step_class type~rko129_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rko129 interface private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rko129_properties interface private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rko129_class.html"},{"title":"rkf1412_class – rklib ","text":"type, public, extends( rk_variable_step_class ) :: rkf1412_class Feagin 14(12) Inherits type~~rkf1412_class~~InheritsGraph type~rkf1412_class rkf1412_class type~rk_variable_step_class rk_variable_step_class type~rkf1412_class->type~rk_variable_step_class type~rk_class rk_class type~rk_variable_step_class->type~rk_class type~stepsize_class stepsize_class type~rk_variable_step_class->type~stepsize_class stepsize_method root_method root_method type~rk_class->root_method solver Help × Graph Key Nodes of different colours represent the following: Graph Key Type Type This Page's Entity This Page's Entity Solid arrows point from a derived type to the parent type which it\nextends. Dashed arrows point from a derived type to the other\ntypes it contains as a components, with a label listing the name(s) of\nsaid component(s). Contents Type-Bound Procedures destroy stop status failed initialize integrate integrate_to_event info step properties Type-Bound Procedures procedure, public :: destroy destructor private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me procedure, public :: stop => rk_class_stop user-callable method to stop the integration private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me procedure, public :: status => rk_class_status get status code and message private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message procedure, public :: failed private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical procedure, public :: initialize => initialize_variable_step initialize the class (set n,f, and report) private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. procedure, public :: integrate => integrate_variable_step private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state procedure, public :: integrate_to_event => integrate_to_event_variable_step private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf procedure, public :: info => info_variable_step private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) procedure, public, :: step => rkf1412 interface private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x procedure, public, :: properties => rkf1412_properties interface private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"type/rkf1412_class.html"},{"title":"norm_func – rklib","text":"abstract interface private pure function norm_func(x) result(xmag) Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x a vector Return Value real(kind=wp) the magnitude of the vector Description Vector norm function. Must return a value .","tags":"","loc":"interface/norm_func.html"},{"title":"properties_func – rklib","text":"abstract interface private pure function properties_func(me) result(p) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Description Returns the properties of the method.","tags":"","loc":"interface/properties_func.html"},{"title":"begin_func – rklib","text":"abstract interface private subroutine begin_func(me) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Description routine called before integration begins\nto set up internal variables.","tags":"","loc":"interface/begin_func.html"},{"title":"deriv_func – rklib","text":"abstract interface private subroutine deriv_func(me, t, x, xdot) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out), dimension(:) :: xdot derivative of state vector Description derivative function","tags":"","loc":"interface/deriv_func.html"},{"title":"event_func – rklib","text":"abstract interface private subroutine event_func(me, t, x, g) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out) :: g g(t,x). The goal is to stop the integration when g=0. Description event function","tags":"","loc":"interface/event_func.html"},{"title":"report_func – rklib","text":"abstract interface private subroutine report_func(me, t, x) Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector Description report function","tags":"","loc":"interface/report_func.html"},{"title":"step_func_fixed – rklib","text":"abstract interface private subroutine step_func_fixed(me, t, x, h, xf) Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector Description rk step function for the fixed-step methods.","tags":"","loc":"interface/step_func_fixed.html"},{"title":"step_func_variable – rklib","text":"abstract interface private subroutine step_func_variable(me, t, x, h, xf, xerr) Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate Description rk step function for the variable-step methods.","tags":"","loc":"interface/step_func_variable.html"},{"title":"order – rklib","text":"private pure function order(me) result(p) Returns the order of the RK method Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method Called by proc~~order~~CalledByGraph proc~order rklib_module::rk_variable_step_class%order proc~hinit rklib_module::rk_variable_step_class%hinit proc~hinit->proc~order proc~hstart rklib_module::rk_variable_step_class%hstart proc~hstart->proc~order proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~order proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~order proc~integrate_variable_step->proc~compute_initial_step proc~compute_initial_step->proc~hinit proc~compute_initial_step->proc~hstart Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code order Source Code pure function order ( me ) result ( p ) class ( rk_variable_step_class ), intent ( in ) :: me integer :: p !! order of the method type ( rklib_properties ) :: properties properties = me % properties () p = properties % order end function order","tags":"","loc":"proc/order.html"},{"title":"failed – rklib","text":"private function failed(me) Returns true if there was an error.\nCan use rk_class_status to get more info. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical Contents Source Code failed Source Code logical function failed ( me ) class ( rk_class ), intent ( in ) :: me failed = me % istatus < 0 end function failed","tags":"","loc":"proc/failed.html"},{"title":"norm2_func – rklib","text":"public pure function norm2_func(x) result(xmag) Use intrinsic norm2(x) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) Contents Source Code norm2_func Source Code pure function norm2_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = norm2 ( x ) end function norm2_func","tags":"","loc":"proc/norm2_func.html"},{"title":"maxval_func – rklib","text":"public pure function maxval_func(x) result(xmag) Use maxval(abs(x)) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) Contents Source Code maxval_func Source Code pure function maxval_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = maxval ( abs ( x )) end function maxval_func","tags":"","loc":"proc/maxval_func.html"},{"title":"compute_initial_step – rklib","text":"private function compute_initial_step(me, t0, tf, x0, h0) result(dt) Compute the initial step size. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use Calls proc~~compute_initial_step~~CallsGraph proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart proc~hinit->f proc~order rklib_module::rk_variable_step_class%order proc~hinit->proc~order proc~hstart->f proc~hstart->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~compute_initial_step~~CalledByGraph proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code compute_initial_step Source Code function compute_initial_step ( me , t0 , tf , x0 , h0 ) result ( dt ) class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: h0 !! user-input initial step size (if zero, then one is computed) real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), intent ( in ) :: tf !! final time real ( wp ) :: dt !! step size to use real ( wp ), dimension ( me % n ) :: x0 !! initial state real ( wp ), dimension ( me % n ) :: etol !! tolerance vector real ( wp ), dimension ( me % n ) :: f0 !! initial derivative if ( abs ( h0 ) <= zero ) then ! compute an appropriate initial step size: etol = me % rtol * me % stepsize_method % norm ( x0 ) + me % atol call me % f ( t0 , x0 , f0 ) ! get initial dx/dt select case ( me % hinit_method ) ! value was checked in initialize_variable_step case ( 1 ); call me % hstart ( t0 , tf , x0 , f0 , etol , dt ) case ( 2 ); dt = me % hinit ( t0 , x0 , sign ( 1.0_wp , tf - t0 ), f0 ,& me % stepsize_method % hmax ,& me % atol , me % rtol ) end select else ! user-specified initial step size: dt = sign ( h0 , tf - t0 ) ! (correct sign) end if end function compute_initial_step","tags":"","loc":"proc/compute_initial_step.html"},{"title":"hinit – rklib","text":"private function hinit(me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Note This routine is from dop853. It was modified for this module. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) Calls proc~~hinit~~CallsGraph proc~hinit rklib_module::rk_variable_step_class%hinit f f proc~hinit->f proc~order rklib_module::rk_variable_step_class%order proc~hinit->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~hinit~~CalledByGraph proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~compute_initial_step->proc~hinit proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code hinit Source Code function hinit ( me , x , y , posneg , f0 , hmax , atol , rtol ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: x real ( wp ), dimension (:), intent ( in ) :: y !! dimension(n) real ( wp ), intent ( in ) :: posneg !! posneg = sign(1.0_wp,xend-x) real ( wp ), dimension (:), intent ( in ) :: f0 !! dimension(n) real ( wp ), intent ( in ) :: hmax real ( wp ), dimension (:), intent ( in ) :: atol real ( wp ), dimension (:), intent ( in ) :: rtol real ( wp ) :: der12 , der2 , dnf , dny , h , h1 , hinit , sk integer :: i integer :: iord !! order of the method real ( wp ), dimension ( me % n ) :: f1 , y1 iord = me % order () ! compute a first guess for explicit euler as ! h = 0.01 * norm (y0) / norm (f0) ! the increment for explicit euler is small ! compared to the solution dnf = zero dny = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) dnf = dnf + ( f0 ( i ) / sk ) ** 2 dny = dny + ( y ( i ) / sk ) ** 2 end do if ( dnf <= 1.0e-10_wp . or . dny <= 1.0e-10_wp ) then h = 1.0e-6_wp else h = sqrt ( dny / dnf ) * 0.01_wp end if h = min ( h , hmax ) h = sign ( h , posneg ) ! perform an explicit euler step do i = 1 , me % n y1 ( i ) = y ( i ) + h * f0 ( i ) end do call me % f ( x + h , y1 , f1 ) ! estimate the second derivative of the solution der2 = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) der2 = der2 + (( f1 ( i ) - f0 ( i )) / sk ) ** 2 end do der2 = sqrt ( der2 ) / h ! step size is computed such that ! h**iord * max ( norm (f0), norm (der2)) = 0.01 der12 = max ( abs ( der2 ), sqrt ( dnf )) if ( der12 <= 1.0e-15_wp ) then h1 = max ( 1.0e-6_wp , abs ( h ) * 1.0e-3_wp ) else h1 = ( 0.01_wp / der12 ) ** ( 1.0_wp / iord ) end if h = min ( 10 0.0_wp * abs ( h ), h1 , hmax ) hinit = sign ( h , posneg ) end function hinit","tags":"","loc":"proc/hinit.html"},{"title":"clear_exception – rklib","text":"private subroutine clear_exception(me) Clear any exception. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Called by proc~~clear_exception~~CalledByGraph proc~clear_exception rklib_module::rk_class%clear_exception proc~begin_integration_rk_class rklib_module::rk_class%begin_integration_rk_class proc~begin_integration_rk_class->proc~clear_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code clear_exception Source Code subroutine clear_exception ( me ) class ( rk_class ), intent ( inout ) :: me me % istatus = RKLIB_ERROR_NONE end subroutine clear_exception","tags":"","loc":"proc/clear_exception.html"},{"title":"raise_exception – rklib","text":"private subroutine raise_exception(me, error_code) Raise an exception. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise Called by proc~~raise_exception~~CalledByGraph proc~raise_exception rklib_module::rk_class%raise_exception proc~initialize_variable_step rklib_module::rk_variable_step_class%initialize_variable_step proc~initialize_variable_step->proc~raise_exception proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step proc~integrate_fixed_step->proc~raise_exception proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step proc~integrate_to_event_fixed_step->proc~raise_exception proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~raise_exception proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~raise_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code raise_exception Source Code subroutine raise_exception ( me , error_code ) class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: error_code !! the error to raise me % istatus = error_code if ( error_code < 0 . and . me % stop_on_errors ) then error stop trim ( rklib_error_messages ( error_code )) end if end subroutine raise_exception","tags":"","loc":"proc/raise_exception.html"},{"title":"destroy – rklib","text":"private subroutine destroy(me) Destructor for rk_class . Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me Called by proc~~destroy~~CalledByGraph proc~destroy rklib_module::rk_class%destroy proc~initialize_rk_class rklib_module::rk_class%initialize_rk_class proc~initialize_rk_class->proc~destroy Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code destroy Source Code subroutine destroy ( me ) class ( rk_class ), intent ( out ) :: me end subroutine destroy","tags":"","loc":"proc/destroy.html"},{"title":"rk_class_stop – rklib","text":"private subroutine rk_class_stop(me) User-callable method to stop the integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Contents Source Code rk_class_stop Source Code subroutine rk_class_stop ( me ) class ( rk_class ), intent ( inout ) :: me me % stopped = . true . end subroutine rk_class_stop","tags":"","loc":"proc/rk_class_stop.html"},{"title":"rk_class_status – rklib","text":"private subroutine rk_class_status(me, istatus, message) Get the status of an integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message Contents Source Code rk_class_status Source Code subroutine rk_class_status ( me , istatus , message ) class ( rk_class ), intent ( in ) :: me integer , intent ( out ), optional :: istatus !! status code (`<0` means an error) character ( len = :), allocatable , intent ( out ), optional :: message !! status message if ( present ( istatus )) istatus = me % istatus if ( present ( message )) message = trim ( rklib_error_messages ( me % istatus )) end subroutine rk_class_status","tags":"","loc":"proc/rk_class_status.html"},{"title":"export_point – rklib","text":"private subroutine export_point(me, t, x, first_or_last) Wrapper for exporting points during integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) Calls proc~~export_point~~CallsGraph proc~export_point rklib_module::rk_class%export_point report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~export_point~~CalledByGraph proc~export_point rklib_module::rk_class%export_point proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step proc~integrate_fixed_step->proc~export_point proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step proc~integrate_to_event_fixed_step->proc~export_point proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~export_point proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~export_point Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code export_point Source Code subroutine export_point ( me , t , x , first_or_last ) class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x logical , intent ( in ), optional :: first_or_last !! if this is the first or !! last point (always reported) logical :: export !! if the point is to be exported if ( associated ( me % report ) . and . me % report_rate > 0 ) then export = . false . if ( present ( first_or_last )) then ! always report first and last step if ( first_or_last ) export = . true . end if if (. not . export ) then ! report steps at user-specified rate export = modulo ( me % num_steps , me % report_rate ) == 0 end if if ( export ) call me % report ( t , x ) end if end subroutine export_point","tags":"","loc":"proc/export_point.html"},{"title":"destroy_fsal_cache – rklib","text":"private subroutine destroy_fsal_cache(me) Destructor for the FSAL variables. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me Called by proc~~destroy_fsal_cache~~CalledByGraph proc~destroy_fsal_cache rklib_module::rk_variable_step_fsal_class%destroy_fsal_cache proc~begin_integration_rk_variable_step_class rklib_module::rk_variable_step_class%begin_integration_rk_variable_step_class proc~begin_integration_rk_variable_step_class->proc~destroy_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code destroy_fsal_cache Source Code subroutine destroy_fsal_cache ( me ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me if ( allocated ( me % t_saved )) deallocate ( me % t_saved ) if ( allocated ( me % x_saved )) deallocate ( me % x_saved ) if ( allocated ( me % f_saved )) deallocate ( me % f_saved ) end subroutine destroy_fsal_cache","tags":"","loc":"proc/destroy_fsal_cache.html"},{"title":"check_fsal_cache – rklib","text":"private subroutine check_fsal_cache(me, t, x, f) Check the FSAL cache. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Called by proc~~check_fsal_cache~~CalledByGraph proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32 rklib_variable_steps::rkbs32 proc~rkbs32->proc~check_fsal_cache proc~rkdp54 rklib_variable_steps::rkdp54 proc~rkdp54->proc~check_fsal_cache proc~rkpp54 rklib_variable_steps::rkpp54 proc~rkpp54->proc~check_fsal_cache proc~rkpp54b rklib_variable_steps::rkpp54b proc~rkpp54b->proc~check_fsal_cache proc~rks54 rklib_variable_steps::rks54 proc~rks54->proc~check_fsal_cache proc~rkt54 rklib_variable_steps::rkt54 proc~rkt54->proc~check_fsal_cache proc~rktf65 rklib_variable_steps::rktf65 proc~rktf65->proc~check_fsal_cache proc~rkv65e rklib_variable_steps::rkv65e proc~rkv65e->proc~check_fsal_cache proc~rkv65r rklib_variable_steps::rkv65r proc~rkv65r->proc~check_fsal_cache interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code check_fsal_cache Source Code subroutine check_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f logical :: fsal !! if we can avoid a step due to first-same-as-last fsal = . false . if ( allocated ( me % x_saved )) then if ( size ( x ) == size ( me % x_saved )) then fsal = all ( x == me % x_saved ) . and . t == me % t_saved end if end if if ( fsal ) then f = me % f_saved else call me % f ( t , x , f ) end if end subroutine check_fsal_cache","tags":"","loc":"proc/check_fsal_cache.html"},{"title":"set_fsal_cache – rklib","text":"private subroutine set_fsal_cache(me, t, x, f) Compute the function and add it to the FSAL cache. Type Bound rk_variable_step_fsal_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Called by proc~~set_fsal_cache~~CalledByGraph proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32 rklib_variable_steps::rkbs32 proc~rkbs32->proc~set_fsal_cache proc~rkdp54 rklib_variable_steps::rkdp54 proc~rkdp54->proc~set_fsal_cache proc~rkpp54 rklib_variable_steps::rkpp54 proc~rkpp54->proc~set_fsal_cache proc~rkpp54b rklib_variable_steps::rkpp54b proc~rkpp54b->proc~set_fsal_cache proc~rks54 rklib_variable_steps::rks54 proc~rks54->proc~set_fsal_cache proc~rkt54 rklib_variable_steps::rkt54 proc~rkt54->proc~set_fsal_cache proc~rktf65 rklib_variable_steps::rktf65 proc~rktf65->proc~set_fsal_cache proc~rkv65e rklib_variable_steps::rkv65e proc~rkv65e->proc~set_fsal_cache proc~rkv65r rklib_variable_steps::rkv65r proc~rkv65r->proc~set_fsal_cache interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code set_fsal_cache Source Code subroutine set_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f call me % f ( t , x , f ) me % t_saved = t me % x_saved = x me % f_saved = f end subroutine set_fsal_cache","tags":"","loc":"proc/set_fsal_cache.html"},{"title":"initialize_rk_class – rklib","text":"private subroutine initialize_rk_class(me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_rk_class~~CallsGraph proc~initialize_rk_class rklib_module::rk_class%initialize_rk_class funcs funcs proc~initialize_rk_class->funcs proc~destroy rklib_module::rk_class%destroy proc~initialize_rk_class->proc~destroy Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_rk_class Source Code subroutine initialize_rk_class ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( event_func ), optional :: g !! for stopping at an event procedure ( report_func ), optional :: report !! for reporting the steps logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. type ( rklib_properties ) :: props !! to get the method properties call me % destroy () me % n = n me % f => f if ( present ( report )) me % report => report if ( present ( g )) me % g => g if ( present ( stop_on_errors )) me % stop_on_errors = stop_on_errors if ( present ( max_number_of_steps )) me % max_number_of_steps = abs ( max_number_of_steps ) if ( present ( report_rate )) me % report_rate = abs ( report_rate ) if ( present ( solver )) me % solver = solver ! allocate the registers: props = me % properties () if ( allocated ( me % funcs )) deallocate ( me % funcs ) allocate ( me % funcs ( n , props % number_of_registers )) me % funcs = zero ! reset internal variables: me % num_steps = 0 me % stopped = . false . end subroutine initialize_rk_class","tags":"","loc":"proc/initialize_rk_class.html"},{"title":"begin_integration_rk_class – rklib","text":"private subroutine begin_integration_rk_class(me) Begin an integration. Type Bound rk_class Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me Calls proc~~begin_integration_rk_class~~CallsGraph proc~begin_integration_rk_class rklib_module::rk_class%begin_integration_rk_class proc~clear_exception rklib_module::rk_class%clear_exception proc~begin_integration_rk_class->proc~clear_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_class Source Code subroutine begin_integration_rk_class ( me ) class ( rk_class ), intent ( inout ) :: me call me % clear_exception () me % num_steps = 0 me % stopped = . false . end subroutine begin_integration_rk_class","tags":"","loc":"proc/begin_integration_rk_class.html"},{"title":"begin_integration_rk_fixed_step_class – rklib","text":"private subroutine begin_integration_rk_fixed_step_class(me) Begin a rk_fixed_step_class integration. Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me Calls proc~~begin_integration_rk_fixed_step_class~~CallsGraph proc~begin_integration_rk_fixed_step_class rklib_module::rk_fixed_step_class%begin_integration_rk_fixed_step_class begin begin proc~begin_integration_rk_fixed_step_class->begin Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_fixed_step_class Source Code subroutine begin_integration_rk_fixed_step_class ( me ) class ( rk_fixed_step_class ), intent ( inout ) :: me call me % begin () ! all we need is base method here. end subroutine begin_integration_rk_fixed_step_class","tags":"","loc":"proc/begin_integration_rk_fixed_step_class.html"},{"title":"initialize_fixed_step – rklib","text":"private subroutine initialize_fixed_step(me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_fixed_step~~CallsGraph proc~initialize_fixed_step rklib_module::rk_fixed_step_class%initialize_fixed_step init init proc~initialize_fixed_step->init Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_fixed_step Source Code subroutine initialize_fixed_step ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. ! base init all we need here: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) end subroutine initialize_fixed_step","tags":"","loc":"proc/initialize_fixed_step.html"},{"title":"integrate_fixed_step – rklib","text":"private subroutine integrate_fixed_step(me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state Calls proc~~integrate_fixed_step~~CallsGraph proc~integrate_fixed_step rklib_module::rk_fixed_step_class%integrate_fixed_step begin_integration begin_integration proc~integrate_fixed_step->begin_integration proc~export_point rklib_module::rk_class%export_point proc~integrate_fixed_step->proc~export_point proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_fixed_step->proc~raise_exception step step proc~integrate_fixed_step->step report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_fixed_step Source Code subroutine integrate_fixed_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t !! current time value real ( wp ) :: dt !! time step from `t` to `t2` real ( wp ) :: t2 !! time to step to from `t` real ( wp ), dimension ( me % n ) :: x !! state vector logical :: last !! if it is the last step if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( h ) > zero ) then t = t0 x = x0 dt = sign ( h , tf - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do else xf = x0 end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_fixed_step","tags":"","loc":"proc/integrate_fixed_step.html"},{"title":"integrate_to_event_fixed_step – rklib","text":"private subroutine integrate_to_event_fixed_step(me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Type Bound rk_fixed_step_class Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf Calls proc~~integrate_to_event_fixed_step~~CallsGraph proc~integrate_to_event_fixed_step rklib_module::rk_fixed_step_class%integrate_to_event_fixed_step begin_integration begin_integration proc~integrate_to_event_fixed_step->begin_integration g g proc~integrate_to_event_fixed_step->g proc~export_point rklib_module::rk_class%export_point proc~integrate_to_event_fixed_step->proc~export_point proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_to_event_fixed_step->proc~raise_exception root_scalar root_scalar proc~integrate_to_event_fixed_step->root_scalar step step proc~integrate_to_event_fixed_step->step report report proc~export_point->report Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_to_event_fixed_step Source Code subroutine integrate_to_event_fixed_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension (:), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf !local variables: real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum real ( wp ), dimension ( me % n ) :: x !! state vector real ( wp ), dimension ( me % n ) :: g_xf !! state vector from the root finder logical :: first !! it is the first step logical :: last !! it is the last step integer :: iflag !! return flag from `solver` if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t0 , x0 , ga ) !evaluate event function dt = sign ( h , tmax - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . end do end if call me % export_point ( t2 , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g !take a step from t to t+delt and evaluate g function: call me % step ( t , x , delt , g_xf ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_fixed_step","tags":"","loc":"proc/integrate_to_event_fixed_step.html"},{"title":"stepsize_class_constructor – rklib","text":"private pure subroutine stepsize_class_constructor(me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. Contents Source Code stepsize_class_constructor Source Code pure subroutine stepsize_class_constructor ( me , hmin , hmax , hfactor_reject ,& hfactor_accept , norm , accept_mode , relative_err ,& safety_factor , p_exponent_offset , max_attempts ,& fixed_step_mode ) implicit none class ( stepsize_class ), intent ( inout ) :: me real ( wp ), intent ( in ), optional :: hmin !! minimum allowed step size (>0) real ( wp ), intent ( in ), optional :: hmax !! maximum allowed step size (>0) real ( wp ), intent ( in ), optional :: hfactor_reject !! minimum allowed factor for !! decreasing step size after !! rejected step (>0) real ( wp ), intent ( in ), optional :: hfactor_accept !! maximum allowed factor for !! decreasing step size after !! accepted step (>0) procedure ( norm_func ), optional :: norm !! the user-specified ||x|| !! function integer , intent ( in ), optional :: accept_mode !! method to determine if step !! is accepted [1,2] integer , intent ( in ), optional :: max_attempts !! max step size change attempts !! after rejected step logical , intent ( in ), optional :: relative_err !! to use `tol*h` in the `hfactor` equation real ( wp ), intent ( in ), optional :: safety_factor !! for `hfactor` equation (>0) integer , intent ( in ), optional :: p_exponent_offset !! p + this value in the exponent (0 or 1) logical , intent ( in ), optional :: fixed_step_mode !! if true, then the method runs in !! fixed step mode with not error estimation. !! All the other inputs are ignored. Note that !! this requires a `dt /= 0` input for the integrator. if ( present ( hmin )) me % hmin = abs ( hmin ) if ( present ( hmax )) me % hmax = abs ( hmax ) if ( present ( hfactor_reject )) me % hfactor_reject = abs ( hfactor_reject ) if ( present ( hfactor_accept )) me % hfactor_accept = abs ( hfactor_accept ) if ( present ( norm )) me % norm => norm if ( present ( accept_mode )) me % accept_mode = accept_mode if ( present ( max_attempts )) me % max_attempts = max_attempts !if (present(compute_h_factor)) me%compute_h_factor => compute_h_factor if ( present ( relative_err )) me % relative_err = relative_err if ( present ( safety_factor )) me % safety_factor = abs ( safety_factor ) if ( present ( p_exponent_offset )) me % p_exponent_offset = abs ( p_exponent_offset ) if ( present ( fixed_step_mode )) me % fixed_step_mode = fixed_step_mode end subroutine stepsize_class_constructor","tags":"","loc":"proc/stepsize_class_constructor.html"},{"title":"destroy_stepsize_class – rklib","text":"private subroutine destroy_stepsize_class(me) Destructor for stepsize_class . Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me Contents Source Code destroy_stepsize_class Source Code subroutine destroy_stepsize_class ( me ) implicit none class ( stepsize_class ), intent ( out ) :: me end subroutine destroy_stepsize_class","tags":"","loc":"proc/destroy_stepsize_class.html"},{"title":"compute_stepsize – rklib","text":"private subroutine compute_stepsize(me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Type Bound stepsize_class Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted Calls proc~~compute_stepsize~~CallsGraph proc~compute_stepsize rklib_module::stepsize_class%compute_stepsize norm norm proc~compute_stepsize->norm Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code compute_stepsize Source Code subroutine compute_stepsize ( me , n , h , tol , err , p , hnew , accept ) implicit none class ( stepsize_class ), intent ( in ) :: me integer , intent ( in ) :: n !! number of variables real ( wp ), intent ( in ) :: h !! current step size (<>0) real ( wp ), dimension ( n ), intent ( in ) :: tol !! abs error tolerance (>0) real ( wp ), dimension ( n ), intent ( in ) :: err !! truncation error estimate (>0) integer , intent ( in ) :: p !! order of the method real ( wp ), intent ( out ) :: hnew !! new step size (<>0) logical , intent ( out ) :: accept !! if the step is accepted real ( wp ) :: e !! exponent real ( wp ) :: hfactor !! step size factor (>0) real ( wp ) :: max_err !! max error for all the elements real ( wp ), parameter :: small = 1 0.0_wp * epsilon ( 1.0_wp ) !! small error value if ( me % fixed_step_mode ) then ! do not adjust the step size accept = . true . hnew = h else if ( all ( err <= small )) then ! the error is extremely small hfactor = me % hfactor_accept accept = . true . else ! compute base factor based on the selected formula: if ( me % relative_err ) then max_err = me % norm ( err / tol * abs ( h )) else max_err = me % norm ( err / tol ) end if e = 1.0_wp / real ( p + me % p_exponent_offset , wp ) hfactor = abs ( me % safety_factor * ( 1.0_wp / max_err ) ** e ) ! if the step is to be accepted: select case ( me % accept_mode ) case ( 1 ) !algorithm 17.12 accept = hfactor >= 1.0_wp case ( 2 ) !algorithm 17.13 accept = me % norm ( err / tol ) <= 1.0_wp end select !...notes: ! see: L. Shampine \"Some Practical Runge-Kutta Formulas\", ! Mathematics of Computation, 46(173), Jan 1986. ! different conditions for satisfying error conditions: ! ||err|| <= tol -- Error per step (EPS) ! ||err|| <= h*tol -- Error per unit step (EPUS) !compute the actual hfactor based on the limits: if ( accept ) then hfactor = min ( me % hfactor_accept , hfactor ) else hfactor = max ( me % hfactor_reject , hfactor ) end if end if ! compute the new step size (enforce min/max bounds & add sign): hnew = sign ( max ( me % hmin , min ( me % hmax , abs ( h ) * hfactor )), h ) end if end subroutine compute_stepsize","tags":"","loc":"proc/compute_stepsize.html"},{"title":"begin_integration_rk_variable_step_class – rklib","text":"private subroutine begin_integration_rk_variable_step_class(me) Begin a rk_variable_step_class integration. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me Calls proc~~begin_integration_rk_variable_step_class~~CallsGraph proc~begin_integration_rk_variable_step_class rklib_module::rk_variable_step_class%begin_integration_rk_variable_step_class begin begin proc~begin_integration_rk_variable_step_class->begin proc~destroy_fsal_cache rklib_module::rk_variable_step_fsal_class%destroy_fsal_cache proc~begin_integration_rk_variable_step_class->proc~destroy_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code begin_integration_rk_variable_step_class Source Code subroutine begin_integration_rk_variable_step_class ( me ) class ( rk_variable_step_class ), intent ( inout ) :: me call me % begin () ! base ! variable step params: me % num_rejected_steps = 0 me % last_accepted_step_size = zero select type ( me ) class is ( rk_variable_step_fsal_class ) call me % destroy_fsal_cache () end select end subroutine begin_integration_rk_variable_step_class","tags":"","loc":"proc/begin_integration_rk_variable_step_class.html"},{"title":"initialize_variable_step – rklib","text":"private subroutine initialize_variable_step(me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. Calls proc~~initialize_variable_step~~CallsGraph proc~initialize_variable_step rklib_module::rk_variable_step_class%initialize_variable_step init init proc~initialize_variable_step->init proc~raise_exception rklib_module::rk_class%raise_exception proc~initialize_variable_step->proc~raise_exception Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code initialize_variable_step Source Code subroutine initialize_variable_step ( me , n , f , rtol , atol , stepsize_method ,& hinit_method , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of equations procedure ( deriv_func ) :: f !! derivative function real ( wp ), dimension (:), intent ( in ), optional :: rtol !! relative tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used real ( wp ), dimension (:), intent ( in ), optional :: atol !! absolute tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used type ( stepsize_class ), intent ( in ), optional :: stepsize_method !! method for varying the step size integer , intent ( in ), optional :: hinit_method !! which method (1 or 2) to use for !! automatic initial step size !! computation. !! 1 = use `hstart`, 2 = use `hinit`. procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. real ( wp ), parameter :: default_tol = 100 * epsilon ( 1.0_wp ) !! if tols not specified ! base init: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) ! variable-step specific inputs: if ( allocated ( me % rtol )) deallocate ( me % rtol ) if ( allocated ( me % atol )) deallocate ( me % atol ) allocate ( me % rtol ( n )) allocate ( me % atol ( n )) if ( present ( rtol )) then if ( size ( rtol ) == 1 ) then me % rtol = abs ( rtol ( 1 )) !use this for all equations else if ( size ( rtol ) == n ) then me % rtol = abs ( rtol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_RTOL_SIZE ) end if else me % rtol = default_tol end if if ( present ( atol )) then if ( size ( atol ) == 1 ) then me % atol = abs ( atol ( 1 )) !use this for all equations else if ( size ( atol ) == n ) then me % atol = abs ( atol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_ATOL_SIZE ) end if else me % atol = default_tol end if if ( present ( hinit_method )) then if ( any ( hinit_method == [ 1 , 2 ])) then me % hinit_method = hinit_method else call me % raise_exception ( RKLIB_ERROR_INVALID_HINIT_METHOD ) return end if end if if ( present ( stepsize_method )) me % stepsize_method = stepsize_method ! reset internal variables: me % num_rejected_steps = 0 me % last_accepted_step_size = zero end subroutine initialize_variable_step","tags":"","loc":"proc/initialize_variable_step.html"},{"title":"info_variable_step – rklib","text":"private subroutine info_variable_step(me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) Contents Source Code info_variable_step Source Code subroutine info_variable_step ( me , num_steps , num_rejected_steps , last_accepted_step_size ) implicit none class ( rk_variable_step_class ), intent ( in ) :: me integer , intent ( out ), optional :: num_steps !! number of steps taken integer , intent ( out ), optional :: num_rejected_steps !! number of rejected steps real ( wp ), intent ( out ), optional :: last_accepted_step_size !! the last accepted step size !! `dt` from the integration !! (positive or negative) if ( present ( num_steps )) num_steps = me % num_steps if ( present ( num_rejected_steps )) num_rejected_steps = me % num_rejected_steps if ( present ( last_accepted_step_size )) last_accepted_step_size = me % last_accepted_step_size end subroutine info_variable_step","tags":"","loc":"proc/info_variable_step.html"},{"title":"integrate_variable_step – rklib","text":"private subroutine integrate_variable_step(me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state Calls proc~~integrate_variable_step~~CallsGraph proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step begin_integration begin_integration proc~integrate_variable_step->begin_integration proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_variable_step->proc~compute_initial_step proc~export_point rklib_module::rk_class%export_point proc~integrate_variable_step->proc~export_point proc~order rklib_module::rk_variable_step_class%order proc~integrate_variable_step->proc~order proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_variable_step->proc~raise_exception step step proc~integrate_variable_step->step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart report report proc~export_point->report proc~hinit->proc~order proc~hinit->f proc~hstart->proc~order proc~hstart->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_variable_step Source Code subroutine integrate_variable_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! initial abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t , dt , t2 , dt_new real ( wp ), dimension ( me % n ) :: x , xerr , tol logical :: last !! it is the last step logical :: accept !! the step is accepted integer :: i !! max step size reduction attempts counter integer :: p !! order of the method if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tf ) <= zero ) then xf = x0 else t = t0 x = x0 dt = me % compute_initial_step ( t0 , tf , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) tol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , tol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tf ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tf )) ! if ( last ) dt = tf - t ! t2 = t + dt end if end do if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_variable_step","tags":"","loc":"proc/integrate_variable_step.html"},{"title":"integrate_to_event_variable_step – rklib","text":"private subroutine integrate_to_event_variable_step(me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Note There are some efficiency improvements that could be made here.\n This is a work in progress. Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf Calls proc~~integrate_to_event_variable_step~~CallsGraph proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step begin_integration begin_integration proc~integrate_to_event_variable_step->begin_integration g g proc~integrate_to_event_variable_step->g proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~export_point rklib_module::rk_class%export_point proc~integrate_to_event_variable_step->proc~export_point proc~order rklib_module::rk_variable_step_class%order proc~integrate_to_event_variable_step->proc~order proc~raise_exception rklib_module::rk_class%raise_exception proc~integrate_to_event_variable_step->proc~raise_exception root_scalar root_scalar proc~integrate_to_event_variable_step->root_scalar step step proc~integrate_to_event_variable_step->step f f proc~compute_initial_step->f proc~hinit rklib_module::rk_variable_step_class%hinit proc~compute_initial_step->proc~hinit proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step->proc~hstart report report proc~export_point->report proc~hinit->proc~order proc~hinit->f proc~hstart->proc~order proc~hstart->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code integrate_to_event_variable_step Source Code subroutine integrate_to_event_variable_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf real ( wp ), dimension ( me % n ) :: x , g_xf real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate real ( wp ), dimension ( me % n ) :: stol integer :: i , p , iflag real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum , dt_new logical :: first , last , accept if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t , x , ga ) !evaluate event function dt = me % compute_initial_step ( t0 , tmax , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) stol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , stol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tmax ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax else t2 = t + dt end if end if end do call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . if ( last ) exit x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate !take a step from t to t+delt and evaluate g function: ! [we don't check the error because we are within a ! step that was already accepted, so it should be ok] call me % step ( t , x , delt , g_xf , xerr ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_variable_step","tags":"","loc":"proc/integrate_to_event_variable_step.html"},{"title":"hstart – rklib","text":"private subroutine hstart(me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. It is based on an estimate of the local lipschitz constant for the\n differential equation (lower bound on a norm of the jacobian) ,\n a bound on the differential equation (first derivative), and\n a bound on the partial derivative of the equation with respect to\n the independent variable. (all approximated near the initial point a) Note Subroutine hstart also uses the me%stepsize_method%norm function for computing vector norms Note This routine is from DDEABM . History 820301 date written -- watts, h. a., (snla) 890531 changed all specific intrinsics to generic. (wrb) 890831 modified array declarations. (wrb) 890911 removed unnecessary intrinsics. (wrb) 891024 changed references from dvnorm to dhvnrm. (wrb) 891214 prologue converted to version 4.0 format. (bab) 900328 added type section. (wrb) 910722 updated author section. (als) December, 2015 : Refactored this routine (jw) April 2016 : Some modifications for the variable-step RK module (jw) Type Bound rk_variable_step_class Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method. Calls proc~~hstart~~CallsGraph proc~hstart rklib_module::rk_variable_step_class%hstart f f proc~hstart->f proc~order rklib_module::rk_variable_step_class%order proc~hstart->proc~order Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~hstart~~CalledByGraph proc~hstart rklib_module::rk_variable_step_class%hstart proc~compute_initial_step rklib_module::rk_variable_step_class%compute_initial_step proc~compute_initial_step->proc~hstart proc~integrate_to_event_variable_step rklib_module::rk_variable_step_class%integrate_to_event_variable_step proc~integrate_to_event_variable_step->proc~compute_initial_step proc~integrate_variable_step rklib_module::rk_variable_step_class%integrate_variable_step proc~integrate_variable_step->proc~compute_initial_step Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents Source Code hstart Source Code subroutine hstart ( me , a , b , y , yprime , etol , h ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: a !! the initial point of integration. real ( wp ), intent ( in ) :: b !! a value of the independent variable used to define !! the direction of integration. a reasonable choice is to !! set `b` to the first point at which a solution is desired. !! you can also use `b`, if necessary, to restrict the length !! of the first integration step because the algorithm will !! not compute a starting step length which is bigger than !! `abs(b-a)`, unless `b` has been chosen too close to `a`. !! (it is presumed that hstart has been called with `b` !! different from `a` on the machine being used. also see the !! discussion about the parameter `small`.) real ( wp ), dimension ( me % n ), intent ( in ) :: y !! the vector of initial values of the `neq` solution !! components at the initial point `a`. real ( wp ), dimension ( me % n ), intent ( in ) :: yprime !! the vector of derivatives of the `neq` !! solution components at the initial point `a`. !! (defined by the differential equations in subroutine `me%f`) real ( wp ), dimension ( me % n ), intent ( in ) :: etol !! the vector of error tolerances corresponding to !! the `neq` solution components. it is assumed that all !! elements are positive. following the first integration !! step, the tolerances are expected to be used by the !! integrator in an error test which roughly requires that !! `abs(local error) <= etol` for each vector component. real ( wp ), intent ( out ) :: h !! appropriate starting step size to be attempted by the !! differential equation method. real ( wp ), dimension ( me % n ) :: spy !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: pv !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: yp !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: sf !! work array which provide the routine with needed storage space. real ( wp ), parameter :: small = epsilon ( 1.0_wp ) real ( wp ), parameter :: big = huge ( 1.0_wp ) real ( wp ), parameter :: relper = small ** 0.375_wp integer :: j , k , lk real ( wp ) :: absdx , da , delf , dely ,& dfdub , dfdxb ,& dx , dy , fbnd ,& srydpb , tolexp , tolmin , tolp , tolsum , ydpb integer :: morder !! the order of the formula which will be used by !! the initial value method for taking the first integration !! step. morder = me % order () dx = b - a absdx = abs ( dx ) ! compute an approximate bound (dfdxb) on the partial ! derivative of the equation with respect to the ! independent variable. protect against an overflow. ! also compute a bound (fbnd) on the first derivative ! locally. da = sign ( max ( min ( relper * abs ( a ), absdx ), 10 0.0_wp * small * abs ( a )), dx ) if ( da == zero ) da = relper * dx call me % f ( a + da , y , sf ) yp = sf - yprime delf = me % stepsize_method % norm ( yp ) dfdxb = big if ( delf < big * abs ( da )) dfdxb = delf / abs ( da ) fbnd = me % stepsize_method % norm ( sf ) ! compute an estimate (dfdub) of the local lipschitz ! constant for the system of differential equations. this ! also represents an estimate of the norm of the jacobian ! locally. three iterations (two when neq=1) are used to ! estimate the lipschitz constant by numerical differences. ! the first perturbation vector is based on the initial ! derivatives and direction of integration. the second ! perturbation vector is formed using another evaluation of ! the differential equation. the third perturbation vector ! is formed using perturbations based only on the initial ! values. components that are zero are always changed to ! non-zero values (except on the first iteration). when ! information is available, care is taken to ensure that ! components of the perturbation vector have signs which are ! consistent with the slopes of local solution curves. ! also choose the largest bound (fbnd) for the first ! derivative. ! ! perturbation vector size is held ! constant for all iterations. compute ! this change from the ! size of the vector of initial ! values. dely = relper * me % stepsize_method % norm ( y ) if ( dely == zero ) dely = relper dely = sign ( dely , dx ) delf = me % stepsize_method % norm ( yprime ) fbnd = max ( fbnd , delf ) if ( delf == zero ) then ! cannot have a null perturbation vector spy = zero yp = 1.0_wp delf = me % stepsize_method % norm ( yp ) else ! use initial derivatives for first perturbation spy = yprime yp = yprime end if dfdub = zero lk = min ( me % n + 1 , 3 ) do k = 1 , lk ! define perturbed vector of initial values pv = y + yp * ( dely / delf ) if ( k == 2 ) then ! use a shifted value of the independent variable ! in computing one estimate call me % f ( a + da , pv , yp ) pv = yp - sf else ! evaluate derivatives associated with perturbed ! vector and compute corresponding differences call me % f ( a , pv , yp ) pv = yp - yprime end if ! choose largest bounds on the first derivative ! and a local lipschitz constant fbnd = max ( fbnd , me % stepsize_method % norm ( yp )) delf = me % stepsize_method % norm ( pv ) if ( delf >= big * abs ( dely )) then ! protect against an overflow dfdub = big exit end if dfdub = max ( dfdub , delf / abs ( dely )) if ( k == lk ) exit ! choose next perturbation vector if ( delf == zero ) delf = 1.0_wp do j = 1 , me % n if ( k == 2 ) then dy = y ( j ) if ( dy == zero ) dy = dely / relper else dy = abs ( pv ( j )) if ( dy == zero ) dy = delf end if if ( spy ( j ) == zero ) spy ( j ) = yp ( j ) if ( spy ( j ) /= zero ) dy = sign ( dy , spy ( j )) yp ( j ) = dy end do delf = me % stepsize_method % norm ( yp ) end do ! compute a bound (ydpb) on the norm of the second derivative ydpb = dfdxb + dfdub * fbnd ! define the tolerance parameter upon which the starting step ! size is to be based. a value in the middle of the error ! tolerance range is selected. tolmin = big tolsum = zero do k = 1 , me % n tolexp = log10 ( etol ( k )) tolmin = min ( tolmin , tolexp ) tolsum = tolsum + tolexp end do tolp = 1 0.0_wp ** ( 0.5_wp * ( tolsum / me % n + tolmin ) / ( morder + 1 )) ! compute a starting step size based on the above first and ! second derivative information ! ! restrict the step length to be not bigger ! than abs(b-a). (unless b is too close to a) h = absdx if ( ydpb == zero . and . fbnd == zero ) then ! both first derivative term (fbnd) and second ! derivative term (ydpb) are zero if ( tolp < 1.0_wp ) h = absdx * tolp elseif ( ydpb == zero ) then ! only second derivative term (ydpb) is zero if ( tolp < fbnd * absdx ) h = tolp / fbnd else ! second derivative term (ydpb) is non-zero srydpb = sqrt ( 0.5_wp * ydpb ) if ( tolp < srydpb * absdx ) h = tolp / srydpb end if ! further restrict the step length to be not bigger than 1/dfdub if ( h * dfdub > 1.0_wp ) h = 1.0_wp / dfdub ! finally, restrict the step length to be not ! smaller than 100*small*abs(a). however, if ! a=0. and the computed h underflowed to zero, ! the algorithm returns small*abs(b) for the step length. h = max ( h , 10 0.0_wp * small * abs ( a )) if ( h == zero ) h = small * abs ( b ) ! now set direction of integration h = sign ( h , dx ) end subroutine hstart","tags":"","loc":"proc/hstart.html"},{"title":"euler_properties – rklib","text":"interface Calls interface~~euler_properties~~CallsGraph interface~euler_properties rklib_module::euler_class%euler_properties proc~euler_properties rklib_fixed_properties::euler_properties interface~euler_properties->proc~euler_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/euler_properties.html"},{"title":"midpoint_properties – rklib","text":"interface Calls interface~~midpoint_properties~~CallsGraph interface~midpoint_properties rklib_module::midpoint_class%midpoint_properties proc~midpoint_properties rklib_fixed_properties::midpoint_properties interface~midpoint_properties->proc~midpoint_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/midpoint_properties.html"},{"title":"heun_properties – rklib","text":"interface Calls interface~~heun_properties~~CallsGraph interface~heun_properties rklib_module::heun_class%heun_properties proc~heun_properties rklib_fixed_properties::heun_properties interface~heun_properties->proc~heun_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/heun_properties.html"},{"title":"rkssp22_properties – rklib","text":"interface Calls interface~~rkssp22_properties~~CallsGraph interface~rkssp22_properties rklib_module::rkssp22_class%rkssp22_properties proc~rkssp22_properties rklib_fixed_properties::rkssp22_properties interface~rkssp22_properties->proc~rkssp22_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp22_properties.html"},{"title":"rk3_properties – rklib","text":"interface Calls interface~~rk3_properties~~CallsGraph interface~rk3_properties rklib_module::rk3_class%rk3_properties proc~rk3_properties rklib_fixed_properties::rk3_properties interface~rk3_properties->proc~rk3_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk3_properties.html"},{"title":"rkssp33_properties – rklib","text":"interface Calls interface~~rkssp33_properties~~CallsGraph interface~rkssp33_properties rklib_module::rkssp33_class%rkssp33_properties proc~rkssp33_properties rklib_fixed_properties::rkssp33_properties interface~rkssp33_properties->proc~rkssp33_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp33_properties.html"},{"title":"rkssp53_properties – rklib","text":"interface Calls interface~~rkssp53_properties~~CallsGraph interface~rkssp53_properties rklib_module::rkssp53_class%rkssp53_properties proc~rkssp53_properties rklib_fixed_properties::rkssp53_properties interface~rkssp53_properties->proc~rkssp53_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp53_properties.html"},{"title":"rk4_properties – rklib","text":"interface Calls interface~~rk4_properties~~CallsGraph interface~rk4_properties rklib_module::rk4_class%rk4_properties proc~rk4_properties rklib_fixed_properties::rk4_properties interface~rk4_properties->proc~rk4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk4_properties.html"},{"title":"rks4_properties – rklib","text":"interface Calls interface~~rks4_properties~~CallsGraph interface~rks4_properties rklib_module::rks4_class%rks4_properties proc~rks4_properties rklib_fixed_properties::rks4_properties interface~rks4_properties->proc~rks4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks4_properties.html"},{"title":"rkr4_properties – rklib","text":"interface Calls interface~~rkr4_properties~~CallsGraph interface~rkr4_properties rklib_module::rkr4_class%rkr4_properties proc~rkr4_properties rklib_fixed_properties::rkr4_properties interface~rkr4_properties->proc~rkr4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkr4_properties.html"},{"title":"rkls44_properties – rklib","text":"interface Calls interface~~rkls44_properties~~CallsGraph interface~rkls44_properties rklib_module::rkls44_class%rkls44_properties proc~rkls44_properties rklib_fixed_properties::rkls44_properties interface~rkls44_properties->proc~rkls44_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkls44_properties.html"},{"title":"rkls54_properties – rklib","text":"interface Calls interface~~rkls54_properties~~CallsGraph interface~rkls54_properties rklib_module::rkls54_class%rkls54_properties proc~rkls54_properties rklib_fixed_properties::rkls54_properties interface~rkls54_properties->proc~rkls54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkls54_properties.html"},{"title":"rkssp54_properties – rklib","text":"interface Calls interface~~rkssp54_properties~~CallsGraph interface~rkssp54_properties rklib_module::rkssp54_class%rkssp54_properties proc~rkssp54_properties rklib_fixed_properties::rkssp54_properties interface~rkssp54_properties->proc~rkssp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp54_properties.html"},{"title":"rks5_properties – rklib","text":"interface Calls interface~~rks5_properties~~CallsGraph interface~rks5_properties rklib_module::rks5_class%rks5_properties proc~rks5_properties rklib_fixed_properties::rks5_properties interface~rks5_properties->proc~rks5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks5_properties.html"},{"title":"rk5_properties – rklib","text":"interface Calls interface~~rk5_properties~~CallsGraph interface~rk5_properties rklib_module::rk5_class%rk5_properties proc~rk5_properties rklib_fixed_properties::rk5_properties interface~rk5_properties->proc~rk5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk5_properties.html"},{"title":"rkc5_properties – rklib","text":"interface Calls interface~~rkc5_properties~~CallsGraph interface~rkc5_properties rklib_module::rkc5_class%rkc5_properties proc~rkc5_properties rklib_fixed_properties::rkc5_properties interface~rkc5_properties->proc~rkc5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc5_properties.html"},{"title":"rkl5_properties – rklib","text":"interface Calls interface~~rkl5_properties~~CallsGraph interface~rkl5_properties rklib_module::rkl5_class%rkl5_properties proc~rkl5_properties rklib_fixed_properties::rkl5_properties interface~rkl5_properties->proc~rkl5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkl5_properties.html"},{"title":"rklk5a_properties – rklib","text":"interface Calls interface~~rklk5a_properties~~CallsGraph interface~rklk5a_properties rklib_module::rklk5a_class%rklk5a_properties proc~rklk5a_properties rklib_fixed_properties::rklk5a_properties interface~rklk5a_properties->proc~rklk5a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rklk5a_properties.html"},{"title":"rklk5b_properties – rklib","text":"interface Calls interface~~rklk5b_properties~~CallsGraph interface~rklk5b_properties rklib_module::rklk5b_class%rklk5b_properties proc~rklk5b_properties rklib_fixed_properties::rklk5b_properties interface~rklk5b_properties->proc~rklk5b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rklk5b_properties.html"},{"title":"rkb6_properties – rklib","text":"interface Calls interface~~rkb6_properties~~CallsGraph interface~rkb6_properties rklib_module::rkb6_class%rkb6_properties proc~rkb6_properties rklib_fixed_properties::rkb6_properties interface~rkb6_properties->proc~rkb6_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkb6_properties.html"},{"title":"rk7_properties – rklib","text":"interface Calls interface~~rk7_properties~~CallsGraph interface~rk7_properties rklib_module::rk7_class%rk7_properties proc~rk7_properties rklib_fixed_properties::rk7_properties interface~rk7_properties->proc~rk7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk7_properties.html"},{"title":"rk8_10_properties – rklib","text":"interface Calls interface~~rk8_10_properties~~CallsGraph interface~rk8_10_properties rklib_module::rk8_10_class%rk8_10_properties proc~rk8_10_properties rklib_fixed_properties::rk8_10_properties interface~rk8_10_properties->proc~rk8_10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk8_10_properties.html"},{"title":"rkcv8_properties – rklib","text":"interface Calls interface~~rkcv8_properties~~CallsGraph interface~rkcv8_properties rklib_module::rkcv8_class%rkcv8_properties proc~rkcv8_properties rklib_fixed_properties::rkcv8_properties interface~rkcv8_properties->proc~rkcv8_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkcv8_properties.html"},{"title":"rk8_12_properties – rklib","text":"interface Calls interface~~rk8_12_properties~~CallsGraph interface~rk8_12_properties rklib_module::rk8_12_class%rk8_12_properties proc~rk8_12_properties rklib_fixed_properties::rk8_12_properties interface~rk8_12_properties->proc~rk8_12_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rk8_12_properties.html"},{"title":"rkz10_properties – rklib","text":"interface Calls interface~~rkz10_properties~~CallsGraph interface~rkz10_properties rklib_module::rkz10_class%rkz10_properties proc~rkz10_properties rklib_fixed_properties::rkz10_properties interface~rkz10_properties->proc~rkz10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkz10_properties.html"},{"title":"rko10_properties – rklib","text":"interface Calls interface~~rko10_properties~~CallsGraph interface~rko10_properties rklib_module::rko10_class%rko10_properties proc~rko10_properties rklib_fixed_properties::rko10_properties interface~rko10_properties->proc~rko10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rko10_properties.html"},{"title":"rkh10_properties – rklib","text":"interface Calls interface~~rkh10_properties~~CallsGraph interface~rkh10_properties rklib_module::rkh10_class%rkh10_properties proc~rkh10_properties rklib_fixed_properties::rkh10_properties interface~rkh10_properties->proc~rkh10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkh10_properties.html"},{"title":"rkbs32_properties – rklib","text":"interface Calls interface~~rkbs32_properties~~CallsGraph interface~rkbs32_properties rklib_module::rkbs32_class%rkbs32_properties proc~rkbs32_properties rklib_variable_properties::rkbs32_properties interface~rkbs32_properties->proc~rkbs32_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkbs32_properties.html"},{"title":"rkssp43_properties – rklib","text":"interface Calls interface~~rkssp43_properties~~CallsGraph interface~rkssp43_properties rklib_module::rkssp43_class%rkssp43_properties proc~rkssp43_properties rklib_variable_properties::rkssp43_properties interface~rkssp43_properties->proc~rkssp43_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkssp43_properties.html"},{"title":"rkf45_properties – rklib","text":"interface Calls interface~~rkf45_properties~~CallsGraph interface~rkf45_properties rklib_module::rkf45_class%rkf45_properties proc~rkf45_properties rklib_variable_properties::rkf45_properties interface~rkf45_properties->proc~rkf45_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf45_properties.html"},{"title":"rkck54_properties – rklib","text":"interface Calls interface~~rkck54_properties~~CallsGraph interface~rkck54_properties rklib_module::rkck54_class%rkck54_properties proc~rkck54_properties rklib_variable_properties::rkck54_properties interface~rkck54_properties->proc~rkck54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkck54_properties.html"},{"title":"rkdp54_properties – rklib","text":"interface Calls interface~~rkdp54_properties~~CallsGraph interface~rkdp54_properties rklib_module::rkdp54_class%rkdp54_properties proc~rkdp54_properties rklib_variable_properties::rkdp54_properties interface~rkdp54_properties->proc~rkdp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp54_properties.html"},{"title":"rkt54_properties – rklib","text":"interface Calls interface~~rkt54_properties~~CallsGraph interface~rkt54_properties rklib_module::rkt54_class%rkt54_properties proc~rkt54_properties rklib_variable_properties::rkt54_properties interface~rkt54_properties->proc~rkt54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkt54_properties.html"},{"title":"rks54_properties – rklib","text":"interface Calls interface~~rks54_properties~~CallsGraph interface~rks54_properties rklib_module::rks54_class%rks54_properties proc~rks54_properties rklib_variable_properties::rks54_properties interface~rks54_properties->proc~rks54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks54_properties.html"},{"title":"rkpp54_properties – rklib","text":"interface Calls interface~~rkpp54_properties~~CallsGraph interface~rkpp54_properties rklib_module::rkpp54_class%rkpp54_properties proc~rkpp54_properties rklib_variable_properties::rkpp54_properties interface~rkpp54_properties->proc~rkpp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkpp54_properties.html"},{"title":"rkpp54b_properties – rklib","text":"interface Calls interface~~rkpp54b_properties~~CallsGraph interface~rkpp54b_properties rklib_module::rkpp54b_class%rkpp54b_properties proc~rkpp54b_properties rklib_variable_properties::rkpp54b_properties interface~rkpp54b_properties->proc~rkpp54b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkpp54b_properties.html"},{"title":"rkbs54_properties – rklib","text":"interface Calls interface~~rkbs54_properties~~CallsGraph interface~rkbs54_properties rklib_module::rkbs54_class%rkbs54_properties proc~rkbs54_properties rklib_variable_properties::rkbs54_properties interface~rkbs54_properties->proc~rkbs54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkbs54_properties.html"},{"title":"rkss54_properties – rklib","text":"interface Calls interface~~rkss54_properties~~CallsGraph interface~rkss54_properties rklib_module::rkss54_class%rkss54_properties proc~rkss54_properties rklib_variable_properties::rkss54_properties interface~rkss54_properties->proc~rkss54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkss54_properties.html"},{"title":"rkdp65_properties – rklib","text":"interface Calls interface~~rkdp65_properties~~CallsGraph interface~rkdp65_properties rklib_module::rkdp65_class%rkdp65_properties proc~rkdp65_properties rklib_variable_properties::rkdp65_properties interface~rkdp65_properties->proc~rkdp65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp65_properties.html"},{"title":"rkc65_properties – rklib","text":"interface Calls interface~~rkc65_properties~~CallsGraph interface~rkc65_properties rklib_module::rkc65_class%rkc65_properties proc~rkc65_properties rklib_variable_properties::rkc65_properties interface~rkc65_properties->proc~rkc65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc65_properties.html"},{"title":"rktp64_properties – rklib","text":"interface Calls interface~~rktp64_properties~~CallsGraph interface~rktp64_properties rklib_module::rktp64_class%rktp64_properties proc~rktp64_properties rklib_variable_properties::rktp64_properties interface~rktp64_properties->proc~rktp64_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp64_properties.html"},{"title":"rkv65e_properties – rklib","text":"interface Calls interface~~rkv65e_properties~~CallsGraph interface~rkv65e_properties rklib_module::rkv65e_class%rkv65e_properties proc~rkv65e_properties rklib_variable_properties::rkv65e_properties interface~rkv65e_properties->proc~rkv65e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65e_properties.html"},{"title":"rkv65r_properties – rklib","text":"interface Calls interface~~rkv65r_properties~~CallsGraph interface~rkv65r_properties rklib_module::rkv65r_class%rkv65r_properties proc~rkv65r_properties rklib_variable_properties::rkv65r_properties interface~rkv65r_properties->proc~rkv65r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65r_properties.html"},{"title":"rkv65_properties – rklib","text":"interface Calls interface~~rkv65_properties~~CallsGraph interface~rkv65_properties rklib_module::rkv65_class%rkv65_properties proc~rkv65_properties rklib_variable_properties::rkv65_properties interface~rkv65_properties->proc~rkv65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv65_properties.html"},{"title":"dverk65_properties – rklib","text":"interface Calls interface~~dverk65_properties~~CallsGraph interface~dverk65_properties rklib_module::dverk65_class%dverk65_properties proc~dverk65_properties rklib_variable_properties::dverk65_properties interface~dverk65_properties->proc~dverk65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/dverk65_properties.html"},{"title":"rktf65_properties – rklib","text":"interface Calls interface~~rktf65_properties~~CallsGraph interface~rktf65_properties rklib_module::rktf65_class%rktf65_properties proc~rktf65_properties rklib_variable_properties::rktf65_properties interface~rktf65_properties->proc~rktf65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktf65_properties.html"},{"title":"rktp75_properties – rklib","text":"interface Calls interface~~rktp75_properties~~CallsGraph interface~rktp75_properties rklib_module::rktp75_class%rktp75_properties proc~rktp75_properties rklib_variable_properties::rktp75_properties interface~rktp75_properties->proc~rktp75_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp75_properties.html"},{"title":"rktmy7_properties – rklib","text":"interface Calls interface~~rktmy7_properties~~CallsGraph interface~rktmy7_properties rklib_module::rktmy7_class%rktmy7_properties proc~rktmy7_properties rklib_variable_properties::rktmy7_properties interface~rktmy7_properties->proc~rktmy7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktmy7_properties.html"},{"title":"rktmy7s_properties – rklib","text":"interface Calls interface~~rktmy7s_properties~~CallsGraph interface~rktmy7s_properties rklib_module::rktmy7s_class%rktmy7s_properties proc~rktmy7s_properties rklib_variable_properties::rktmy7s_properties interface~rktmy7s_properties->proc~rktmy7s_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktmy7s_properties.html"},{"title":"rkv76e_properties – rklib","text":"interface Calls interface~~rkv76e_properties~~CallsGraph interface~rkv76e_properties rklib_module::rkv76e_class%rkv76e_properties proc~rkv76e_properties rklib_variable_properties::rkv76e_properties interface~rkv76e_properties->proc~rkv76e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv76e_properties.html"},{"title":"rkv76r_properties – rklib","text":"interface Calls interface~~rkv76r_properties~~CallsGraph interface~rkv76r_properties rklib_module::rkv76r_class%rkv76r_properties proc~rkv76r_properties rklib_variable_properties::rkv76r_properties interface~rkv76r_properties->proc~rkv76r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv76r_properties.html"},{"title":"rkss76_properties – rklib","text":"interface Calls interface~~rkss76_properties~~CallsGraph interface~rkss76_properties rklib_module::rkss76_class%rkss76_properties proc~rkss76_properties rklib_variable_properties::rkss76_properties interface~rkss76_properties->proc~rkss76_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkss76_properties.html"},{"title":"rkf78_properties – rklib","text":"interface Calls interface~~rkf78_properties~~CallsGraph interface~rkf78_properties rklib_module::rkf78_class%rkf78_properties proc~rkf78_properties rklib_variable_properties::rkf78_properties interface~rkf78_properties->proc~rkf78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf78_properties.html"},{"title":"rkv78_properties – rklib","text":"interface Calls interface~~rkv78_properties~~CallsGraph interface~rkv78_properties rklib_module::rkv78_class%rkv78_properties proc~rkv78_properties rklib_variable_properties::rkv78_properties interface~rkv78_properties->proc~rkv78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv78_properties.html"},{"title":"dverk78_properties – rklib","text":"interface Calls interface~~dverk78_properties~~CallsGraph interface~dverk78_properties rklib_module::dverk78_class%dverk78_properties proc~dverk78_properties rklib_variable_properties::dverk78_properties interface~dverk78_properties->proc~dverk78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/dverk78_properties.html"},{"title":"rkdp85_properties – rklib","text":"interface Calls interface~~rkdp85_properties~~CallsGraph interface~rkdp85_properties rklib_module::rkdp85_class%rkdp85_properties proc~rkdp85_properties rklib_variable_properties::rkdp85_properties interface~rkdp85_properties->proc~rkdp85_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp85_properties.html"},{"title":"rktp86_properties – rklib","text":"interface Calls interface~~rktp86_properties~~CallsGraph interface~rktp86_properties rklib_module::rktp86_class%rktp86_properties proc~rktp86_properties rklib_variable_properties::rktp86_properties interface~rktp86_properties->proc~rktp86_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rktp86_properties.html"},{"title":"rkdp87_properties – rklib","text":"interface Calls interface~~rkdp87_properties~~CallsGraph interface~rkdp87_properties rklib_module::rkdp87_class%rkdp87_properties proc~rkdp87_properties rklib_variable_properties::rkdp87_properties interface~rkdp87_properties->proc~rkdp87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkdp87_properties.html"},{"title":"rkv87e_properties – rklib","text":"interface Calls interface~~rkv87e_properties~~CallsGraph interface~rkv87e_properties rklib_module::rkv87e_class%rkv87e_properties proc~rkv87e_properties rklib_variable_properties::rkv87e_properties interface~rkv87e_properties->proc~rkv87e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv87e_properties.html"},{"title":"rkv87r_properties – rklib","text":"interface Calls interface~~rkv87r_properties~~CallsGraph interface~rkv87r_properties rklib_module::rkv87r_class%rkv87r_properties proc~rkv87r_properties rklib_variable_properties::rkv87r_properties interface~rkv87r_properties->proc~rkv87r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv87r_properties.html"},{"title":"rkev87_properties – rklib","text":"interface Calls interface~~rkev87_properties~~CallsGraph interface~rkev87_properties rklib_module::rkev87_class%rkev87_properties proc~rkev87_properties rklib_variable_properties::rkev87_properties interface~rkev87_properties->proc~rkev87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkev87_properties.html"},{"title":"rkk87_properties – rklib","text":"interface Calls interface~~rkk87_properties~~CallsGraph interface~rkk87_properties rklib_module::rkk87_class%rkk87_properties proc~rkk87_properties rklib_variable_properties::rkk87_properties interface~rkk87_properties->proc~rkk87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkk87_properties.html"},{"title":"rkf89_properties – rklib","text":"interface Calls interface~~rkf89_properties~~CallsGraph interface~rkf89_properties rklib_module::rkf89_class%rkf89_properties proc~rkf89_properties rklib_variable_properties::rkf89_properties interface~rkf89_properties->proc~rkf89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf89_properties.html"},{"title":"rkv89_properties – rklib","text":"interface Calls interface~~rkv89_properties~~CallsGraph interface~rkv89_properties rklib_module::rkv89_class%rkv89_properties proc~rkv89_properties rklib_variable_properties::rkv89_properties interface~rkv89_properties->proc~rkv89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv89_properties.html"},{"title":"rkt98a_properties – rklib","text":"interface Calls interface~~rkt98a_properties~~CallsGraph interface~rkt98a_properties rklib_module::rkt98a_class%rkt98a_properties proc~rkt98a_properties rklib_variable_properties::rkt98a_properties interface~rkt98a_properties->proc~rkt98a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkt98a_properties.html"},{"title":"rkv98e_properties – rklib","text":"interface Calls interface~~rkv98e_properties~~CallsGraph interface~rkv98e_properties rklib_module::rkv98e_class%rkv98e_properties proc~rkv98e_properties rklib_variable_properties::rkv98e_properties interface~rkv98e_properties->proc~rkv98e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv98e_properties.html"},{"title":"rkv98r_properties – rklib","text":"interface Calls interface~~rkv98r_properties~~CallsGraph interface~rkv98r_properties rklib_module::rkv98r_class%rkv98r_properties proc~rkv98r_properties rklib_variable_properties::rkv98r_properties interface~rkv98r_properties->proc~rkv98r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkv98r_properties.html"},{"title":"rks98_properties – rklib","text":"interface Calls interface~~rks98_properties~~CallsGraph interface~rks98_properties rklib_module::rks98_class%rks98_properties proc~rks98_properties rklib_variable_properties::rks98_properties interface~rks98_properties->proc~rks98_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks98_properties.html"},{"title":"rkf108_properties – rklib","text":"interface Calls interface~~rkf108_properties~~CallsGraph interface~rkf108_properties rklib_module::rkf108_class%rkf108_properties proc~rkf108_properties rklib_variable_properties::rkf108_properties interface~rkf108_properties->proc~rkf108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf108_properties.html"},{"title":"rkc108_properties – rklib","text":"interface Calls interface~~rkc108_properties~~CallsGraph interface~rkc108_properties rklib_module::rkc108_class%rkc108_properties proc~rkc108_properties rklib_variable_properties::rkc108_properties interface~rkc108_properties->proc~rkc108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkc108_properties.html"},{"title":"rkb109_properties – rklib","text":"interface Calls interface~~rkb109_properties~~CallsGraph interface~rkb109_properties rklib_module::rkb109_class%rkb109_properties proc~rkb109_properties rklib_variable_properties::rkb109_properties interface~rkb109_properties->proc~rkb109_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkb109_properties.html"},{"title":"rks1110a_properties – rklib","text":"interface Calls interface~~rks1110a_properties~~CallsGraph interface~rks1110a_properties rklib_module::rks1110a_class%rks1110a_properties proc~rks1110a_properties rklib_variable_properties::rks1110a_properties interface~rks1110a_properties->proc~rks1110a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rks1110a_properties.html"},{"title":"rkf1210_properties – rklib","text":"interface Calls interface~~rkf1210_properties~~CallsGraph interface~rkf1210_properties rklib_module::rkf1210_class%rkf1210_properties proc~rkf1210_properties rklib_variable_properties::rkf1210_properties interface~rkf1210_properties->proc~rkf1210_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf1210_properties.html"},{"title":"rko129_properties – rklib","text":"interface Calls interface~~rko129_properties~~CallsGraph interface~rko129_properties rklib_module::rko129_class%rko129_properties proc~rko129_properties rklib_variable_properties::rko129_properties interface~rko129_properties->proc~rko129_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rko129_properties.html"},{"title":"rkf1412_properties – rklib","text":"interface Calls interface~~rkf1412_properties~~CallsGraph interface~rkf1412_properties rklib_module::rkf1412_class%rkf1412_properties proc~rkf1412_properties rklib_variable_properties::rkf1412_properties interface~rkf1412_properties->proc~rkf1412_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"interface/rkf1412_properties.html"},{"title":"euler – rklib","text":"interface Calls interface~~euler~~CallsGraph interface~euler rklib_module::euler_class%euler proc~euler rklib_fixed_steps::euler interface~euler->proc~euler f f proc~euler->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/euler.html"},{"title":"midpoint – rklib","text":"interface Calls interface~~midpoint~~CallsGraph interface~midpoint rklib_module::midpoint_class%midpoint proc~midpoint rklib_fixed_steps::midpoint interface~midpoint->proc~midpoint f f proc~midpoint->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/midpoint.html"},{"title":"heun – rklib","text":"interface Calls interface~~heun~~CallsGraph interface~heun rklib_module::heun_class%heun proc~heun rklib_fixed_steps::heun interface~heun->proc~heun f f proc~heun->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/heun.html"},{"title":"rkssp22 – rklib","text":"interface Calls interface~~rkssp22~~CallsGraph interface~rkssp22 rklib_module::rkssp22_class%rkssp22 proc~rkssp22 rklib_fixed_steps::rkssp22 interface~rkssp22->proc~rkssp22 f f proc~rkssp22->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp22.html"},{"title":"rk3 – rklib","text":"interface Calls interface~~rk3~~CallsGraph interface~rk3 rklib_module::rk3_class%rk3 proc~rk3 rklib_fixed_steps::rk3 interface~rk3->proc~rk3 f f proc~rk3->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk3.html"},{"title":"rkssp33 – rklib","text":"interface Calls interface~~rkssp33~~CallsGraph interface~rkssp33 rklib_module::rkssp33_class%rkssp33 proc~rkssp33 rklib_fixed_steps::rkssp33 interface~rkssp33->proc~rkssp33 f f proc~rkssp33->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp33.html"},{"title":"rkssp53 – rklib","text":"interface Calls interface~~rkssp53~~CallsGraph interface~rkssp53 rklib_module::rkssp53_class%rkssp53 proc~rkssp53 rklib_fixed_steps::rkssp53 interface~rkssp53->proc~rkssp53 f f proc~rkssp53->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp53.html"},{"title":"rk4 – rklib","text":"interface Calls interface~~rk4~~CallsGraph interface~rk4 rklib_module::rk4_class%rk4 proc~rk4 rklib_fixed_steps::rk4 interface~rk4->proc~rk4 f f proc~rk4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk4.html"},{"title":"rks4 – rklib","text":"interface Calls interface~~rks4~~CallsGraph interface~rks4 rklib_module::rks4_class%rks4 proc~rks4 rklib_fixed_steps::rks4 interface~rks4->proc~rks4 f f proc~rks4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rks4.html"},{"title":"rkr4 – rklib","text":"interface Calls interface~~rkr4~~CallsGraph interface~rkr4 rklib_module::rkr4_class%rkr4 proc~rkr4 rklib_fixed_steps::rkr4 interface~rkr4->proc~rkr4 f f proc~rkr4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkr4.html"},{"title":"rkls44 – rklib","text":"interface Calls interface~~rkls44~~CallsGraph interface~rkls44 rklib_module::rkls44_class%rkls44 proc~rkls44 rklib_fixed_steps::rkls44 interface~rkls44->proc~rkls44 f f proc~rkls44->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkls44.html"},{"title":"rkls54 – rklib","text":"interface Calls interface~~rkls54~~CallsGraph interface~rkls54 rklib_module::rkls54_class%rkls54 proc~rkls54 rklib_fixed_steps::rkls54 interface~rkls54->proc~rkls54 f f proc~rkls54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkls54.html"},{"title":"rkssp54 – rklib","text":"interface Calls interface~~rkssp54~~CallsGraph interface~rkssp54 rklib_module::rkssp54_class%rkssp54 proc~rkssp54 rklib_fixed_steps::rkssp54 interface~rkssp54->proc~rkssp54 f f proc~rkssp54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkssp54.html"},{"title":"rks5 – rklib","text":"interface Calls interface~~rks5~~CallsGraph interface~rks5 rklib_module::rks5_class%rks5 proc~rks5 rklib_fixed_steps::rks5 interface~rks5->proc~rks5 f f proc~rks5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rks5.html"},{"title":"rk5 – rklib","text":"interface Calls interface~~rk5~~CallsGraph interface~rk5 rklib_module::rk5_class%rk5 proc~rk5 rklib_fixed_steps::rk5 interface~rk5->proc~rk5 f f proc~rk5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk5.html"},{"title":"rkc5 – rklib","text":"interface Calls interface~~rkc5~~CallsGraph interface~rkc5 rklib_module::rkc5_class%rkc5 proc~rkc5 rklib_fixed_steps::rkc5 interface~rkc5->proc~rkc5 f f proc~rkc5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkc5.html"},{"title":"rkl5 – rklib","text":"interface Calls interface~~rkl5~~CallsGraph interface~rkl5 rklib_module::rkl5_class%rkl5 proc~rkl5 rklib_fixed_steps::rkl5 interface~rkl5->proc~rkl5 f f proc~rkl5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkl5.html"},{"title":"rklk5a – rklib","text":"interface Calls interface~~rklk5a~~CallsGraph interface~rklk5a rklib_module::rklk5a_class%rklk5a proc~rklk5a rklib_fixed_steps::rklk5a interface~rklk5a->proc~rklk5a f f proc~rklk5a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rklk5a.html"},{"title":"rklk5b – rklib","text":"interface Calls interface~~rklk5b~~CallsGraph interface~rklk5b rklib_module::rklk5b_class%rklk5b proc~rklk5b rklib_fixed_steps::rklk5b interface~rklk5b->proc~rklk5b f f proc~rklk5b->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rklk5b.html"},{"title":"rkb6 – rklib","text":"interface Calls interface~~rkb6~~CallsGraph interface~rkb6 rklib_module::rkb6_class%rkb6 proc~rkb6 rklib_fixed_steps::rkb6 interface~rkb6->proc~rkb6 f f proc~rkb6->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkb6.html"},{"title":"rk7 – rklib","text":"interface Calls interface~~rk7~~CallsGraph interface~rk7 rklib_module::rk7_class%rk7 proc~rk7 rklib_fixed_steps::rk7 interface~rk7->proc~rk7 f f proc~rk7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk7.html"},{"title":"rk8_10 – rklib","text":"interface Calls interface~~rk8_10~~CallsGraph interface~rk8_10 rklib_module::rk8_10_class%rk8_10 proc~rk8_10 rklib_fixed_steps::rk8_10 interface~rk8_10->proc~rk8_10 f f proc~rk8_10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk8_10.html"},{"title":"rkcv8 – rklib","text":"interface Calls interface~~rkcv8~~CallsGraph interface~rkcv8 rklib_module::rkcv8_class%rkcv8 proc~rkcv8 rklib_fixed_steps::rkcv8 interface~rkcv8->proc~rkcv8 f f proc~rkcv8->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkcv8.html"},{"title":"rk8_12 – rklib","text":"interface Calls interface~~rk8_12~~CallsGraph interface~rk8_12 rklib_module::rk8_12_class%rk8_12 proc~rk8_12 rklib_fixed_steps::rk8_12 interface~rk8_12->proc~rk8_12 f f proc~rk8_12->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rk8_12.html"},{"title":"rkz10 – rklib","text":"interface Calls interface~~rkz10~~CallsGraph interface~rkz10 rklib_module::rkz10_class%rkz10 proc~rkz10 rklib_fixed_steps::rkz10 interface~rkz10->proc~rkz10 f f proc~rkz10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkz10.html"},{"title":"rko10 – rklib","text":"interface Calls interface~~rko10~~CallsGraph interface~rko10 rklib_module::rko10_class%rko10 proc~rko10 rklib_fixed_steps::rko10 interface~rko10->proc~rko10 f f proc~rko10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rko10.html"},{"title":"rkh10 – rklib","text":"interface Calls interface~~rkh10~~CallsGraph interface~rkh10 rklib_module::rkh10_class%rkh10 proc~rkh10 rklib_fixed_steps::rkh10 interface~rkh10->proc~rkh10 f f proc~rkh10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"interface/rkh10.html"},{"title":"rkbs32 – rklib","text":"interface Calls interface~~rkbs32~~CallsGraph interface~rkbs32 rklib_module::rkbs32_class%rkbs32 proc~rkbs32 rklib_variable_steps::rkbs32 interface~rkbs32->proc~rkbs32 f f proc~rkbs32->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkbs32.html"},{"title":"rkssp43 – rklib","text":"interface Calls interface~~rkssp43~~CallsGraph interface~rkssp43 rklib_module::rkssp43_class%rkssp43 proc~rkssp43 rklib_variable_steps::rkssp43 interface~rkssp43->proc~rkssp43 f f proc~rkssp43->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkssp43.html"},{"title":"rkf45 – rklib","text":"interface Calls interface~~rkf45~~CallsGraph interface~rkf45 rklib_module::rkf45_class%rkf45 proc~rkf45 rklib_variable_steps::rkf45 interface~rkf45->proc~rkf45 f f proc~rkf45->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf45.html"},{"title":"rkck54 – rklib","text":"interface Calls interface~~rkck54~~CallsGraph interface~rkck54 rklib_module::rkck54_class%rkck54 proc~rkck54 rklib_variable_steps::rkck54 interface~rkck54->proc~rkck54 f f proc~rkck54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkck54.html"},{"title":"rkdp54 – rklib","text":"interface Calls interface~~rkdp54~~CallsGraph interface~rkdp54 rklib_module::rkdp54_class%rkdp54 proc~rkdp54 rklib_variable_steps::rkdp54 interface~rkdp54->proc~rkdp54 f f proc~rkdp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkdp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkdp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp54.html"},{"title":"rkt54 – rklib","text":"interface Calls interface~~rkt54~~CallsGraph interface~rkt54 rklib_module::rkt54_class%rkt54 proc~rkt54 rklib_variable_steps::rkt54 interface~rkt54->proc~rkt54 f f proc~rkt54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkt54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkt54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkt54.html"},{"title":"rks54 – rklib","text":"interface Calls interface~~rks54~~CallsGraph interface~rks54 rklib_module::rks54_class%rks54 proc~rks54 rklib_variable_steps::rks54 interface~rks54->proc~rks54 f f proc~rks54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rks54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rks54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks54.html"},{"title":"rkpp54 – rklib","text":"interface Calls interface~~rkpp54~~CallsGraph interface~rkpp54 rklib_module::rkpp54_class%rkpp54 proc~rkpp54 rklib_variable_steps::rkpp54 interface~rkpp54->proc~rkpp54 f f proc~rkpp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkpp54.html"},{"title":"rkpp54b – rklib","text":"interface Calls interface~~rkpp54b~~CallsGraph interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b proc~rkpp54b rklib_variable_steps::rkpp54b interface~rkpp54b->proc~rkpp54b f f proc~rkpp54b->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54b->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54b->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkpp54b.html"},{"title":"rkbs54 – rklib","text":"interface Calls interface~~rkbs54~~CallsGraph interface~rkbs54 rklib_module::rkbs54_class%rkbs54 proc~rkbs54 rklib_variable_steps::rkbs54 interface~rkbs54->proc~rkbs54 f f proc~rkbs54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkbs54.html"},{"title":"rkss54 – rklib","text":"interface Calls interface~~rkss54~~CallsGraph interface~rkss54 rklib_module::rkss54_class%rkss54 proc~rkss54 rklib_variable_steps::rkss54 interface~rkss54->proc~rkss54 f f proc~rkss54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkss54.html"},{"title":"rkdp65 – rklib","text":"interface Calls interface~~rkdp65~~CallsGraph interface~rkdp65 rklib_module::rkdp65_class%rkdp65 proc~rkdp65 rklib_variable_steps::rkdp65 interface~rkdp65->proc~rkdp65 f f proc~rkdp65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp65.html"},{"title":"rkc65 – rklib","text":"interface Calls interface~~rkc65~~CallsGraph interface~rkc65 rklib_module::rkc65_class%rkc65 proc~rkc65 rklib_variable_steps::rkc65 interface~rkc65->proc~rkc65 f f proc~rkc65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkc65.html"},{"title":"rktp64 – rklib","text":"interface Calls interface~~rktp64~~CallsGraph interface~rktp64 rklib_module::rktp64_class%rktp64 proc~rktp64 rklib_variable_steps::rktp64 interface~rktp64->proc~rktp64 f f proc~rktp64->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp64.html"},{"title":"rkv65e – rklib","text":"interface Calls interface~~rkv65e~~CallsGraph interface~rkv65e rklib_module::rkv65e_class%rkv65e proc~rkv65e rklib_variable_steps::rkv65e interface~rkv65e->proc~rkv65e f f proc~rkv65e->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65e->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65e->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65e.html"},{"title":"rkv65r – rklib","text":"interface Calls interface~~rkv65r~~CallsGraph interface~rkv65r rklib_module::rkv65r_class%rkv65r proc~rkv65r rklib_variable_steps::rkv65r interface~rkv65r->proc~rkv65r f f proc~rkv65r->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65r->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65r->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65r.html"},{"title":"rkv65 – rklib","text":"interface Calls interface~~rkv65~~CallsGraph interface~rkv65 rklib_module::rkv65_class%rkv65 proc~rkv65 rklib_variable_steps::rkv65 interface~rkv65->proc~rkv65 f f proc~rkv65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv65.html"},{"title":"dverk65 – rklib","text":"interface Calls interface~~dverk65~~CallsGraph interface~dverk65 rklib_module::dverk65_class%dverk65 proc~dverk65 rklib_variable_steps::dverk65 interface~dverk65->proc~dverk65 f f proc~dverk65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/dverk65.html"},{"title":"rktf65 – rklib","text":"interface Calls interface~~rktf65~~CallsGraph interface~rktf65 rklib_module::rktf65_class%rktf65 proc~rktf65 rklib_variable_steps::rktf65 interface~rktf65->proc~rktf65 f f proc~rktf65->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rktf65->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rktf65->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktf65.html"},{"title":"rktp75 – rklib","text":"interface Calls interface~~rktp75~~CallsGraph interface~rktp75 rklib_module::rktp75_class%rktp75 proc~rktp75 rklib_variable_steps::rktp75 interface~rktp75->proc~rktp75 f f proc~rktp75->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp75.html"},{"title":"rktmy7 – rklib","text":"interface Calls interface~~rktmy7~~CallsGraph interface~rktmy7 rklib_module::rktmy7_class%rktmy7 proc~rktmy7 rklib_variable_steps::rktmy7 interface~rktmy7->proc~rktmy7 f f proc~rktmy7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktmy7.html"},{"title":"rktmy7s – rklib","text":"interface Calls interface~~rktmy7s~~CallsGraph interface~rktmy7s rklib_module::rktmy7s_class%rktmy7s proc~rktmy7s rklib_variable_steps::rktmy7s interface~rktmy7s->proc~rktmy7s f f proc~rktmy7s->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktmy7s.html"},{"title":"rkv76e – rklib","text":"interface Calls interface~~rkv76e~~CallsGraph interface~rkv76e rklib_module::rkv76e_class%rkv76e proc~rkv76e rklib_variable_steps::rkv76e interface~rkv76e->proc~rkv76e f f proc~rkv76e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv76e.html"},{"title":"rkv76r – rklib","text":"interface Calls interface~~rkv76r~~CallsGraph interface~rkv76r rklib_module::rkv76r_class%rkv76r proc~rkv76r rklib_variable_steps::rkv76r interface~rkv76r->proc~rkv76r f f proc~rkv76r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv76r.html"},{"title":"rkss76 – rklib","text":"interface Calls interface~~rkss76~~CallsGraph interface~rkss76 rklib_module::rkss76_class%rkss76 proc~rkss76 rklib_variable_steps::rkss76 interface~rkss76->proc~rkss76 f f proc~rkss76->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkss76.html"},{"title":"rkf78 – rklib","text":"interface Calls interface~~rkf78~~CallsGraph interface~rkf78 rklib_module::rkf78_class%rkf78 proc~rkf78 rklib_variable_steps::rkf78 interface~rkf78->proc~rkf78 f f proc~rkf78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf78.html"},{"title":"rkv78 – rklib","text":"interface Calls interface~~rkv78~~CallsGraph interface~rkv78 rklib_module::rkv78_class%rkv78 proc~rkv78 rklib_variable_steps::rkv78 interface~rkv78->proc~rkv78 f f proc~rkv78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv78.html"},{"title":"dverk78 – rklib","text":"interface Calls interface~~dverk78~~CallsGraph interface~dverk78 rklib_module::dverk78_class%dverk78 proc~dverk78 rklib_variable_steps::dverk78 interface~dverk78->proc~dverk78 f f proc~dverk78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/dverk78.html"},{"title":"rkdp85 – rklib","text":"interface Calls interface~~rkdp85~~CallsGraph interface~rkdp85 rklib_module::rkdp85_class%rkdp85 proc~rkdp85 rklib_variable_steps::rkdp85 interface~rkdp85->proc~rkdp85 f f proc~rkdp85->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp85.html"},{"title":"rktp86 – rklib","text":"interface Calls interface~~rktp86~~CallsGraph interface~rktp86 rklib_module::rktp86_class%rktp86 proc~rktp86 rklib_variable_steps::rktp86 interface~rktp86->proc~rktp86 f f proc~rktp86->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rktp86.html"},{"title":"rkdp87 – rklib","text":"interface Calls interface~~rkdp87~~CallsGraph interface~rkdp87 rklib_module::rkdp87_class%rkdp87 proc~rkdp87 rklib_variable_steps::rkdp87 interface~rkdp87->proc~rkdp87 f f proc~rkdp87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkdp87.html"},{"title":"rkv87e – rklib","text":"interface Calls interface~~rkv87e~~CallsGraph interface~rkv87e rklib_module::rkv87e_class%rkv87e proc~rkv87e rklib_variable_steps::rkv87e interface~rkv87e->proc~rkv87e f f proc~rkv87e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv87e.html"},{"title":"rkv87r – rklib","text":"interface Calls interface~~rkv87r~~CallsGraph interface~rkv87r rklib_module::rkv87r_class%rkv87r proc~rkv87r rklib_variable_steps::rkv87r interface~rkv87r->proc~rkv87r f f proc~rkv87r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv87r.html"},{"title":"rkev87 – rklib","text":"interface Calls interface~~rkev87~~CallsGraph interface~rkev87 rklib_module::rkev87_class%rkev87 proc~rkev87 rklib_variable_steps::rkev87 interface~rkev87->proc~rkev87 f f proc~rkev87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkev87.html"},{"title":"rkk87 – rklib","text":"interface Calls interface~~rkk87~~CallsGraph interface~rkk87 rklib_module::rkk87_class%rkk87 proc~rkk87 rklib_variable_steps::rkk87 interface~rkk87->proc~rkk87 f f proc~rkk87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkk87.html"},{"title":"rkf89 – rklib","text":"interface Calls interface~~rkf89~~CallsGraph interface~rkf89 rklib_module::rkf89_class%rkf89 proc~rkf89 rklib_variable_steps::rkf89 interface~rkf89->proc~rkf89 f f proc~rkf89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf89.html"},{"title":"rkv89 – rklib","text":"interface Calls interface~~rkv89~~CallsGraph interface~rkv89 rklib_module::rkv89_class%rkv89 proc~rkv89 rklib_variable_steps::rkv89 interface~rkv89->proc~rkv89 f f proc~rkv89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv89.html"},{"title":"rkt98a – rklib","text":"interface Calls interface~~rkt98a~~CallsGraph interface~rkt98a rklib_module::rkt98a_class%rkt98a proc~rkt98a rklib_variable_steps::rkt98a interface~rkt98a->proc~rkt98a f f proc~rkt98a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkt98a.html"},{"title":"rkv98e – rklib","text":"interface Calls interface~~rkv98e~~CallsGraph interface~rkv98e rklib_module::rkv98e_class%rkv98e proc~rkv98e rklib_variable_steps::rkv98e interface~rkv98e->proc~rkv98e f f proc~rkv98e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv98e.html"},{"title":"rkv98r – rklib","text":"interface Calls interface~~rkv98r~~CallsGraph interface~rkv98r rklib_module::rkv98r_class%rkv98r proc~rkv98r rklib_variable_steps::rkv98r interface~rkv98r->proc~rkv98r f f proc~rkv98r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkv98r.html"},{"title":"rks98 – rklib","text":"interface Calls interface~~rks98~~CallsGraph interface~rks98 rklib_module::rks98_class%rks98 proc~rks98 rklib_variable_steps::rks98 interface~rks98->proc~rks98 f f proc~rks98->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks98.html"},{"title":"rkf108 – rklib","text":"interface Calls interface~~rkf108~~CallsGraph interface~rkf108 rklib_module::rkf108_class%rkf108 proc~rkf108 rklib_variable_steps::rkf108 interface~rkf108->proc~rkf108 f f proc~rkf108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf108.html"},{"title":"rkc108 – rklib","text":"interface Calls interface~~rkc108~~CallsGraph interface~rkc108 rklib_module::rkc108_class%rkc108 proc~rkc108 rklib_variable_steps::rkc108 interface~rkc108->proc~rkc108 f f proc~rkc108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkc108.html"},{"title":"rkb109 – rklib","text":"interface Calls interface~~rkb109~~CallsGraph interface~rkb109 rklib_module::rkb109_class%rkb109 proc~rkb109 rklib_variable_steps::rkb109 interface~rkb109->proc~rkb109 f f proc~rkb109->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkb109.html"},{"title":"rks1110a – rklib","text":"interface Calls interface~~rks1110a~~CallsGraph interface~rks1110a rklib_module::rks1110a_class%rks1110a proc~rks1110a rklib_variable_steps::rks1110a interface~rks1110a->proc~rks1110a f f proc~rks1110a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rks1110a.html"},{"title":"rkf1210 – rklib","text":"interface Calls interface~~rkf1210~~CallsGraph interface~rkf1210 rklib_module::rkf1210_class%rkf1210 proc~rkf1210 rklib_variable_steps::rkf1210 interface~rkf1210->proc~rkf1210 f f proc~rkf1210->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf1210.html"},{"title":"rko129 – rklib","text":"interface Calls interface~~rko129~~CallsGraph interface~rko129 rklib_module::rko129_class%rko129 proc~rko129 rklib_variable_steps::rko129 interface~rko129->proc~rko129 f f proc~rko129->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rko129.html"},{"title":"rkf1412 – rklib","text":"interface Calls interface~~rkf1412~~CallsGraph interface~rkf1412 rklib_module::rkf1412_class%rkf1412 proc~rkf1412 rklib_variable_steps::rkf1412 interface~rkf1412->proc~rkf1412 f f proc~rkf1412->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"interface/rkf1412.html"},{"title":"fvpol – rklib","text":"subroutine fvpol(me, t, x, f) Right-hand side of van der Pol equation Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Contents Source Code fvpol Source Code subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol","tags":"","loc":"proc/fvpol.html"},{"title":"euler – rklib","text":"module procedure euler module subroutine euler(me, t, x, h, xf) Interface → Euler (1st order) integration method. Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~euler~~CallsGraph proc~euler rklib_fixed_steps::euler f f proc~euler->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~euler~~CalledByGraph proc~euler rklib_fixed_steps::euler interface~euler rklib_module::euler_class%euler interface~euler->proc~euler Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/euler.html"},{"title":"midpoint – rklib","text":"module procedure midpoint module subroutine midpoint(me, t, x, h, xf) Interface → Midpoint (2nd order) integration method. Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~midpoint~~CallsGraph proc~midpoint rklib_fixed_steps::midpoint f f proc~midpoint->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~midpoint~~CalledByGraph proc~midpoint rklib_fixed_steps::midpoint interface~midpoint rklib_module::midpoint_class%midpoint interface~midpoint->proc~midpoint Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/midpoint.html"},{"title":"heun – rklib","text":"module procedure heun module subroutine heun(me, t, x, h, xf) Interface → Heun's (2nd order) integration method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~heun~~CallsGraph proc~heun rklib_fixed_steps::heun f f proc~heun->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~heun~~CalledByGraph proc~heun rklib_fixed_steps::heun interface~heun rklib_module::heun_class%heun interface~heun->proc~heun Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/heun.html"},{"title":"rkssp22 – rklib","text":"module procedure rkssp22 module subroutine rkssp22(me, t, x, h, xf) Interface → 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Reference C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory\n shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471.\n https://doi.org/10.1016/0021-9991(88)90177-5. Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp22~~CallsGraph proc~rkssp22 rklib_fixed_steps::rkssp22 f f proc~rkssp22->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp22~~CalledByGraph proc~rkssp22 rklib_fixed_steps::rkssp22 interface~rkssp22 rklib_module::rkssp22_class%rkssp22 interface~rkssp22->proc~rkssp22 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp22.html"},{"title":"rk3 – rklib","text":"module procedure rk3 module subroutine rk3(me, t, x, h, xf) Interface → 3rd order, 3 steps RK integration method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk3~~CallsGraph proc~rk3 rklib_fixed_steps::rk3 f f proc~rk3->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk3~~CalledByGraph proc~rk3 rklib_fixed_steps::rk3 interface~rk3 rklib_module::rk3_class%rk3 interface~rk3->proc~rk3 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk3.html"},{"title":"rkssp33 – rklib","text":"module procedure rkssp33 module subroutine rkssp33(me, t, x, h, xf) Interface → 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Reference C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory\n shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471.\n https://doi.org/10.1016/0021-9991(88)90177-5. Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp33~~CallsGraph proc~rkssp33 rklib_fixed_steps::rkssp33 f f proc~rkssp33->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp33~~CalledByGraph proc~rkssp33 rklib_fixed_steps::rkssp33 interface~rkssp33 rklib_module::rkssp33_class%rkssp33 interface~rkssp33->proc~rkssp33 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp33.html"},{"title":"rkssp53 – rklib","text":"module procedure rkssp53 module subroutine rkssp53(me, t, x, h, xf) Interface → 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. Reference Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta\n methods.\" Mathematics of Computation 75.253 (2006): 183-207.\n https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf Note the coefficients here are only 15 digits of precision. Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp53~~CallsGraph proc~rkssp53 rklib_fixed_steps::rkssp53 f f proc~rkssp53->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp53~~CalledByGraph proc~rkssp53 rklib_fixed_steps::rkssp53 interface~rkssp53 rklib_module::rkssp53_class%rkssp53 interface~rkssp53->proc~rkssp53 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp53.html"},{"title":"rk4 – rklib","text":"module procedure rk4 module subroutine rk4(me, t, x, h, xf) Interface → Take one Runge Kutta 4 integration step: t -> t+h (x -> xf) Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk4~~CallsGraph proc~rk4 rklib_fixed_steps::rk4 f f proc~rk4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk4~~CalledByGraph proc~rk4 rklib_fixed_steps::rk4 interface~rk4 rklib_module::rk4_class%rk4 interface~rk4->proc~rk4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk4.html"},{"title":"rks4 – rklib","text":"module procedure rks4 module subroutine rks4(me, t, x, h, xf) Interface → 4th order Runge Kutta Shanks (4 points) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rks4~~CallsGraph proc~rks4 rklib_fixed_steps::rks4 f f proc~rks4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks4~~CalledByGraph proc~rks4 rklib_fixed_steps::rks4 interface~rks4 rklib_module::rks4_class%rks4 interface~rks4->proc~rks4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks4.html"},{"title":"rkr4 – rklib","text":"module procedure rkr4 module subroutine rkr4(me, t, x, h, xf) Interface → Ralston 4th order method with minimum truncation error. Reference Ralston, Anthony (1962).\n \" Runge-Kutta Methods with Minimum Error Bounds \".\n Math. Comput. 16 (80): 431-437. Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkr4~~CallsGraph proc~rkr4 rklib_fixed_steps::rkr4 f f proc~rkr4->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkr4~~CalledByGraph proc~rkr4 rklib_fixed_steps::rkr4 interface~rkr4 rklib_module::rkr4_class%rkr4 interface~rkr4->proc~rkr4 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkr4.html"},{"title":"rkls44 – rklib","text":"module procedure rkls44 module subroutine rkls44(me, t, x, h, xf) Interface → 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). Reference Method: Jiang, Guang-Shan, and Chi-Wang Shu. \"Efficient implementation of weighted ENO\n schemes.\" Journal of computational physics 126.1 (1996): 202-228.\n https://ntrs.nasa.gov/api/citations/19960007052/downloads/19960007052.pdf Implementation: J. M. F. Donnert et al 2019 ApJS 241 23.\n https://iopscience.iop.org/article/10.3847/1538-4365/ab09fb Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkls44~~CallsGraph proc~rkls44 rklib_fixed_steps::rkls44 f f proc~rkls44->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkls44~~CalledByGraph proc~rkls44 rklib_fixed_steps::rkls44 interface~rkls44 rklib_module::rkls44_class%rkls44 interface~rkls44->proc~rkls44 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls44.html"},{"title":"rkssp54 – rklib","text":"module procedure rkssp54 module subroutine rkssp54(me, t, x, h, xf) Interface → 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. Reference Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta\n methods.\" Mathematics of Computation 75.253 (2006): 183-207.\n https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkssp54~~CallsGraph proc~rkssp54 rklib_fixed_steps::rkssp54 f f proc~rkssp54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp54~~CalledByGraph proc~rkssp54 rklib_fixed_steps::rkssp54 interface~rkssp54 rklib_module::rkssp54_class%rkssp54 interface~rkssp54->proc~rkssp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp54.html"},{"title":"rkls54 – rklib","text":"module procedure rkls54 module subroutine rkls54(me, t, x, h, xf) Interface → 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994).\n CFL<=0.32 Reference Carpenter, Mark H., and Christopher A. Kennedy. Fourth-order 2N-storage Runge-Kutta\n schemes. No. NASA-TM-109112. 1994.\n https://ntrs.nasa.gov/api/citations/19940028444/downloads/19940028444.pdf Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkls54~~CallsGraph proc~rkls54 rklib_fixed_steps::rkls54 f f proc~rkls54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkls54~~CalledByGraph proc~rkls54 rklib_fixed_steps::rkls54 interface~rkls54 rklib_module::rkls54_class%rkls54 interface~rkls54->proc~rkls54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls54.html"},{"title":"rks5 – rklib","text":"module procedure rks5 module subroutine rks5(me, t, x, h, xf) Interface → Runge Kutta Shanks (5th order) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rks5~~CallsGraph proc~rks5 rklib_fixed_steps::rks5 f f proc~rks5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks5~~CalledByGraph proc~rks5 rklib_fixed_steps::rks5 interface~rks5 rklib_module::rks5_class%rks5 interface~rks5->proc~rks5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks5.html"},{"title":"rk5 – rklib","text":"module procedure rk5 module subroutine rk5(me, t, x, h, xf) Interface → Runge's 5th order method. Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk5~~CallsGraph proc~rk5 rklib_fixed_steps::rk5 f f proc~rk5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk5~~CalledByGraph proc~rk5 rklib_fixed_steps::rk5 interface~rk5 rklib_module::rk5_class%rk5 interface~rk5->proc~rk5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk5.html"},{"title":"rkc5 – rklib","text":"module procedure rkc5 module subroutine rkc5(me, t, x, h, xf) Interface → Cassity's Order 5 method Reference C.R. Cassity, Solutions of the fifth order Runge-Kutta equations,\n SIAM J. Numer. Anal., 3, (1966), pp. 598-606 Coefficients Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkc5~~CallsGraph proc~rkc5 rklib_fixed_steps::rkc5 f f proc~rkc5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc5~~CalledByGraph proc~rkc5 rklib_fixed_steps::rkc5 interface~rkc5 rklib_module::rkc5_class%rkc5 interface~rkc5->proc~rkc5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc5.html"},{"title":"rkl5 – rklib","text":"module procedure rkl5 module subroutine rkl5(me, t, x, h, xf) Interface → 5th order Lawson References An Order Five Runge Kutta Process with Extended Region of Stability,\n J. Douglas Lawson, Siam Journal on Numerical Analysis,\n Vol. 3, No. 4, (Dec., 1966) pages 593-597 Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkl5~~CallsGraph proc~rkl5 rklib_fixed_steps::rkl5 f f proc~rkl5->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkl5~~CalledByGraph proc~rkl5 rklib_fixed_steps::rkl5 interface~rkl5 rklib_module::rkl5_class%rkl5 interface~rkl5->proc~rkl5 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkl5.html"},{"title":"rklk5a – rklib","text":"module procedure rklk5a module subroutine rklk5a(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (1) References H.A.Luther and H.P.Konen,\n \"Some Fifth-Order Classical Runge Kutta Formulas\",\n Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rklk5a~~CallsGraph proc~rklk5a rklib_fixed_steps::rklk5a f f proc~rklk5a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rklk5a~~CalledByGraph proc~rklk5a rklib_fixed_steps::rklk5a interface~rklk5a rklib_module::rklk5a_class%rklk5a interface~rklk5a->proc~rklk5a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5a.html"},{"title":"rklk5b – rklib","text":"module procedure rklk5b module subroutine rklk5b(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (2) References H.A.Luther and H.P.Konen,\n \"Some Fifth-Order Classical Runge Kutta Formulas\",\n Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rklk5b~~CallsGraph proc~rklk5b rklib_fixed_steps::rklk5b f f proc~rklk5b->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rklk5b~~CalledByGraph proc~rklk5b rklib_fixed_steps::rklk5b interface~rklk5b rklib_module::rklk5b_class%rklk5b interface~rklk5b->proc~rklk5b Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5b.html"},{"title":"rkb6 – rklib","text":"module procedure rkb6 module subroutine rkb6(me, t, x, h, xf) Interface → Butcher's 6th order method. 7 function evaluations. References Butcher, J. (1964). On Runge-Kutta processes of high order.\n Journal of the Australian Mathematical Society, 4(2), 179-194. Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkb6~~CallsGraph proc~rkb6 rklib_fixed_steps::rkb6 f f proc~rkb6->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkb6~~CalledByGraph proc~rkb6 rklib_fixed_steps::rkb6 interface~rkb6 rklib_module::rkb6_class%rkb6 interface~rkb6->proc~rkb6 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb6.html"},{"title":"rk7 – rklib","text":"module procedure rk7 module subroutine rk7(me, t, x, h, xf) Interface → Take one Runge Kutta 7 integration step: t -> t+h (x -> xf) Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk7~~CallsGraph proc~rk7 rklib_fixed_steps::rk7 f f proc~rk7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk7~~CalledByGraph proc~rk7 rklib_fixed_steps::rk7 interface~rk7 rklib_module::rk7_class%rk7 interface~rk7->proc~rk7 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk7.html"},{"title":"rk8_10 – rklib","text":"module procedure rk8_10 module subroutine rk8_10(me, t, x, h, xf) Interface → Take one Runge Kutta 8 integration step: t -> t+h (x -> xf) This is Formula (8-10) from Reference [1]. Reference E. B. Shanks, \" Higher Order Approximations of Runge-Kutta Type \",\n NASA Technical Note, NASA TN D-2920, Sept. 1965. Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk8_10~~CallsGraph proc~rk8_10 rklib_fixed_steps::rk8_10 f f proc~rk8_10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk8_10~~CalledByGraph proc~rk8_10 rklib_fixed_steps::rk8_10 interface~rk8_10 rklib_module::rk8_10_class%rk8_10 interface~rk8_10->proc~rk8_10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_10.html"},{"title":"rk8_12 – rklib","text":"module procedure rk8_12 module subroutine rk8_12(me, t, x, h, xf) Interface → 8th order Shanks, 12 function evaluations. Reference E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\"\n Math. Comp. 20 (1966). Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rk8_12~~CallsGraph proc~rk8_12 rklib_fixed_steps::rk8_12 f f proc~rk8_12->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rk8_12~~CalledByGraph proc~rk8_12 rklib_fixed_steps::rk8_12 interface~rk8_12 rklib_module::rk8_12_class%rk8_12 interface~rk8_12->proc~rk8_12 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_12.html"},{"title":"rkcv8 – rklib","text":"module procedure rkcv8 module subroutine rkcv8(me, t, x, h, xf) Interface → Cooper-Verner 11 stage, 8th order Runge-Kutta method. Reference Some Explicit Runge-Kutta Methods of High Order, by G. J. Cooper and J. H. Verner,\n SIAM Journal on Numerical Analysis, Vol. 9, No. 3, (September 1972), pages 389 to 405 http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8b_1.pdf Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkcv8~~CallsGraph proc~rkcv8 rklib_fixed_steps::rkcv8 f f proc~rkcv8->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkcv8~~CalledByGraph proc~rkcv8 rklib_fixed_steps::rkcv8 interface~rkcv8 rklib_module::rkcv8_class%rkcv8 interface~rkcv8->proc~rkcv8 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkcv8.html"},{"title":"rkz10 – rklib","text":"module procedure rkz10 module subroutine rkz10(me, t, x, h, xf) Interface → Zhang 10th order Reference David K. Zhang, \"Discovering New Runge-Kutta Methods Using Unstructured Numerical Search\",\n Thesis, April 16, 2019 1911.00318.pdf Coefficients Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkz10~~CallsGraph proc~rkz10 rklib_fixed_steps::rkz10 f f proc~rkz10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkz10~~CalledByGraph proc~rkz10 rklib_fixed_steps::rkz10 interface~rkz10 rklib_module::rkz10_class%rkz10 interface~rkz10->proc~rkz10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkz10.html"},{"title":"rko10 – rklib","text":"module procedure rko10 module subroutine rko10(me, t, x, h, xf) Interface → Ono's 10th order method References Hiroshi Ono, \"A Runge-Kutta method of order 10 which minimizes truncation error\",\n The Japan Society for Industrial and Applied Mathematics,\n Vol. 13, No. 1, 2003, pp 35 - 44. Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rko10~~CallsGraph proc~rko10 rklib_fixed_steps::rko10 f f proc~rko10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rko10~~CalledByGraph proc~rko10 rklib_fixed_steps::rko10 interface~rko10 rklib_module::rko10_class%rko10 interface~rko10->proc~rko10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko10.html"},{"title":"rkh10 – rklib","text":"module procedure rkh10 module subroutine rkh10(me, t, x, h, xf) Interface → Hairer 10th order method. References Ernst Hairer, \"A Runge-Kutta Method of Order 10\"\n January 1978, IMA Journal of Applied Mathematics 21(1) Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h Calls proc~~rkh10~~CallsGraph proc~rkh10 rklib_fixed_steps::rkh10 f f proc~rkh10->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkh10~~CalledByGraph proc~rkh10 rklib_fixed_steps::rkh10 interface~rkh10 rklib_module::rkh10_class%rkh10 interface~rkh10->proc~rkh10 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkh10.html"},{"title":"euler_properties – rklib","text":"module procedure euler_properties pure module function euler_properties(me) result(p) Interface → Returns the properties of the euler method Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~euler_properties~~CalledByGraph proc~euler_properties rklib_fixed_properties::euler_properties interface~euler_properties rklib_module::euler_class%euler_properties interface~euler_properties->proc~euler_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/euler_properties.html"},{"title":"midpoint_properties – rklib","text":"module procedure midpoint_properties pure module function midpoint_properties(me) result(p) Interface → Returns the properties of the midpoint method Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~midpoint_properties~~CalledByGraph proc~midpoint_properties rklib_fixed_properties::midpoint_properties interface~midpoint_properties rklib_module::midpoint_class%midpoint_properties interface~midpoint_properties->proc~midpoint_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/midpoint_properties.html"},{"title":"heun_properties – rklib","text":"module procedure heun_properties pure module function heun_properties(me) result(p) Interface → Returns the properties of the heun method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~heun_properties~~CalledByGraph proc~heun_properties rklib_fixed_properties::heun_properties interface~heun_properties rklib_module::heun_class%heun_properties interface~heun_properties->proc~heun_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/heun_properties.html"},{"title":"rkssp22_properties – rklib","text":"module procedure rkssp22_properties pure module function rkssp22_properties(me) result(p) Interface → Returns the properties of the rkssp22 method Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp22_properties~~CalledByGraph proc~rkssp22_properties rklib_fixed_properties::rkssp22_properties interface~rkssp22_properties rklib_module::rkssp22_class%rkssp22_properties interface~rkssp22_properties->proc~rkssp22_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp22_properties.html"},{"title":"rk3_properties – rklib","text":"module procedure rk3_properties pure module function rk3_properties(me) result(p) Interface → Returns the properties of the rk3 method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk3_properties~~CalledByGraph proc~rk3_properties rklib_fixed_properties::rk3_properties interface~rk3_properties rklib_module::rk3_class%rk3_properties interface~rk3_properties->proc~rk3_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk3_properties.html"},{"title":"rkssp33_properties – rklib","text":"module procedure rkssp33_properties pure module function rkssp33_properties(me) result(p) Interface → Returns the properties of the rkssp33 method Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp33_properties~~CalledByGraph proc~rkssp33_properties rklib_fixed_properties::rkssp33_properties interface~rkssp33_properties rklib_module::rkssp33_class%rkssp33_properties interface~rkssp33_properties->proc~rkssp33_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp33_properties.html"},{"title":"rkssp53_properties – rklib","text":"module procedure rkssp53_properties pure module function rkssp53_properties(me) result(p) Interface → Returns the properties of the rkssp53 method Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp53_properties~~CalledByGraph proc~rkssp53_properties rklib_fixed_properties::rkssp53_properties interface~rkssp53_properties rklib_module::rkssp53_class%rkssp53_properties interface~rkssp53_properties->proc~rkssp53_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp53_properties.html"},{"title":"rk4_properties – rklib","text":"module procedure rk4_properties pure module function rk4_properties(me) result(p) Interface → Returns the properties of the rk4 method Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk4_properties~~CalledByGraph proc~rk4_properties rklib_fixed_properties::rk4_properties interface~rk4_properties rklib_module::rk4_class%rk4_properties interface~rk4_properties->proc~rk4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk4_properties.html"},{"title":"rks4_properties – rklib","text":"module procedure rks4_properties pure module function rks4_properties(me) result(p) Interface → Returns the properties of the rks4 method Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks4_properties~~CalledByGraph proc~rks4_properties rklib_fixed_properties::rks4_properties interface~rks4_properties rklib_module::rks4_class%rks4_properties interface~rks4_properties->proc~rks4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks4_properties.html"},{"title":"rkr4_properties – rklib","text":"module procedure rkr4_properties pure module function rkr4_properties(me) result(p) Interface → Returns the properties of the rkr4 method Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkr4_properties~~CalledByGraph proc~rkr4_properties rklib_fixed_properties::rkr4_properties interface~rkr4_properties rklib_module::rkr4_class%rkr4_properties interface~rkr4_properties->proc~rkr4_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkr4_properties.html"},{"title":"rkls44_properties – rklib","text":"module procedure rkls44_properties pure module function rkls44_properties(me) result(p) Interface → Returns the properties of the rkls44 method Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkls44_properties~~CalledByGraph proc~rkls44_properties rklib_fixed_properties::rkls44_properties interface~rkls44_properties rklib_module::rkls44_class%rkls44_properties interface~rkls44_properties->proc~rkls44_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls44_properties.html"},{"title":"rkls54_properties – rklib","text":"module procedure rkls54_properties pure module function rkls54_properties(me) result(p) Interface → Returns the properties of the rkls54 method Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkls54_properties~~CalledByGraph proc~rkls54_properties rklib_fixed_properties::rkls54_properties interface~rkls54_properties rklib_module::rkls54_class%rkls54_properties interface~rkls54_properties->proc~rkls54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkls54_properties.html"},{"title":"rkssp54_properties – rklib","text":"module procedure rkssp54_properties pure module function rkssp54_properties(me) result(p) Interface → Returns the properties of the rkssp54 method Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp54_properties~~CalledByGraph proc~rkssp54_properties rklib_fixed_properties::rkssp54_properties interface~rkssp54_properties rklib_module::rkssp54_class%rkssp54_properties interface~rkssp54_properties->proc~rkssp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp54_properties.html"},{"title":"rks5_properties – rklib","text":"module procedure rks5_properties pure module function rks5_properties(me) result(p) Interface → Returns the properties of the rks5 method Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks5_properties~~CalledByGraph proc~rks5_properties rklib_fixed_properties::rks5_properties interface~rks5_properties rklib_module::rks5_class%rks5_properties interface~rks5_properties->proc~rks5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks5_properties.html"},{"title":"rk5_properties – rklib","text":"module procedure rk5_properties pure module function rk5_properties(me) result(p) Interface → Returns the properties of the rk5 method Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk5_properties~~CalledByGraph proc~rk5_properties rklib_fixed_properties::rk5_properties interface~rk5_properties rklib_module::rk5_class%rk5_properties interface~rk5_properties->proc~rk5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk5_properties.html"},{"title":"rkc5_properties – rklib","text":"module procedure rkc5_properties pure module function rkc5_properties(me) result(p) Interface → Returns the properties of the rkc5 method Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc5_properties~~CalledByGraph proc~rkc5_properties rklib_fixed_properties::rkc5_properties interface~rkc5_properties rklib_module::rkc5_class%rkc5_properties interface~rkc5_properties->proc~rkc5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc5_properties.html"},{"title":"rkl5_properties – rklib","text":"module procedure rkl5_properties pure module function rkl5_properties(me) result(p) Interface → Returns the properties of the rkl5 method Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkl5_properties~~CalledByGraph proc~rkl5_properties rklib_fixed_properties::rkl5_properties interface~rkl5_properties rklib_module::rkl5_class%rkl5_properties interface~rkl5_properties->proc~rkl5_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkl5_properties.html"},{"title":"rklk5a_properties – rklib","text":"module procedure rklk5a_properties pure module function rklk5a_properties(me) result(p) Interface → Returns the properties of the rklk5a method Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rklk5a_properties~~CalledByGraph proc~rklk5a_properties rklib_fixed_properties::rklk5a_properties interface~rklk5a_properties rklib_module::rklk5a_class%rklk5a_properties interface~rklk5a_properties->proc~rklk5a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5a_properties.html"},{"title":"rklk5b_properties – rklib","text":"module procedure rklk5b_properties pure module function rklk5b_properties(me) result(p) Interface → Returns the properties of the rklk5b method Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rklk5b_properties~~CalledByGraph proc~rklk5b_properties rklib_fixed_properties::rklk5b_properties interface~rklk5b_properties rklib_module::rklk5b_class%rklk5b_properties interface~rklk5b_properties->proc~rklk5b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rklk5b_properties.html"},{"title":"rkb6_properties – rklib","text":"module procedure rkb6_properties pure module function rkb6_properties(me) result(p) Interface → Returns the properties of the rkb6 method Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkb6_properties~~CalledByGraph proc~rkb6_properties rklib_fixed_properties::rkb6_properties interface~rkb6_properties rklib_module::rkb6_class%rkb6_properties interface~rkb6_properties->proc~rkb6_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb6_properties.html"},{"title":"rk7_properties – rklib","text":"module procedure rk7_properties pure module function rk7_properties(me) result(p) Interface → Returns the properties of the rk7 method Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk7_properties~~CalledByGraph proc~rk7_properties rklib_fixed_properties::rk7_properties interface~rk7_properties rklib_module::rk7_class%rk7_properties interface~rk7_properties->proc~rk7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk7_properties.html"},{"title":"rk8_10_properties – rklib","text":"module procedure rk8_10_properties pure module function rk8_10_properties(me) result(p) Interface → Returns the properties of the rk8_10 method Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk8_10_properties~~CalledByGraph proc~rk8_10_properties rklib_fixed_properties::rk8_10_properties interface~rk8_10_properties rklib_module::rk8_10_class%rk8_10_properties interface~rk8_10_properties->proc~rk8_10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_10_properties.html"},{"title":"rkcv8_properties – rklib","text":"module procedure rkcv8_properties pure module function rkcv8_properties(me) result(p) Interface → Returns the properties of the rkcv8 method Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkcv8_properties~~CalledByGraph proc~rkcv8_properties rklib_fixed_properties::rkcv8_properties interface~rkcv8_properties rklib_module::rkcv8_class%rkcv8_properties interface~rkcv8_properties->proc~rkcv8_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkcv8_properties.html"},{"title":"rk8_12_properties – rklib","text":"module procedure rk8_12_properties pure module function rk8_12_properties(me) result(p) Interface → Returns the properties of the rk8_12 method Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rk8_12_properties~~CalledByGraph proc~rk8_12_properties rklib_fixed_properties::rk8_12_properties interface~rk8_12_properties rklib_module::rk8_12_class%rk8_12_properties interface~rk8_12_properties->proc~rk8_12_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rk8_12_properties.html"},{"title":"rkz10_properties – rklib","text":"module procedure rkz10_properties pure module function rkz10_properties(me) result(p) Interface → Returns the properties of the rkz10 method Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkz10_properties~~CalledByGraph proc~rkz10_properties rklib_fixed_properties::rkz10_properties interface~rkz10_properties rklib_module::rkz10_class%rkz10_properties interface~rkz10_properties->proc~rkz10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkz10_properties.html"},{"title":"rko10_properties – rklib","text":"module procedure rko10_properties pure module function rko10_properties(me) result(p) Interface → Returns the properties of the rko10 method Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rko10_properties~~CalledByGraph proc~rko10_properties rklib_fixed_properties::rko10_properties interface~rko10_properties rklib_module::rko10_class%rko10_properties interface~rko10_properties->proc~rko10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko10_properties.html"},{"title":"rkh10_properties – rklib","text":"module procedure rkh10_properties pure module function rkh10_properties(me) result(p) Interface → Returns the properties of the rkh10 method Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkh10_properties~~CalledByGraph proc~rkh10_properties rklib_fixed_properties::rkh10_properties interface~rkh10_properties rklib_module::rkh10_class%rkh10_properties interface~rkh10_properties->proc~rkh10_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkh10_properties.html"},{"title":"rkbs32_properties – rklib","text":"module procedure rkbs32_properties pure module function rkbs32_properties(me) result(p) Interface → Returns the properties of the rkbs32 method Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkbs32_properties~~CalledByGraph proc~rkbs32_properties rklib_variable_properties::rkbs32_properties interface~rkbs32_properties rklib_module::rkbs32_class%rkbs32_properties interface~rkbs32_properties->proc~rkbs32_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs32_properties.html"},{"title":"rkssp43_properties – rklib","text":"module procedure rkssp43_properties pure module function rkssp43_properties(me) result(p) Interface → Returns the properties of the rkssp43 method Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkssp43_properties~~CalledByGraph proc~rkssp43_properties rklib_variable_properties::rkssp43_properties interface~rkssp43_properties rklib_module::rkssp43_class%rkssp43_properties interface~rkssp43_properties->proc~rkssp43_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp43_properties.html"},{"title":"rkf45_properties – rklib","text":"module procedure rkf45_properties pure module function rkf45_properties(me) result(p) Interface → Returns the properties of the rkf45 method Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf45_properties~~CalledByGraph proc~rkf45_properties rklib_variable_properties::rkf45_properties interface~rkf45_properties rklib_module::rkf45_class%rkf45_properties interface~rkf45_properties->proc~rkf45_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf45_properties.html"},{"title":"rkck54_properties – rklib","text":"module procedure rkck54_properties pure module function rkck54_properties(me) result(p) Interface → Returns the properties of the rkck54 method Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkck54_properties~~CalledByGraph proc~rkck54_properties rklib_variable_properties::rkck54_properties interface~rkck54_properties rklib_module::rkck54_class%rkck54_properties interface~rkck54_properties->proc~rkck54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkck54_properties.html"},{"title":"rkdp54_properties – rklib","text":"module procedure rkdp54_properties pure module function rkdp54_properties(me) result(p) Interface → Returns the properties of the rkdp54 method Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp54_properties~~CalledByGraph proc~rkdp54_properties rklib_variable_properties::rkdp54_properties interface~rkdp54_properties rklib_module::rkdp54_class%rkdp54_properties interface~rkdp54_properties->proc~rkdp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp54_properties.html"},{"title":"rkt54_properties – rklib","text":"module procedure rkt54_properties pure module function rkt54_properties(me) result(p) Interface → Returns the properties of the rkt54 method Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkt54_properties~~CalledByGraph proc~rkt54_properties rklib_variable_properties::rkt54_properties interface~rkt54_properties rklib_module::rkt54_class%rkt54_properties interface~rkt54_properties->proc~rkt54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt54_properties.html"},{"title":"rks54_properties – rklib","text":"module procedure rks54_properties pure module function rks54_properties(me) result(p) Interface → Returns the properties of the rks54 method Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks54_properties~~CalledByGraph proc~rks54_properties rklib_variable_properties::rks54_properties interface~rks54_properties rklib_module::rks54_class%rks54_properties interface~rks54_properties->proc~rks54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks54_properties.html"},{"title":"rkpp54_properties – rklib","text":"module procedure rkpp54_properties pure module function rkpp54_properties(me) result(p) Interface → Returns the properties of the rkpp54 method Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkpp54_properties~~CalledByGraph proc~rkpp54_properties rklib_variable_properties::rkpp54_properties interface~rkpp54_properties rklib_module::rkpp54_class%rkpp54_properties interface~rkpp54_properties->proc~rkpp54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54_properties.html"},{"title":"rkpp54b_properties – rklib","text":"module procedure rkpp54b_properties pure module function rkpp54b_properties(me) result(p) Interface → Returns the properties of the rkpp54b method Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkpp54b_properties~~CalledByGraph proc~rkpp54b_properties rklib_variable_properties::rkpp54b_properties interface~rkpp54b_properties rklib_module::rkpp54b_class%rkpp54b_properties interface~rkpp54b_properties->proc~rkpp54b_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54b_properties.html"},{"title":"rkbs54_properties – rklib","text":"module procedure rkbs54_properties pure module function rkbs54_properties(me) result(p) Interface → Returns the properties of the rkbs54 method Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkbs54_properties~~CalledByGraph proc~rkbs54_properties rklib_variable_properties::rkbs54_properties interface~rkbs54_properties rklib_module::rkbs54_class%rkbs54_properties interface~rkbs54_properties->proc~rkbs54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs54_properties.html"},{"title":"rkss54_properties – rklib","text":"module procedure rkss54_properties pure module function rkss54_properties(me) result(p) Interface → Returns the properties of the rkss54 method Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkss54_properties~~CalledByGraph proc~rkss54_properties rklib_variable_properties::rkss54_properties interface~rkss54_properties rklib_module::rkss54_class%rkss54_properties interface~rkss54_properties->proc~rkss54_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss54_properties.html"},{"title":"rkdp65_properties – rklib","text":"module procedure rkdp65_properties pure module function rkdp65_properties(me) result(p) Interface → Returns the properties of the rkdp65 method Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp65_properties~~CalledByGraph proc~rkdp65_properties rklib_variable_properties::rkdp65_properties interface~rkdp65_properties rklib_module::rkdp65_class%rkdp65_properties interface~rkdp65_properties->proc~rkdp65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp65_properties.html"},{"title":"rkc65_properties – rklib","text":"module procedure rkc65_properties pure module function rkc65_properties(me) result(p) Interface → Returns the properties of the rkc65 method Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc65_properties~~CalledByGraph proc~rkc65_properties rklib_variable_properties::rkc65_properties interface~rkc65_properties rklib_module::rkc65_class%rkc65_properties interface~rkc65_properties->proc~rkc65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc65_properties.html"},{"title":"rktp64_properties – rklib","text":"module procedure rktp64_properties pure module function rktp64_properties(me) result(p) Interface → Returns the properties of the rktp64 method Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp64_properties~~CalledByGraph proc~rktp64_properties rklib_variable_properties::rktp64_properties interface~rktp64_properties rklib_module::rktp64_class%rktp64_properties interface~rktp64_properties->proc~rktp64_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp64_properties.html"},{"title":"rkv65e_properties – rklib","text":"module procedure rkv65e_properties pure module function rkv65e_properties(me) result(p) Interface → Returns the properties of the rkv65e method Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65e_properties~~CalledByGraph proc~rkv65e_properties rklib_variable_properties::rkv65e_properties interface~rkv65e_properties rklib_module::rkv65e_class%rkv65e_properties interface~rkv65e_properties->proc~rkv65e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65e_properties.html"},{"title":"rkv65r_properties – rklib","text":"module procedure rkv65r_properties pure module function rkv65r_properties(me) result(p) Interface → Returns the properties of the rkv65r method Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65r_properties~~CalledByGraph proc~rkv65r_properties rklib_variable_properties::rkv65r_properties interface~rkv65r_properties rklib_module::rkv65r_class%rkv65r_properties interface~rkv65r_properties->proc~rkv65r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65r_properties.html"},{"title":"rkv65_properties – rklib","text":"module procedure rkv65_properties pure module function rkv65_properties(me) result(p) Interface → Returns the properties of the rkv65 method Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv65_properties~~CalledByGraph proc~rkv65_properties rklib_variable_properties::rkv65_properties interface~rkv65_properties rklib_module::rkv65_class%rkv65_properties interface~rkv65_properties->proc~rkv65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65_properties.html"},{"title":"dverk65_properties – rklib","text":"module procedure dverk65_properties pure module function dverk65_properties(me) result(p) Interface → Returns the properties of the dverk65 method Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~dverk65_properties~~CalledByGraph proc~dverk65_properties rklib_variable_properties::dverk65_properties interface~dverk65_properties rklib_module::dverk65_class%dverk65_properties interface~dverk65_properties->proc~dverk65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk65_properties.html"},{"title":"rktf65_properties – rklib","text":"module procedure rktf65_properties pure module function rktf65_properties(me) result(p) Interface → Returns the properties of the rktf65 method Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktf65_properties~~CalledByGraph proc~rktf65_properties rklib_variable_properties::rktf65_properties interface~rktf65_properties rklib_module::rktf65_class%rktf65_properties interface~rktf65_properties->proc~rktf65_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktf65_properties.html"},{"title":"rktp75_properties – rklib","text":"module procedure rktp75_properties pure module function rktp75_properties(me) result(p) Interface → Returns the properties of the rktp75 method Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp75_properties~~CalledByGraph proc~rktp75_properties rklib_variable_properties::rktp75_properties interface~rktp75_properties rklib_module::rktp75_class%rktp75_properties interface~rktp75_properties->proc~rktp75_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp75_properties.html"},{"title":"rktmy7_properties – rklib","text":"module procedure rktmy7_properties pure module function rktmy7_properties(me) result(p) Interface → Returns the properties of the rktmy7 method Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktmy7_properties~~CalledByGraph proc~rktmy7_properties rklib_variable_properties::rktmy7_properties interface~rktmy7_properties rklib_module::rktmy7_class%rktmy7_properties interface~rktmy7_properties->proc~rktmy7_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7_properties.html"},{"title":"rktmy7s_properties – rklib","text":"module procedure rktmy7s_properties pure module function rktmy7s_properties(me) result(p) Interface → Returns the properties of the rktmy7s method Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktmy7s_properties~~CalledByGraph proc~rktmy7s_properties rklib_variable_properties::rktmy7s_properties interface~rktmy7s_properties rklib_module::rktmy7s_class%rktmy7s_properties interface~rktmy7s_properties->proc~rktmy7s_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7s_properties.html"},{"title":"rkv76e_properties – rklib","text":"module procedure rkv76e_properties pure module function rkv76e_properties(me) result(p) Interface → Returns the properties of the rkv76e method Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv76e_properties~~CalledByGraph proc~rkv76e_properties rklib_variable_properties::rkv76e_properties interface~rkv76e_properties rklib_module::rkv76e_class%rkv76e_properties interface~rkv76e_properties->proc~rkv76e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76e_properties.html"},{"title":"rkv76r_properties – rklib","text":"module procedure rkv76r_properties pure module function rkv76r_properties(me) result(p) Interface → Returns the properties of the rkv76r method Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv76r_properties~~CalledByGraph proc~rkv76r_properties rklib_variable_properties::rkv76r_properties interface~rkv76r_properties rklib_module::rkv76r_class%rkv76r_properties interface~rkv76r_properties->proc~rkv76r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76r_properties.html"},{"title":"rkss76_properties – rklib","text":"module procedure rkss76_properties pure module function rkss76_properties(me) result(p) Interface → Returns the properties of the rkss76 method Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkss76_properties~~CalledByGraph proc~rkss76_properties rklib_variable_properties::rkss76_properties interface~rkss76_properties rklib_module::rkss76_class%rkss76_properties interface~rkss76_properties->proc~rkss76_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss76_properties.html"},{"title":"rkf78_properties – rklib","text":"module procedure rkf78_properties pure module function rkf78_properties(me) result(p) Interface → Returns the properties of the rkf78 method Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf78_properties~~CalledByGraph proc~rkf78_properties rklib_variable_properties::rkf78_properties interface~rkf78_properties rklib_module::rkf78_class%rkf78_properties interface~rkf78_properties->proc~rkf78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf78_properties.html"},{"title":"rkv78_properties – rklib","text":"module procedure rkv78_properties pure module function rkv78_properties(me) result(p) Interface → Returns the properties of the rkv78 method Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv78_properties~~CalledByGraph proc~rkv78_properties rklib_variable_properties::rkv78_properties interface~rkv78_properties rklib_module::rkv78_class%rkv78_properties interface~rkv78_properties->proc~rkv78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv78_properties.html"},{"title":"dverk78_properties – rklib","text":"module procedure dverk78_properties pure module function dverk78_properties(me) result(p) Interface → Returns the properties of the dverk78 method Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~dverk78_properties~~CalledByGraph proc~dverk78_properties rklib_variable_properties::dverk78_properties interface~dverk78_properties rklib_module::dverk78_class%dverk78_properties interface~dverk78_properties->proc~dverk78_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk78_properties.html"},{"title":"rkdp85_properties – rklib","text":"module procedure rkdp85_properties pure module function rkdp85_properties(me) result(p) Interface → Returns the properties of the rkdp85 method Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp85_properties~~CalledByGraph proc~rkdp85_properties rklib_variable_properties::rkdp85_properties interface~rkdp85_properties rklib_module::rkdp85_class%rkdp85_properties interface~rkdp85_properties->proc~rkdp85_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp85_properties.html"},{"title":"rktp86_properties – rklib","text":"module procedure rktp86_properties pure module function rktp86_properties(me) result(p) Interface → Returns the properties of the rktp86 method Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rktp86_properties~~CalledByGraph proc~rktp86_properties rklib_variable_properties::rktp86_properties interface~rktp86_properties rklib_module::rktp86_class%rktp86_properties interface~rktp86_properties->proc~rktp86_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp86_properties.html"},{"title":"rkdp87_properties – rklib","text":"module procedure rkdp87_properties pure module function rkdp87_properties(me) result(p) Interface → Returns the properties of the rkdp87 method Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkdp87_properties~~CalledByGraph proc~rkdp87_properties rklib_variable_properties::rkdp87_properties interface~rkdp87_properties rklib_module::rkdp87_class%rkdp87_properties interface~rkdp87_properties->proc~rkdp87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp87_properties.html"},{"title":"rkv87e_properties – rklib","text":"module procedure rkv87e_properties pure module function rkv87e_properties(me) result(p) Interface → Returns the properties of the rkv87e method Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv87e_properties~~CalledByGraph proc~rkv87e_properties rklib_variable_properties::rkv87e_properties interface~rkv87e_properties rklib_module::rkv87e_class%rkv87e_properties interface~rkv87e_properties->proc~rkv87e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87e_properties.html"},{"title":"rkv87r_properties – rklib","text":"module procedure rkv87r_properties pure module function rkv87r_properties(me) result(p) Interface → Returns the properties of the rkv87r method Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv87r_properties~~CalledByGraph proc~rkv87r_properties rklib_variable_properties::rkv87r_properties interface~rkv87r_properties rklib_module::rkv87r_class%rkv87r_properties interface~rkv87r_properties->proc~rkv87r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87r_properties.html"},{"title":"rkev87_properties – rklib","text":"module procedure rkev87_properties pure module function rkev87_properties(me) result(p) Interface → Returns the properties of the rkev87 method Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkev87_properties~~CalledByGraph proc~rkev87_properties rklib_variable_properties::rkev87_properties interface~rkev87_properties rklib_module::rkev87_class%rkev87_properties interface~rkev87_properties->proc~rkev87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkev87_properties.html"},{"title":"rkk87_properties – rklib","text":"module procedure rkk87_properties pure module function rkk87_properties(me) result(p) Interface → Returns the properties of the rkk87 method Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkk87_properties~~CalledByGraph proc~rkk87_properties rklib_variable_properties::rkk87_properties interface~rkk87_properties rklib_module::rkk87_class%rkk87_properties interface~rkk87_properties->proc~rkk87_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkk87_properties.html"},{"title":"rkf89_properties – rklib","text":"module procedure rkf89_properties pure module function rkf89_properties(me) result(p) Interface → Returns the properties of the rkf89 method Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf89_properties~~CalledByGraph proc~rkf89_properties rklib_variable_properties::rkf89_properties interface~rkf89_properties rklib_module::rkf89_class%rkf89_properties interface~rkf89_properties->proc~rkf89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf89_properties.html"},{"title":"rkv89_properties – rklib","text":"module procedure rkv89_properties pure module function rkv89_properties(me) result(p) Interface → Returns the properties of the rkv89 method Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv89_properties~~CalledByGraph proc~rkv89_properties rklib_variable_properties::rkv89_properties interface~rkv89_properties rklib_module::rkv89_class%rkv89_properties interface~rkv89_properties->proc~rkv89_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv89_properties.html"},{"title":"rkt98a_properties – rklib","text":"module procedure rkt98a_properties pure module function rkt98a_properties(me) result(p) Interface → Returns the properties of the rkt98a method Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkt98a_properties~~CalledByGraph proc~rkt98a_properties rklib_variable_properties::rkt98a_properties interface~rkt98a_properties rklib_module::rkt98a_class%rkt98a_properties interface~rkt98a_properties->proc~rkt98a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt98a_properties.html"},{"title":"rkv98e_properties – rklib","text":"module procedure rkv98e_properties pure module function rkv98e_properties(me) result(p) Interface → Returns the properties of the rkv98e method Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv98e_properties~~CalledByGraph proc~rkv98e_properties rklib_variable_properties::rkv98e_properties interface~rkv98e_properties rklib_module::rkv98e_class%rkv98e_properties interface~rkv98e_properties->proc~rkv98e_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98e_properties.html"},{"title":"rkv98r_properties – rklib","text":"module procedure rkv98r_properties pure module function rkv98r_properties(me) result(p) Interface → Returns the properties of the rkv98r method Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkv98r_properties~~CalledByGraph proc~rkv98r_properties rklib_variable_properties::rkv98r_properties interface~rkv98r_properties rklib_module::rkv98r_class%rkv98r_properties interface~rkv98r_properties->proc~rkv98r_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98r_properties.html"},{"title":"rks98_properties – rklib","text":"module procedure rks98_properties pure module function rks98_properties(me) result(p) Interface → Returns the properties of the rks98 method Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks98_properties~~CalledByGraph proc~rks98_properties rklib_variable_properties::rks98_properties interface~rks98_properties rklib_module::rks98_class%rks98_properties interface~rks98_properties->proc~rks98_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks98_properties.html"},{"title":"rkf108_properties – rklib","text":"module procedure rkf108_properties pure module function rkf108_properties(me) result(p) Interface → Returns the properties of the rkf108 method Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf108_properties~~CalledByGraph proc~rkf108_properties rklib_variable_properties::rkf108_properties interface~rkf108_properties rklib_module::rkf108_class%rkf108_properties interface~rkf108_properties->proc~rkf108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf108_properties.html"},{"title":"rkc108_properties – rklib","text":"module procedure rkc108_properties pure module function rkc108_properties(me) result(p) Interface → Returns the properties of the rkc108 method Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkc108_properties~~CalledByGraph proc~rkc108_properties rklib_variable_properties::rkc108_properties interface~rkc108_properties rklib_module::rkc108_class%rkc108_properties interface~rkc108_properties->proc~rkc108_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc108_properties.html"},{"title":"rkb109_properties – rklib","text":"module procedure rkb109_properties pure module function rkb109_properties(me) result(p) Interface → Returns the properties of the rkb109 method Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkb109_properties~~CalledByGraph proc~rkb109_properties rklib_variable_properties::rkb109_properties interface~rkb109_properties rklib_module::rkb109_class%rkb109_properties interface~rkb109_properties->proc~rkb109_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb109_properties.html"},{"title":"rks1110a_properties – rklib","text":"module procedure rks1110a_properties pure module function rks1110a_properties(me) result(p) Interface → Returns the properties of the rks1110a method Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rks1110a_properties~~CalledByGraph proc~rks1110a_properties rklib_variable_properties::rks1110a_properties interface~rks1110a_properties rklib_module::rks1110a_class%rks1110a_properties interface~rks1110a_properties->proc~rks1110a_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks1110a_properties.html"},{"title":"rkf1210_properties – rklib","text":"module procedure rkf1210_properties pure module function rkf1210_properties(me) result(p) Interface → Returns the properties of the rkf1210 method Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf1210_properties~~CalledByGraph proc~rkf1210_properties rklib_variable_properties::rkf1210_properties interface~rkf1210_properties rklib_module::rkf1210_class%rkf1210_properties interface~rkf1210_properties->proc~rkf1210_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1210_properties.html"},{"title":"rko129_properties – rklib","text":"module procedure rko129_properties pure module function rko129_properties(me) result(p) Interface → Returns the properties of the rko129 method Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rko129_properties~~CalledByGraph proc~rko129_properties rklib_variable_properties::rko129_properties interface~rko129_properties rklib_module::rko129_class%rko129_properties interface~rko129_properties->proc~rko129_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko129_properties.html"},{"title":"rkf1412_properties – rklib","text":"module procedure rkf1412_properties pure module function rkf1412_properties(me) result(p) Interface → Returns the properties of the rkf1412 method Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method Called by proc~~rkf1412_properties~~CalledByGraph proc~rkf1412_properties rklib_variable_properties::rkf1412_properties interface~rkf1412_properties rklib_module::rkf1412_class%rkf1412_properties interface~rkf1412_properties->proc~rkf1412_properties Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1412_properties.html"},{"title":"rkbs32 – rklib","text":"module procedure rkbs32 module subroutine rkbs32(me, t, x, h, xf, xerr) Interface → Bogacki-Shampine 3(2) method Reference Bogacki, P and Shampine, L. F. (1989),\n \"A 3(2) pair of Runge-Kutta formulas\",\n Applied Mathematics Letters, 2 (4): 321-325 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkbs32~~CallsGraph proc~rkbs32 rklib_variable_steps::rkbs32 f f proc~rkbs32->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkbs32->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkbs32->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkbs32~~CalledByGraph proc~rkbs32 rklib_variable_steps::rkbs32 interface~rkbs32 rklib_module::rkbs32_class%rkbs32 interface~rkbs32->proc~rkbs32 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs32.html"},{"title":"rkssp43 – rklib","text":"module procedure rkssp43 module subroutine rkssp43(me, t, x, h, xf, xerr) Interface → 4-stage, 3rd order SSP Runge-Kutta method. Note On the current performance tests, this method shows 3rd order convergence, but its\n relative error is one order of magnitude higher than that obtained with other 3rd order\n methods. An implementation error cannot be excluded. References Main method: Kraaijevanger, Johannes Franciscus Bernardus Maria. \"Contractivity of\n runge-kutta methods.\" BIT Numerical Mathematics 31.3 (1991): 482-528. DOI: 10.1007/BF01933264 . Embedded method: Conde, Sidafa, Imre Fekete, and John N. Shadid. \"Embedded error\n estimation and adaptive step-size control for optimal explicit strong stability preserving\n Runge--Kutta methods.\" arXiv preprint arXiv:1806.08693 (2018). arXiv: 1806.08693 Implementation: Ranocha, Hendrik, et al. \"Optimized Runge-Kutta methods with automatic\n step size control for compressible computational fluid dynamics.\" Communications on Applied\n Mathematics and Computation 4.4 (2022): 1191-1228. arXiv:2104.06836 Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkssp43~~CallsGraph proc~rkssp43 rklib_variable_steps::rkssp43 f f proc~rkssp43->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkssp43~~CalledByGraph proc~rkssp43 rklib_variable_steps::rkssp43 interface~rkssp43 rklib_module::rkssp43_class%rkssp43 interface~rkssp43->proc~rkssp43 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkssp43.html"},{"title":"rkf45 – rklib","text":"module procedure rkf45 module subroutine rkf45(me, t, x, h, xf, xerr) Interface → Fehlberg's 4(5) method. This is Table III, RK4(5), Formula 2 in the reference. References E. Fehlberg, \"Low-order classical Runge-Kutta formulas with stepsize control and\n their application to some heat transfer problems\", NASA Technical Report R-315,\n July 1, 1969. Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf45~~CallsGraph proc~rkf45 rklib_variable_steps::rkf45 f f proc~rkf45->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf45~~CalledByGraph proc~rkf45 rklib_variable_steps::rkf45 interface~rkf45 rklib_module::rkf45_class%rkf45 interface~rkf45->proc~rkf45 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf45.html"},{"title":"rkck54 – rklib","text":"module procedure rkck54 module subroutine rkck54(me, t, x, h, xf, xerr) Interface → Runge Kutta Cash-Karp. Reference J. R. Cash, A. H. Karp. \"A variable order Runge-Kutta method\n for initial value problems with rapidly varying right-hand sides\",\n ACM Transactions on Mathematical Software 16: 201-222, 1990 Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkck54~~CallsGraph proc~rkck54 rklib_variable_steps::rkck54 f f proc~rkck54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkck54~~CalledByGraph proc~rkck54 rklib_variable_steps::rkck54 interface~rkck54 rklib_module::rkck54_class%rkck54 interface~rkck54->proc~rkck54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkck54.html"},{"title":"rkdp54 – rklib","text":"module procedure rkdp54 module subroutine rkdp54(me, t, x, h, xf, xerr) Interface → Dormand-Prince 5(4) method (RKDP or DOPRI) Reference Dormand, J. R.; Prince, P. J. (1980), \"A family of embedded Runge-Kutta formulae\",\n Journal of Computational and Applied Mathematics, 6 (1): 19-26 https://en.wikipedia.org/wiki/Dormand-Prince_method Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp54~~CallsGraph proc~rkdp54 rklib_variable_steps::rkdp54 f f proc~rkdp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkdp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkdp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp54~~CalledByGraph proc~rkdp54 rklib_variable_steps::rkdp54 interface~rkdp54 rklib_module::rkdp54_class%rkdp54 interface~rkdp54->proc~rkdp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp54.html"},{"title":"rkt54 – rklib","text":"module procedure rkt54 module subroutine rkt54(me, t, x, h, xf, xerr) Interface → Tsitouras 5(4) method Reference Ch. Tsitouras, \"Runge-Kutta pairs of order 5(4) satisfying only the\n first column simplifying assumption\", Computers & Mathematics with\n Applications, Vol. 62, No. 2, pp. 770 - 775, 2011. Higher-precision coefficients Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkt54~~CallsGraph proc~rkt54 rklib_variable_steps::rkt54 f f proc~rkt54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkt54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkt54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkt54~~CalledByGraph proc~rkt54 rklib_variable_steps::rkt54 interface~rkt54 rklib_module::rkt54_class%rkt54 interface~rkt54->proc~rkt54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt54.html"},{"title":"rks54 – rklib","text":"module procedure rks54 module subroutine rks54(me, t, x, h, xf, xerr) Interface → Stepanov 5(4) method. References Misha Stepanov, Calcolo volume 59, Article number: 41 (2022), Embedded (4,5) pairs of explicit 7-stage Runge-Kutta methods with FSAL property . arxiv (see Table 4) Note that there is also\n a 4th order continuously differential interpolant given. Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks54~~CallsGraph proc~rks54 rklib_variable_steps::rks54 f f proc~rks54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rks54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rks54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks54~~CalledByGraph proc~rks54 rklib_variable_steps::rks54 interface~rks54 rklib_module::rks54_class%rks54 interface~rks54->proc~rks54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks54.html"},{"title":"rkpp54 – rklib","text":"module procedure rkpp54 module subroutine rkpp54(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) Reference S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\",\n Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkpp54~~CallsGraph proc~rkpp54 rklib_variable_steps::rkpp54 f f proc~rkpp54->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkpp54~~CalledByGraph proc~rkpp54 rklib_variable_steps::rkpp54 interface~rkpp54 rklib_module::rkpp54_class%rkpp54 interface~rkpp54->proc~rkpp54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54.html"},{"title":"rkpp54b – rklib","text":"module procedure rkpp54b module subroutine rkpp54b(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). Reference S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\",\n Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkpp54b~~CallsGraph proc~rkpp54b rklib_variable_steps::rkpp54b f f proc~rkpp54b->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkpp54b->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkpp54b->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkpp54b~~CalledByGraph proc~rkpp54b rklib_variable_steps::rkpp54b interface~rkpp54b rklib_module::rkpp54b_class%rkpp54b interface~rkpp54b->proc~rkpp54b Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkpp54b.html"},{"title":"rkbs54 – rklib","text":"module procedure rkbs54 module subroutine rkbs54(me, t, x, h, xf, xerr) Interface → Bogacki & Shampine 5(4) Reference P. Bogacki & L.F. Shampine, \"An efficient Runge-Kutta (4,5) pair\"\n Computers & Mathematics with Applications,\n Volume 32, Issue 6, September 1996, Pages 15-28 Coefficients This pair is in rksuite ( METHD = 2 ) Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkbs54~~CallsGraph proc~rkbs54 rklib_variable_steps::rkbs54 f f proc~rkbs54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkbs54~~CalledByGraph proc~rkbs54 rklib_variable_steps::rkbs54 interface~rkbs54 rklib_module::rkbs54_class%rkbs54 interface~rkbs54->proc~rkbs54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkbs54.html"},{"title":"rkss54 – rklib","text":"module procedure rkss54 module subroutine rkss54(me, t, x, h, xf, xerr) Interface → Sharp & Smart 5(4) method. Reference P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\",\n Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkss54~~CallsGraph proc~rkss54 rklib_variable_steps::rkss54 f f proc~rkss54->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkss54~~CalledByGraph proc~rkss54 rklib_variable_steps::rkss54 interface~rkss54 rklib_module::rkss54_class%rkss54 interface~rkss54->proc~rkss54 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss54.html"},{"title":"rkdp65 – rklib","text":"module procedure rkdp65 module subroutine rkdp65(me, t, x, h, xf, xerr) Interface → Dormand-Prince 6(5) method.\n This is RK6(5)8M from the reference. Reference P.J. Prince, J.R. Dormand, \"High order embedded Runge-Kutta formulae\",\n Journal of Computational and Applied Mathematics,\n Volume 7, Issue 1, March 1981, Pages 67-75. Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp65~~CallsGraph proc~rkdp65 rklib_variable_steps::rkdp65 f f proc~rkdp65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp65~~CalledByGraph proc~rkdp65 rklib_variable_steps::rkdp65 interface~rkdp65 rklib_module::rkdp65_class%rkdp65 interface~rkdp65->proc~rkdp65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp65.html"},{"title":"rkc65 – rklib","text":"module procedure rkc65 module subroutine rkc65(me, t, x, h, xf, xerr) Interface → Calvo 6(5) method. Reference M. Calvo, J.I. Montijano, L. Randez,\n \"A new embedded pair of Runge-Kutta formulas of orders 5 and 6\",\n Computers & Mathematics with Applications, Volume 20, Issue 1, 1990, Pages 15-24 Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkc65~~CallsGraph proc~rkc65 rklib_variable_steps::rkc65 f f proc~rkc65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc65~~CalledByGraph proc~rkc65 rklib_variable_steps::rkc65 interface~rkc65 rklib_module::rkc65_class%rkc65 interface~rkc65->proc~rkc65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc65.html"},{"title":"rkv65e – rklib","text":"module procedure rkv65e module subroutine rkv65e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. Reference J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\",\n Annals of Num. Math 1 1994, 225-244. Jim Verner's Refuge for Runge-Kutta Pairs Rational coefficients Floating point coefficients Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65e~~CallsGraph proc~rkv65e rklib_variable_steps::rkv65e f f proc~rkv65e->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65e->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65e->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65e~~CalledByGraph proc~rkv65e rklib_variable_steps::rkv65e interface~rkv65e rklib_module::rkv65e_class%rkv65e interface~rkv65e->proc~rkv65e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65e.html"},{"title":"rktf65 – rklib","text":"module procedure rktf65 module subroutine rktf65(me, t, x, h, xf, xerr) Interface → Tsitouras & Famelis Runge-Kutta 6(5) method. Reference Ch. Tsitouras and I. Th. Famelis, Phase-Fitted modified Runge-Kutta pairs of orders 6(5) ,\n ICNAAM 2006, Crete, 2006. More precise rational coefficients Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktf65~~CallsGraph proc~rktf65 rklib_variable_steps::rktf65 f f proc~rktf65->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rktf65->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rktf65->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktf65~~CalledByGraph proc~rktf65 rklib_variable_steps::rktf65 interface~rktf65 rklib_module::rktf65_class%rktf65 interface~rktf65->proc~rktf65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktf65.html"},{"title":"rkv65r – rklib","text":"module procedure rkv65r module subroutine rkv65r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. Reference J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\",\n Annals of Num. Math 1 1994, 225-244. Jim Verner's Refuge for Runge-Kutta Pairs Rational coefficients Floating point coefficients Note This is a first-same-as-last (FSAL) step. Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65r~~CallsGraph proc~rkv65r rklib_variable_steps::rkv65r f f proc~rkv65r->f proc~check_fsal_cache rklib_module::rk_variable_step_fsal_class%check_fsal_cache proc~rkv65r->proc~check_fsal_cache proc~set_fsal_cache rklib_module::rk_variable_step_fsal_class%set_fsal_cache proc~rkv65r->proc~set_fsal_cache Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65r~~CalledByGraph proc~rkv65r rklib_variable_steps::rkv65r interface~rkv65r rklib_module::rkv65r_class%rkv65r interface~rkv65r->proc~rkv65r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65r.html"},{"title":"rkv65 – rklib","text":"module procedure rkv65 module subroutine rkv65(me, t, x, h, xf, xerr) Interface → Verner 6(5) method. References A Contrast of a New RK56 pair with DP56, by Jim Verner,\n Department of Mathematics. Simon Fraser University, Burnaby, Canada, 2006. Coefficients Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv65~~CallsGraph proc~rkv65 rklib_variable_steps::rkv65 f f proc~rkv65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv65~~CalledByGraph proc~rkv65 rklib_variable_steps::rkv65 interface~rkv65 rklib_module::rkv65_class%rkv65 interface~rkv65->proc~rkv65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv65.html"},{"title":"dverk65 – rklib","text":"module procedure dverk65 module subroutine dverk65(me, t, x, h, xf, xerr) Interface → Verner 6(5) 'DVERK' method. Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~dverk65~~CallsGraph proc~dverk65 rklib_variable_steps::dverk65 f f proc~dverk65->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~dverk65~~CalledByGraph proc~dverk65 rklib_variable_steps::dverk65 interface~dverk65 rklib_module::dverk65_class%dverk65 interface~dverk65->proc~dverk65 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk65.html"},{"title":"rkv76e – rklib","text":"module procedure rkv76e module subroutine rkv76e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv76e~~CallsGraph proc~rkv76e rklib_variable_steps::rkv76e f f proc~rkv76e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv76e~~CalledByGraph proc~rkv76e rklib_variable_steps::rkv76e interface~rkv76e rklib_module::rkv76e_class%rkv76e interface~rkv76e->proc~rkv76e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76e.html"},{"title":"rkv76r – rklib","text":"module procedure rkv76r module subroutine rkv76r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv76r~~CallsGraph proc~rkv76r rklib_variable_steps::rkv76r f f proc~rkv76r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv76r~~CalledByGraph proc~rkv76r rklib_variable_steps::rkv76r interface~rkv76r rklib_module::rkv76r_class%rkv76r interface~rkv76r->proc~rkv76r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv76r.html"},{"title":"rkss76 – rklib","text":"module procedure rkss76 module subroutine rkss76(me, t, x, h, xf, xerr) Interface → Sharp & Smart 7(6)) method. Reference P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\",\n Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkss76~~CallsGraph proc~rkss76 rklib_variable_steps::rkss76 f f proc~rkss76->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkss76~~CalledByGraph proc~rkss76 rklib_variable_steps::rkss76 interface~rkss76 rklib_module::rkss76_class%rkss76 interface~rkss76->proc~rkss76 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkss76.html"},{"title":"rkv87e – rklib","text":"module procedure rkv87e module subroutine rkv87e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv87e~~CallsGraph proc~rkv87e rklib_variable_steps::rkv87e f f proc~rkv87e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv87e~~CalledByGraph proc~rkv87e rklib_variable_steps::rkv87e interface~rkv87e rklib_module::rkv87e_class%rkv87e interface~rkv87e->proc~rkv87e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87e.html"},{"title":"rkv87r – rklib","text":"module procedure rkv87r module subroutine rkv87r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv87r~~CallsGraph proc~rkv87r rklib_variable_steps::rkv87r f f proc~rkv87r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv87r~~CalledByGraph proc~rkv87r rklib_variable_steps::rkv87r interface~rkv87r rklib_module::rkv87r_class%rkv87r interface~rkv87r->proc~rkv87r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv87r.html"},{"title":"rkk87 – rklib","text":"module procedure rkk87 module subroutine rkk87(me, t, x, h, xf, xerr) Interface → Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method References Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras, Runge-Kutta Embedded Methods of Orders 8(7) for Use in Quadruple Precision Computations ,\n Mathematics, Volume 10, Issue 18, 2022. Rational coefficients Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkk87~~CallsGraph proc~rkk87 rklib_variable_steps::rkk87 f f proc~rkk87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkk87~~CalledByGraph proc~rkk87 rklib_variable_steps::rkk87 interface~rkk87 rklib_module::rkk87_class%rkk87 interface~rkk87->proc~rkk87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkk87.html"},{"title":"rkv98e – rklib","text":"module procedure rkv98e module subroutine rkv98e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv98e~~CallsGraph proc~rkv98e rklib_variable_steps::rkv98e f f proc~rkv98e->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv98e~~CalledByGraph proc~rkv98e rklib_variable_steps::rkv98e interface~rkv98e rklib_module::rkv98e_class%rkv98e interface~rkv98e->proc~rkv98e Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98e.html"},{"title":"rkv98r – rklib","text":"module procedure rkv98r module subroutine rkv98r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. Reference J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\",\n SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) Jim Verner's Refuge for Runge-Kutta Pairs Coefficients Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv98r~~CallsGraph proc~rkv98r rklib_variable_steps::rkv98r f f proc~rkv98r->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv98r~~CalledByGraph proc~rkv98r rklib_variable_steps::rkv98r interface~rkv98r rklib_module::rkv98r_class%rkv98r interface~rkv98r->proc~rkv98r Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv98r.html"},{"title":"rktp64 – rklib","text":"module procedure rktp64 module subroutine rktp64(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW6(4) Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Rational coefficients (see rktp64.m ) Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp64~~CallsGraph proc~rktp64 rklib_variable_steps::rktp64 f f proc~rktp64->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp64~~CalledByGraph proc~rktp64 rklib_variable_steps::rktp64 interface~rktp64 rklib_module::rktp64_class%rktp64 interface~rktp64->proc~rktp64 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp64.html"},{"title":"rkf78 – rklib","text":"module procedure rkf78 module subroutine rkf78(me, t, x, h, xf, xerr) Interface → Fehlberg's 7(8) algorithm. Reference E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order\n Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 . Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf78~~CallsGraph proc~rkf78 rklib_variable_steps::rkf78 f f proc~rkf78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf78~~CalledByGraph proc~rkf78 rklib_variable_steps::rkf78 interface~rkf78 rklib_module::rkf78_class%rkf78 interface~rkf78->proc~rkf78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf78.html"},{"title":"rkdp87 – rklib","text":"module procedure rkdp87 module subroutine rkdp87(me, t, x, h, xf, xerr) Interface → Dormand-Prince RK8(7)13M method. Reference P.J. Prince and J.R. Dormand, J. Comp. Appl. Math.,7, pp. 67-75, 1981 rksuite_90 Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp87~~CallsGraph proc~rkdp87 rklib_variable_steps::rkdp87 f f proc~rkdp87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp87~~CalledByGraph proc~rkdp87 rklib_variable_steps::rkdp87 interface~rkdp87 rklib_module::rkdp87_class%rkdp87 interface~rkdp87->proc~rkdp87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp87.html"},{"title":"rkv78 – rklib","text":"module procedure rkv78 module subroutine rkv78(me, t, x, h, xf, xerr) Interface → Verner's 7(8) algorithm. Reference Mathematics Source Library Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv78~~CallsGraph proc~rkv78 rklib_variable_steps::rkv78 f f proc~rkv78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv78~~CalledByGraph proc~rkv78 rklib_variable_steps::rkv78 interface~rkv78 rklib_module::rkv78_class%rkv78 interface~rkv78->proc~rkv78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv78.html"},{"title":"dverk78 – rklib","text":"module procedure dverk78 module subroutine dverk78(me, t, x, h, xf, xerr) Interface → Verner's \"Maple\" (dverk78). Reference Coefficients Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~dverk78~~CallsGraph proc~dverk78 rklib_variable_steps::dverk78 f f proc~dverk78->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~dverk78~~CalledByGraph proc~dverk78 rklib_variable_steps::dverk78 interface~dverk78 rklib_module::dverk78_class%dverk78 interface~dverk78->proc~dverk78 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/dverk78.html"},{"title":"rktp75 – rklib","text":"module procedure rktp75 module subroutine rktp75(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW7(5) Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Rational coefficients (see rktp75.m ) Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp75~~CallsGraph proc~rktp75 rklib_variable_steps::rktp75 f f proc~rktp75->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp75~~CalledByGraph proc~rktp75 rklib_variable_steps::rktp75 interface~rktp75 rklib_module::rktp75_class%rktp75 interface~rktp75->proc~rktp75 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp75.html"},{"title":"rktmy7 – rklib","text":"module procedure rktmy7 module subroutine rktmy7(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) Reference M. Tanaka, S. Muramatsu and S. Yamashita,\n \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\",\n Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. Rational coefficients Tanyam7 Note The floating point coefficients here were generated from the rational ones from the 3rd reference. Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktmy7~~CallsGraph proc~rktmy7 rklib_variable_steps::rktmy7 f f proc~rktmy7->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktmy7~~CalledByGraph proc~rktmy7 rklib_variable_steps::rktmy7 interface~rktmy7 rklib_module::rktmy7_class%rktmy7 interface~rktmy7->proc~rktmy7 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7.html"},{"title":"rktmy7s – rklib","text":"module procedure rktmy7s module subroutine rktmy7s(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (stable alternate) Reference M. Tanaka, S. Muramatsu and S. Yamashita,\n \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\",\n Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. Rational coefficients Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktmy7s~~CallsGraph proc~rktmy7s rklib_variable_steps::rktmy7s f f proc~rktmy7s->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktmy7s~~CalledByGraph proc~rktmy7s rklib_variable_steps::rktmy7s interface~rktmy7s rklib_module::rktmy7s_class%rktmy7s interface~rktmy7s->proc~rktmy7s Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktmy7s.html"},{"title":"rkdp85 – rklib","text":"module procedure rkdp85 module subroutine rkdp85(me, t, x, h, xf, xerr) Interface → Dormand-Prince 8(5) References E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary\n Differential Equations I. Nonstiff Problems. 2nd edition.\n springer series in computational mathematics,\n springer-verlag (1993) Original DOP853 by Hairer Modernized DOP853 DP8ConstantCache Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkdp85~~CallsGraph proc~rkdp85 rklib_variable_steps::rkdp85 f f proc~rkdp85->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkdp85~~CalledByGraph proc~rkdp85 rklib_variable_steps::rkdp85 interface~rkdp85 rklib_module::rkdp85_class%rkdp85 interface~rkdp85->proc~rkdp85 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkdp85.html"},{"title":"rktp86 – rklib","text":"module procedure rktp86 module subroutine rktp86(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. Reference C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta\n methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. Matlab version Rational coefficients (see rktp86.m ) Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rktp86~~CallsGraph proc~rktp86 rklib_variable_steps::rktp86 f f proc~rktp86->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rktp86~~CalledByGraph proc~rktp86 rklib_variable_steps::rktp86 interface~rktp86 rklib_module::rktp86_class%rktp86 interface~rktp86->proc~rktp86 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rktp86.html"},{"title":"rkev87 – rklib","text":"module procedure rkev87 module subroutine rkev87(me, t, x, h, xf, xerr) Interface → Enright Verner 8(7) Reference W. H. Enright, \"The Relative Efficiency of Alternative Defect Control Schemes\n for High-Order Continuous Runge-Kutta Formulas\",\n SIAM Journal on Numerical Analysis, Vol. 30, No. 5. (Oct., 1993), pp. 1419-1445. Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkev87~~CallsGraph proc~rkev87 rklib_variable_steps::rkev87 f f proc~rkev87->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkev87~~CalledByGraph proc~rkev87 rklib_variable_steps::rkev87 interface~rkev87 rklib_module::rkev87_class%rkev87 interface~rkev87->proc~rkev87 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkev87.html"},{"title":"rkf89 – rklib","text":"module procedure rkf89 module subroutine rkf89(me, t, x, h, xf, xerr) Interface → Fehlberg 8(9) method. Reference E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order\n Runge-Kutta Formulas with Stepsize Control\", NASA TR R-2870 . Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf89~~CallsGraph proc~rkf89 rklib_variable_steps::rkf89 f f proc~rkf89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf89~~CalledByGraph proc~rkf89 rklib_variable_steps::rkf89 interface~rkf89 rklib_module::rkf89_class%rkf89 interface~rkf89->proc~rkf89 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf89.html"},{"title":"rkv89 – rklib","text":"module procedure rkv89 module subroutine rkv89(me, t, x, h, xf, xerr) Interface → Runge Kutta Verner 8(9) Reference J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the\n Local Truncation Error\", SIAM Journal on Numerical Analysis,\n 15(4), 772-790, 1978. Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkv89~~CallsGraph proc~rkv89 rklib_variable_steps::rkv89 f f proc~rkv89->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkv89~~CalledByGraph proc~rkv89 rklib_variable_steps::rkv89 interface~rkv89 rklib_module::rkv89_class%rkv89 interface~rkv89->proc~rkv89 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkv89.html"},{"title":"rkt98a – rklib","text":"module procedure rkt98a module subroutine rkt98a(me, t, x, h, xf, xerr) Interface → Tsitouras combined order 9(8) Runge-Kutta scheme A. Reference Ch. Tsitouras, \"Optimized explicit Runge-Kutta pairs of order 9(8)\",\n Applied Numerical Mathematics, 38 (2001) 123-134. Coefficients Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkt98a~~CallsGraph proc~rkt98a rklib_variable_steps::rkt98a f f proc~rkt98a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkt98a~~CalledByGraph proc~rkt98a rklib_variable_steps::rkt98a interface~rkt98a rklib_module::rkt98a_class%rkt98a interface~rkt98a->proc~rkt98a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkt98a.html"},{"title":"rks98 – rklib","text":"module procedure rks98 module subroutine rks98(me, t, x, h, xf, xerr) Interface → Sharp 9(8) Reference Philip W. Sharp, \"High order explicit Runge-Kutta pairs for ephemerides of the Solar System and the Moon\",\n Journal of Applied Mathematics & Decision Sciences, 4(2), 183-192 (2000), https://github.com/SciML/DiffEqDevTools.jl/blob/master/src/ode_tableaus.jl Note The floating point coefficients here were generated from the rational ones from the 2nd reference. Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks98~~CallsGraph proc~rks98 rklib_variable_steps::rks98 f f proc~rks98->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks98~~CalledByGraph proc~rks98 rklib_variable_steps::rks98 interface~rks98 rklib_module::rks98_class%rks98 interface~rks98->proc~rks98 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks98.html"},{"title":"rkf108 – rklib","text":"module procedure rkf108 module subroutine rkf108(me, t, x, h, xf, xerr) Interface → Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. Reference T. Feagin, \" A Tenth-Order Runge-Kutta Method with Error Estimate \", coefficient file Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf108~~CallsGraph proc~rkf108 rklib_variable_steps::rkf108 f f proc~rkf108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf108~~CalledByGraph proc~rkf108 rklib_variable_steps::rkf108 interface~rkf108 rklib_module::rkf108_class%rkf108 interface~rkf108->proc~rkf108 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf108.html"},{"title":"rkc108 – rklib","text":"module procedure rkc108 module subroutine rkc108(me, t, x, h, xf, xerr) Interface → A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme Reference A.R.Curtis, \"High-order Explicit Runge-Kutta Formulae, Their uses, and Limitations\",\n J. Inst. Maths Applics (1975) 16, 35-55. Rational coefficients Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkc108~~CallsGraph proc~rkc108 rklib_variable_steps::rkc108 f f proc~rkc108->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkc108~~CalledByGraph proc~rkc108 rklib_variable_steps::rkc108 interface~rkc108 rklib_module::rkc108_class%rkc108 interface~rkc108->proc~rkc108 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkc108.html"},{"title":"rkb109 – rklib","text":"module procedure rkb109 module subroutine rkb109(me, t, x, h, xf, xerr) Interface → Baker 10(9) method. Reference Tom Baker, University of Teeside, \"RK-Aid software: RK10921M\". Coefficients Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkb109~~CallsGraph proc~rkb109 rklib_variable_steps::rkb109 f f proc~rkb109->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkb109~~CalledByGraph proc~rkb109 rklib_variable_steps::rkb109 interface~rkb109 rklib_module::rkb109_class%rkb109 interface~rkb109->proc~rkb109 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkb109.html"},{"title":"rkf1210 – rklib","text":"module procedure rkf1210 module subroutine rkf1210(me, t, x, h, xf, xerr) Interface → Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. Reference coefficient file Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf1210~~CallsGraph proc~rkf1210 rklib_variable_steps::rkf1210 f f proc~rkf1210->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf1210~~CalledByGraph proc~rkf1210 rklib_variable_steps::rkf1210 interface~rkf1210 rklib_module::rkf1210_class%rkf1210 interface~rkf1210->proc~rkf1210 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1210.html"},{"title":"rkf1412 – rklib","text":"module procedure rkf1412 module subroutine rkf1412(me, t, x, h, xf, xerr) Interface → Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. Reference coefficient file Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rkf1412~~CallsGraph proc~rkf1412 rklib_variable_steps::rkf1412 f f proc~rkf1412->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rkf1412~~CalledByGraph proc~rkf1412 rklib_variable_steps::rkf1412 interface~rkf1412 rklib_module::rkf1412_class%rkf1412 interface~rkf1412->proc~rkf1412 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rkf1412.html"},{"title":"rko129 – rklib","text":"module procedure rko129 module subroutine rko129(me, t, x, h, xf, xerr) Interface → A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. Reference Hiroshi Ono, On the 25 stage 12th order explicit Runge-Kutta method,\n Transactions of the Japan Society for Industrial and applied Mathematics,\n Vol. 6, No. 3, (2006) pages 177 to 186. Rational coefficients Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rko129~~CallsGraph proc~rko129 rklib_variable_steps::rko129 f f proc~rko129->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rko129~~CalledByGraph proc~rko129 rklib_variable_steps::rko129 interface~rko129 rklib_module::rko129_class%rko129 interface~rko129->proc~rko129 Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rko129.html"},{"title":"rks1110a – rklib","text":"module procedure rks1110a module subroutine rks1110a(me, t, x, h, xf, xerr) Interface → Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme Reference Coefficients Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Calls proc~~rks1110a~~CallsGraph proc~rks1110a rklib_variable_steps::rks1110a f f proc~rks1110a->f Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Called by proc~~rks1110a~~CalledByGraph proc~rks1110a rklib_variable_steps::rks1110a interface~rks1110a rklib_module::rks1110a_class%rks1110a interface~rks1110a->proc~rks1110a Help × Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Contents","tags":"","loc":"proc/rks1110a.html"},{"title":"rklib_module – rklib","text":"Runge-Kutta integration. Note The default real kind ( wp ) can be\n changed using optional preprocessor flags.\n This library was built with real kind: real(kind=real64) [8 bytes] Uses root_module iso_fortran_env module~~rklib_module~~UsesGraph module~rklib_module rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Used by Descendants: rklib_fixed_properties rklib_fixed_steps rklib_variable_properties rklib_variable_steps module~~rklib_module~~UsedByGraph module~rklib_module rklib_module module~rklib_fixed_properties rklib_fixed_properties module~rklib_fixed_properties->module~rklib_module module~rklib_fixed_steps rklib_fixed_steps module~rklib_fixed_steps->module~rklib_module module~rklib_variable_properties rklib_variable_properties module~rklib_variable_properties->module~rklib_module module~rklib_variable_steps rklib_variable_steps module~rklib_variable_steps->module~rklib_module program~rklib_example rklib_example program~rklib_example->module~rklib_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Variables rk_module_rk wp zero max_error_len RKLIB_ERROR_TOO_MANY_STEPS RKLIB_ERROR_INVALID_RTOL_SIZE RKLIB_ERROR_INVALID_ATOL_SIZE RKLIB_ERROR_INVALID_H RKLIB_ERROR_USER_STOPPED RKLIB_ERROR_MIN_STEP_SIZE RKLIB_ERROR_TOO_MANY_REDUCTIONS RKLIB_ERROR_INVALID_HINIT_METHOD RKLIB_ERROR_G_NOT_ASSOCIATED RKLIB_ERROR_F_NOT_ASSOCIATED RKLIB_ERROR_NONE rklib_error_messages Interfaces euler_properties midpoint_properties heun_properties rkssp22_properties rk3_properties rkssp33_properties rkssp53_properties rk4_properties rks4_properties rkr4_properties rkls44_properties rkls54_properties rkssp54_properties rks5_properties rk5_properties rkc5_properties rkl5_properties rklk5a_properties rklk5b_properties rkb6_properties rk7_properties rk8_10_properties rkcv8_properties rk8_12_properties rkz10_properties rko10_properties rkh10_properties rkbs32_properties rkssp43_properties rkf45_properties rkck54_properties rkdp54_properties rkt54_properties rks54_properties rkpp54_properties rkpp54b_properties rkbs54_properties rkss54_properties rkdp65_properties rkc65_properties rktp64_properties rkv65e_properties rkv65r_properties rkv65_properties dverk65_properties rktf65_properties rktp75_properties rktmy7_properties rktmy7s_properties rkv76e_properties rkv76r_properties rkss76_properties rkf78_properties rkv78_properties dverk78_properties rkdp85_properties rktp86_properties rkdp87_properties rkv87e_properties rkv87r_properties rkev87_properties rkk87_properties rkf89_properties rkv89_properties rkt98a_properties rkv98e_properties rkv98r_properties rks98_properties rkf108_properties rkc108_properties rkb109_properties rks1110a_properties rkf1210_properties rko129_properties rkf1412_properties euler midpoint heun rkssp22 rk3 rkssp33 rkssp53 rk4 rks4 rkr4 rkls44 rkls54 rkssp54 rks5 rk5 rkc5 rkl5 rklk5a rklk5b rkb6 rk7 rk8_10 rkcv8 rk8_12 rkz10 rko10 rkh10 rkbs32 rkssp43 rkf45 rkck54 rkdp54 rkt54 rks54 rkpp54 rkpp54b rkbs54 rkss54 rkdp65 rkc65 rktp64 rkv65e rkv65r rkv65 dverk65 rktf65 rktp75 rktmy7 rktmy7s rkv76e rkv76r rkss76 rkf78 rkv78 dverk78 rkdp85 rktp86 rkdp87 rkv87e rkv87r rkev87 rkk87 rkf89 rkv89 rkt98a rkv98e rkv98r rks98 rkf108 rkc108 rkb109 rks1110a rkf1210 rko129 rkf1412 Abstract Interfaces norm_func properties_func begin_func deriv_func event_func report_func step_func_fixed step_func_variable Derived Types rklib_properties stepsize_class rk_class rk_fixed_step_class rk_variable_step_class rk_variable_step_fsal_class euler_class midpoint_class heun_class rkssp22_class rk3_class rkssp33_class rkssp53_class rk4_class rks4_class rkr4_class rkls44_class rkls54_class rkssp54_class rks5_class rk5_class rkc5_class rkl5_class rklk5a_class rklk5b_class rkb6_class rk7_class rk8_10_class rkcv8_class rk8_12_class rkz10_class rko10_class rkh10_class rkbs32_class rkssp43_class rkf45_class rkck54_class rkdp54_class rkt54_class rks54_class rkpp54_class rkpp54b_class rkbs54_class rkss54_class rkdp65_class rkc65_class rktp64_class rkv65e_class rkv65r_class rkv65_class dverk65_class rktf65_class rktp75_class rktmy7_class rktmy7s_class rkv76e_class rkv76r_class rkss76_class rkf78_class rkv78_class dverk78_class rkdp85_class rktp86_class rkdp87_class rkv87e_class rkv87r_class rkev87_class rkk87_class rkf89_class rkv89_class rkt98a_class rkv98e_class rkv98r_class rks98_class rkf108_class rkc108_class rkb109_class rks1110a_class rkf1210_class rko129_class rkf1412_class Functions order failed norm2_func maxval_func compute_initial_step hinit Subroutines clear_exception raise_exception destroy rk_class_stop rk_class_status export_point destroy_fsal_cache check_fsal_cache set_fsal_cache initialize_rk_class begin_integration_rk_class begin_integration_rk_fixed_step_class initialize_fixed_step integrate_fixed_step integrate_to_event_fixed_step stepsize_class_constructor destroy_stepsize_class compute_stepsize begin_integration_rk_variable_step_class initialize_variable_step info_variable_step integrate_variable_step integrate_to_event_variable_step hstart Variables Type Visibility Attributes Name Initial integer, public, parameter :: rk_module_rk = real64 real kind used by this module [8 bytes] integer, private, parameter :: wp = rk_module_rk local copy of rk_module_rk with a shorter name real(kind=wp), private, parameter :: zero = 0.0_wp integer, private, parameter :: max_error_len = 100 max size of error message strings integer, public, parameter :: RKLIB_ERROR_TOO_MANY_STEPS = -10 integer, public, parameter :: RKLIB_ERROR_INVALID_RTOL_SIZE = -9 integer, public, parameter :: RKLIB_ERROR_INVALID_ATOL_SIZE = -8 integer, public, parameter :: RKLIB_ERROR_INVALID_H = -7 integer, public, parameter :: RKLIB_ERROR_USER_STOPPED = -6 integer, public, parameter :: RKLIB_ERROR_MIN_STEP_SIZE = -5 integer, public, parameter :: RKLIB_ERROR_TOO_MANY_REDUCTIONS = -4 integer, public, parameter :: RKLIB_ERROR_INVALID_HINIT_METHOD = -3 integer, public, parameter :: RKLIB_ERROR_G_NOT_ASSOCIATED = -2 integer, public, parameter :: RKLIB_ERROR_F_NOT_ASSOCIATED = -1 integer, public, parameter :: RKLIB_ERROR_NONE = 0 character(len=max_error_len), private, parameter, dimension(RKLIB_ERROR_TOO_MANY_STEPS:RKLIB_ERROR_NONE) :: rklib_error_messages = ['Too many steps                              ', 'Invalid size for rtol array                 ', 'Invalid size for atol array                 ', 'Step size cannot be zero                    ', 'User stopped the integration                ', 'Minimum step size reached                   ', 'Too many attempts to reduce step size       ', 'Invalid initial step size estimation method ', 'The event procedure g is not associated     ', 'The function procedure f is not associated  ', 'Success                                     '] Status message strings that go with the status codes.\nThe index in this array is the istatus code. Interfaces interface private pure module function euler_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function midpoint_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function heun_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp22_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk3_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp33_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp53_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkr4_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkls44_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkls54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkl5_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rklk5a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rklk5b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkb6_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk8_10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkcv8_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rk8_12_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkz10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rko10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkh10_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkbs32_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkssp43_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf45_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkck54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkt54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkpp54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkpp54b_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkbs54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkss54_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp64_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function dverk65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktf65_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp75_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktmy7_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktmy7s_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv76e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv76r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkss76_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function dverk78_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp85_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rktp86_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkdp87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv87e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv87r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkev87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkk87_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv89_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkt98a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv98e_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkv98r_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks98_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkc108_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkb109_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rks1110a_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf1210_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rko129_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private pure module function rkf1412_properties(me) result(p) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method interface private module subroutine euler(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine midpoint(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine heun(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp22(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk3(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp33(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp53(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rks4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkr4(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkls44(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkls54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkssp54(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rks5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkc5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkl5(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rklk5a(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rklk5b(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkb6(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk7(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk8_10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkcv8(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rk8_12(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkz10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rko10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkh10(me, t, x, h, xf) Implementation → Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h interface private module subroutine rkbs32(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkssp43(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf45(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkck54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkt54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkpp54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkpp54b(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkbs54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkss54(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkc65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp64(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine dverk65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktf65(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp75(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktmy7(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktmy7s(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv76e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv76r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkss76(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine dverk78(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp85(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rktp86(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkdp87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv87e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv87r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkev87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkk87(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv89(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkt98a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv98e(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkv98r(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks98(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkc108(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkb109(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rks1110a(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf1210(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rko129(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x interface private module subroutine rkf1412(me, t, x, h, xf, xerr) Implementation → Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x Abstract Interfaces abstract interface private pure function norm_func(x) result(xmag) Vector norm function. Must return a value . Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x a vector Return Value real(kind=wp) the magnitude of the vector abstract interface private pure function properties_func(me) result(p) Returns the properties of the method. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method abstract interface private subroutine begin_func(me) routine called before integration begins\nto set up internal variables. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me abstract interface private subroutine deriv_func(me, t, x, xdot) derivative function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out), dimension(:) :: xdot derivative of state vector abstract interface private subroutine event_func(me, t, x, g) event function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector real(kind=wp), intent(out) :: g g(t,x). The goal is to stop the integration when g=0. abstract interface private subroutine report_func(me, t, x) report function Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t time real(kind=wp), intent(in), dimension(:) :: x state vector abstract interface private subroutine step_func_fixed(me, t, x, h, xf) rk step function for the fixed-step methods. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector abstract interface private subroutine step_func_variable(me, t, x, h, xf, xerr) rk step function for the variable-step methods. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state vector real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf final state vector real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate Derived Types type, public :: rklib_properties Properties of an RK method. Components Type Visibility Attributes Name Initial integer, public :: order = 0 order of the method integer, public :: number_of_stages = 0 number of stages logical, public :: fsal = .false. if it is a FSAL method logical, public :: low_storage = .false. if it is a LS method logical, public :: strong_stability_preserving = .false. if it is a SSP method integer, public :: number_of_registers = 0 number of f vectors used real(kind=wp), public :: cfl = zero Courant-Friedrichs-Lewy number character(len=:), public, allocatable :: short_name short version of the method name character(len=:), public, allocatable :: long_name longer description of the method type, public :: stepsize_class Algorithms for adjusting the step size for variable-step\nRunge-Kutta integrators. Components Type Visibility Attributes Name Initial logical, private :: fixed_step_mode = .false. if true, then the method runs in\nfixed step mode with not error estimation real(kind=wp), private :: hmax = 1.0e+6_wp maximum allowed step size real(kind=wp), private :: hmin = 1.0e-6_wp minimum allowed step size real(kind=wp), private :: hfactor_reject = 0.5_wp minimum allowed factor for decreasing step size after rejected step real(kind=wp), private :: hfactor_accept = 2.0_wp maximum allowed factor for increasing step size after accepted step integer, private :: accept_mode = 2 method to determine if step is accepted [1,2] integer, private :: max_attempts = 10000 maximum number of attempts to decrease step size before giving up logical, private :: relative_err = .false. to use tol*h in the hfactor equation real(kind=wp), private :: safety_factor = 0.9_wp for hfactor equation (>0) integer, private :: p_exponent_offset = 1 p + this value in the exponent (0 or 1) procedure( norm_func ), private, nopass, pointer :: norm => maxval_func routine for computing the norm of the state Type-Bound Procedures procedure\n , public\n :: initialize => stepsize_class_constructor Subroutine procedure\n , public\n :: compute_stepsize Subroutine procedure\n , public\n :: destroy => destroy_stepsize_class Subroutine type, public :: rk_class main integration class Components Type Visibility Attributes Name Initial integer, private :: istatus = 0 status code logical, private :: stopped = .false. if user has stopped the integration in f or report . integer, private :: num_steps = 0 number of accepted steps taken integer, private :: max_number_of_steps = huge(1) maximum number of steps to take integer, private :: report_rate = 1 how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. logical, private :: stop_on_errors = .false. if true, then errors will stop the program integer, private :: n = 0 user specified number of variables procedure( deriv_func ), private, pointer :: f => null() user-specified derivative function procedure( report_func ), private, pointer :: report => null() user-specified report function procedure( event_func ), private, pointer :: g => null() event function (stop when this is zero) type(root_method), private :: solver = root_method_brent the root solver method to use for even finding real(kind=wp), private, dimension(:,:), allocatable :: funcs matrix to store the function\nevalutaions in the step function.\nthis will be size ( n x number_of_registers ) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , private\n, :: init => initialize_rk_class Subroutine procedure\n , private\n, :: begin => begin_integration_rk_class Subroutine procedure\n , private\n, :: raise_exception Subroutine procedure\n , private\n, :: clear_exception Subroutine procedure\n , private\n, :: export_point Subroutine procedure\n(begin_func) , private\n :: begin_integration procedure\n(properties_func) , public\n :: properties type, public, extends( rk_class ) :: rk_fixed_step_class fixed step size class Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n(step_func_fixed) , private\n :: step the step routine for the rk method procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , private\n, :: begin_integration => begin_integration_rk_fixed_step_class Subroutine type, public, extends( rk_class ) :: rk_variable_step_class Main integration class for variable step size Runge-Kutta methods Components Type Visibility Attributes Name Initial type( stepsize_class ), private :: stepsize_method the method for varying the step size real(kind=wp), private, dimension(:), allocatable :: rtol relative tolerance ( size(n) ) real(kind=wp), private, dimension(:), allocatable :: atol absolute tolerance ( size(n) ) integer, private :: hinit_method = 1 if automatically computing the inital step size, which\nmethod to use. 1 = hstart , 2 = hinit . integer, private :: num_rejected_steps = 0 number of rejected steps real(kind=wp), private :: last_accepted_step_size = zero the last accepted step size dt from the integration\n(positive or negative) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n(step_func_variable) , private\n :: step the step routine for the rk method procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , private\n, :: hstart Subroutine for automatically computing the initial step size [this is from DDEABM] procedure\n , private\n, :: hinit Function for automatically computing the initial step size [this is from DOP853] procedure\n , private\n, :: begin_integration => begin_integration_rk_variable_step_class Subroutine procedure\n , private\n, :: compute_initial_step Function procedure\n , private\n, :: order Function returns p , the order of the method type, public, extends( rk_variable_step_class ) :: rk_variable_step_fsal_class a variable step method with the \"first same as last\" (FSAL) property.\nCache the last f and x vectors to use for the next step. Read more… Components Type Visibility Attributes Name Initial real(kind=wp), private, allocatable :: t_saved cached t real(kind=wp), private, dimension(:), allocatable :: x_saved cached x real(kind=wp), private, dimension(:), allocatable :: f_saved cached f Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n(properties_func) , public\n :: properties procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine type, public, extends( rk_fixed_step_class ) :: euler_class Euler Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => euler Interface procedure\n , public\n, :: properties => euler_properties Interface type, public, extends( rk_fixed_step_class ) :: midpoint_class Midpoint Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => midpoint Interface procedure\n , public\n, :: properties => midpoint_properties Interface type, public, extends( rk_fixed_step_class ) :: heun_class Heun Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => heun Interface procedure\n , public\n, :: properties => heun_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp22_class 2-stage, 2nd order TVD Runge-Kutta Shu-Osher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp22 Interface procedure\n , public\n, :: properties => rkssp22_properties Interface type, public, extends( rk_fixed_step_class ) :: rk3_class 3th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk3 Interface procedure\n , public\n, :: properties => rk3_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp33_class 3-stage, 3rd order TVD Runge-Kutta Shu-Osher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp33 Interface procedure\n , public\n, :: properties => rkssp33_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp53_class 5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp53 Interface procedure\n , public\n, :: properties => rkssp53_properties Interface type, public, extends( rk_fixed_step_class ) :: rk4_class Classic 4th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk4 Interface procedure\n , public\n, :: properties => rk4_properties Interface type, public, extends( rk_fixed_step_class ) :: rks4_class 4th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rks4 Interface procedure\n , public\n, :: properties => rks4_properties Interface type, public, extends( rk_fixed_step_class ) :: rkr4_class 4th order Runge-Kutta Ralston Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkr4 Interface procedure\n , public\n, :: properties => rkr4_properties Interface type, public, extends( rk_fixed_step_class ) :: rkls44_class 4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkls44 Interface procedure\n , public\n, :: properties => rkls44_properties Interface type, public, extends( rk_fixed_step_class ) :: rkls54_class 5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkls54 Interface procedure\n , public\n, :: properties => rkls54_properties Interface type, public, extends( rk_fixed_step_class ) :: rkssp54_class 5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkssp54 Interface procedure\n , public\n, :: properties => rkssp54_properties Interface type, public, extends( rk_fixed_step_class ) :: rks5_class 5th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rks5 Interface procedure\n , public\n, :: properties => rks5_properties Interface type, public, extends( rk_fixed_step_class ) :: rk5_class 5th order Runge-Kutta Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk5 Interface procedure\n , public\n, :: properties => rk5_properties Interface type, public, extends( rk_fixed_step_class ) :: rkc5_class 5th order Runge-Kutta Cassity Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkc5 Interface procedure\n , public\n, :: properties => rkc5_properties Interface type, public, extends( rk_fixed_step_class ) :: rkl5_class 5th order Runge-Kutta Lawson Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkl5 Interface procedure\n , public\n, :: properties => rkl5_properties Interface type, public, extends( rk_fixed_step_class ) :: rklk5a_class 5th order Runge-Kutta Luther-Konen 1 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rklk5a Interface procedure\n , public\n, :: properties => rklk5a_properties Interface type, public, extends( rk_fixed_step_class ) :: rklk5b_class 5th order Runge-Kutta Luther-Konen 2 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rklk5b Interface procedure\n , public\n, :: properties => rklk5b_properties Interface type, public, extends( rk_fixed_step_class ) :: rkb6_class 6th order Runge-Kutta Butcher Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkb6 Interface procedure\n , public\n, :: properties => rkb6_properties Interface type, public, extends( rk_fixed_step_class ) :: rk7_class 7th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk7 Interface procedure\n , public\n, :: properties => rk7_properties Interface type, public, extends( rk_fixed_step_class ) :: rk8_10_class 10-stage, 8th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk8_10 Interface procedure\n , public\n, :: properties => rk8_10_properties Interface type, public, extends( rk_fixed_step_class ) :: rkcv8_class 11-stage, 8th order Runge-Kutta Cooper-Verner Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkcv8 Interface procedure\n , public\n, :: properties => rkcv8_properties Interface type, public, extends( rk_fixed_step_class ) :: rk8_12_class 12-stage, 8th order Runge-Kutta Shanks Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rk8_12 Interface procedure\n , public\n, :: properties => rk8_12_properties Interface type, public, extends( rk_fixed_step_class ) :: rkz10_class 10th order Runge-Kutta Zhang Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkz10 Interface procedure\n , public\n, :: properties => rkz10_properties Interface type, public, extends( rk_fixed_step_class ) :: rko10_class 10th order Runge-Kutta Ono Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rko10 Interface procedure\n , public\n, :: properties => rko10_properties Interface type, public, extends( rk_fixed_step_class ) :: rkh10_class 10th order Runge-Kutta Hairer Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_fixed_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_fixed_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_fixed_step Subroutine procedure\n , public\n, :: step => rkh10 Interface procedure\n , public\n, :: properties => rkh10_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkbs32_class Bogacki & Shampine 3(2) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkbs32 Interface procedure\n , public\n, :: properties => rkbs32_properties Interface type, public, extends( rk_variable_step_class ) :: rkssp43_class 4-stage, 3rd order SSP Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkssp43 Interface procedure\n , public\n, :: properties => rkssp43_properties Interface type, public, extends( rk_variable_step_class ) :: rkf45_class Fehlberg 4(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf45 Interface procedure\n , public\n, :: properties => rkf45_properties Interface type, public, extends( rk_variable_step_class ) :: rkck54_class Cash & Karp 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkck54 Interface procedure\n , public\n, :: properties => rkck54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkdp54_class Dormand-Prince 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkdp54 Interface procedure\n , public\n, :: properties => rkdp54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkt54_class Tsitouras 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkt54 Interface procedure\n , public\n, :: properties => rkt54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rks54_class Stepanov 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rks54 Interface procedure\n , public\n, :: properties => rks54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkpp54_class Papakostas-PapaGeorgiou 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkpp54 Interface procedure\n , public\n, :: properties => rkpp54_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkpp54b_class Papakostas-PapaGeorgiou 5(4) b Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkpp54b Interface procedure\n , public\n, :: properties => rkpp54b_properties Interface type, public, extends( rk_variable_step_class ) :: rkbs54_class Bogacki & Shampine 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkbs54 Interface procedure\n , public\n, :: properties => rkbs54_properties Interface type, public, extends( rk_variable_step_class ) :: rkss54_class Sharp & Smart 5(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkss54 Interface procedure\n , public\n, :: properties => rkss54_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp65_class Dormand-Prince 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp65 Interface procedure\n , public\n, :: properties => rkdp65_properties Interface type, public, extends( rk_variable_step_class ) :: rkc65_class Calvo 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkc65 Interface procedure\n , public\n, :: properties => rkc65_properties Interface type, public, extends( rk_variable_step_class ) :: rktp64_class Tsitouras & Papakostas NEW6(4) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp64 Interface procedure\n , public\n, :: properties => rktp64_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkv65e_class Verner efficient (9,6(5)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkv65e Interface procedure\n , public\n, :: properties => rkv65e_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rkv65r_class Verner robust (9,6(5)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rkv65r Interface procedure\n , public\n, :: properties => rkv65r_properties Interface type, public, extends( rk_variable_step_class ) :: rkv65_class Verner 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv65 Interface procedure\n , public\n, :: properties => rkv65_properties Interface type, public, extends( rk_variable_step_class ) :: dverk65_class Verner 6(5) \"DVERK\" Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => dverk65 Interface procedure\n , public\n, :: properties => dverk65_properties Interface type, public, extends( rk_variable_step_fsal_class ) :: rktf65_class Tsitouras & Famelis 6(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n :: destroy_fsal_cache Subroutine procedure\n , public\n :: check_fsal_cache Subroutine procedure\n , public\n :: set_fsal_cache Subroutine procedure\n , public\n, :: step => rktf65 Interface procedure\n , public\n, :: properties => rktf65_properties Interface type, public, extends( rk_variable_step_class ) :: rktp75_class Tsitouras & Papakostas NEW7(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp75 Interface procedure\n , public\n, :: properties => rktp75_properties Interface type, public, extends( rk_variable_step_class ) :: rktmy7_class 7th order Tanaka-Muramatsu-Yamashita Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktmy7 Interface procedure\n , public\n, :: properties => rktmy7_properties Interface type, public, extends( rk_variable_step_class ) :: rktmy7s_class 7th order Stable Tanaka-Muramatsu-Yamashita Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktmy7s Interface procedure\n , public\n, :: properties => rktmy7s_properties Interface type, public, extends( rk_variable_step_class ) :: rkv76e_class Verner efficient (10:7(6)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv76e Interface procedure\n , public\n, :: properties => rkv76e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv76r_class Verner robust (10:7(6)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv76r Interface procedure\n , public\n, :: properties => rkv76r_properties Interface type, public, extends( rk_variable_step_class ) :: rkss76_class Sharp & Smart 7(6) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkss76 Interface procedure\n , public\n, :: properties => rkss76_properties Interface type, public, extends( rk_variable_step_class ) :: rkf78_class Fehlberg 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf78 Interface procedure\n , public\n, :: properties => rkf78_properties Interface type, public, extends( rk_variable_step_class ) :: rkv78_class Verner 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv78 Interface procedure\n , public\n, :: properties => rkv78_properties Interface type, public, extends( rk_variable_step_class ) :: dverk78_class Verner \"Maple\" 7(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => dverk78 Interface procedure\n , public\n, :: properties => dverk78_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp85_class Dormand-Prince 8(5) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp85 Interface procedure\n , public\n, :: properties => rkdp85_properties Interface type, public, extends( rk_variable_step_class ) :: rktp86_class Tsitouras & Papakostas NEW8(6) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rktp86 Interface procedure\n , public\n, :: properties => rktp86_properties Interface type, public, extends( rk_variable_step_class ) :: rkdp87_class Dormand & Prince RK8(7)13M Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkdp87 Interface procedure\n , public\n, :: properties => rkdp87_properties Interface type, public, extends( rk_variable_step_class ) :: rkv87e_class Verner efficient (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv87e Interface procedure\n , public\n, :: properties => rkv87e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv87r_class Verner robust (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv87r Interface procedure\n , public\n, :: properties => rkv87r_properties Interface type, public, extends( rk_variable_step_class ) :: rkev87_class Enright-Verner (8)7 Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkev87 Interface procedure\n , public\n, :: properties => rkev87_properties Interface type, public, extends( rk_variable_step_class ) :: rkk87_class Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkk87 Interface procedure\n , public\n, :: properties => rkk87_properties Interface type, public, extends( rk_variable_step_class ) :: rkf89_class Fehlberg 8(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf89 Interface procedure\n , public\n, :: properties => rkf89_properties Interface type, public, extends( rk_variable_step_class ) :: rkv89_class Verner 8(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv89 Interface procedure\n , public\n, :: properties => rkv89_properties Interface type, public, extends( rk_variable_step_class ) :: rkt98a_class Tsitouras 9(8) A Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkt98a Interface procedure\n , public\n, :: properties => rkt98a_properties Interface type, public, extends( rk_variable_step_class ) :: rkv98e_class Verner efficient (16:9(8)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv98e Interface procedure\n , public\n, :: properties => rkv98e_properties Interface type, public, extends( rk_variable_step_class ) :: rkv98r_class Verner robust (16:9(8)) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkv98r Interface procedure\n , public\n, :: properties => rkv98r_properties Interface type, public, extends( rk_variable_step_class ) :: rks98_class Sharp 9(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rks98 Interface procedure\n , public\n, :: properties => rks98_properties Interface type, public, extends( rk_variable_step_class ) :: rkf108_class Feagin 8(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf108 Interface procedure\n , public\n, :: properties => rkf108_properties Interface type, public, extends( rk_variable_step_class ) :: rkc108_class Curtis 10(8) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkc108 Interface procedure\n , public\n, :: properties => rkc108_properties Interface type, public, extends( rk_variable_step_class ) :: rkb109_class Baker 10(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkb109 Interface procedure\n , public\n, :: properties => rkb109_properties Interface type, public, extends( rk_variable_step_class ) :: rks1110a_class Stone 11(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rks1110a Interface procedure\n , public\n, :: properties => rks1110a_properties Interface type, public, extends( rk_variable_step_class ) :: rkf1210_class Feagin 12(10) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf1210 Interface procedure\n , public\n, :: properties => rkf1210_properties Interface type, public, extends( rk_variable_step_class ) :: rko129_class Ono 12(9) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rko129 Interface procedure\n , public\n, :: properties => rko129_properties Interface type, public, extends( rk_variable_step_class ) :: rkf1412_class Feagin 14(12) Type-Bound Procedures procedure\n , public\n :: destroy Subroutine destructor procedure\n , public\n :: stop => rk_class_stop Subroutine user-callable method to stop the integration procedure\n , public\n :: status => rk_class_status Subroutine get status code and message procedure\n , public\n :: failed Function procedure\n , public\n :: initialize => initialize_variable_step Subroutine initialize the class (set n,f, and report) procedure\n , public\n :: integrate => integrate_variable_step Subroutine procedure\n , public\n :: integrate_to_event => integrate_to_event_variable_step Subroutine procedure\n , public\n :: info => info_variable_step Subroutine procedure\n , public\n, :: step => rkf1412 Interface procedure\n , public\n, :: properties => rkf1412_properties Interface Functions private pure function order (me) result(p) Returns the order of the RK method Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me Return Value integer order of the method private function failed (me) Returns true if there was an error.\nCan use rk_class_status to get more info. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me Return Value logical public pure function norm2_func (x) result(xmag) Use intrinsic norm2(x) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) public pure function maxval_func (x) result(xmag) Use maxval(abs(x)) for computing the vector norm. Arguments Type Intent Optional Attributes Name real(kind=wp), intent(in), dimension(:) :: x Return Value real(kind=wp) private function compute_initial_step (me, t0, tf, x0, h0) result(dt) Compute the initial step size. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in) :: tf final time real(kind=wp), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h0 user-input initial step size (if zero, then one is computed) Return Value real(kind=wp) step size to use private function hinit (me, x, y, posneg, f0, hmax, atol, rtol) computation of an initial step size guess Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_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 posneg = sign(1.0_wp,xend-x) real(kind=wp), intent(in), dimension(:) :: f0 dimension(n) real(kind=wp), intent(in) :: hmax real(kind=wp), intent(in), dimension(:) :: atol real(kind=wp), intent(in), dimension(:) :: rtol Return Value real(kind=wp) Subroutines private subroutine clear_exception (me) Clear any exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine raise_exception (me, error_code) Raise an exception. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: error_code the error to raise private subroutine destroy (me) Destructor for rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(out) :: me private subroutine rk_class_stop (me) User-callable method to stop the integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine rk_class_status (me, istatus, message) Get the status of an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(in) :: me integer, intent(out), optional :: istatus status code ( <0 means an error) character(len=:), intent(out), optional, allocatable :: message status message private subroutine export_point (me, t, x, first_or_last) Wrapper for exporting points during integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x logical, intent(in), optional :: first_or_last if this is the first or\nlast point (always reported) private subroutine destroy_fsal_cache (me) Destructor for the FSAL variables. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me private subroutine check_fsal_cache (me, t, x, f) Check the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f private subroutine set_fsal_cache (me, t, x, f) Compute the function and add it to the FSAL cache. Arguments Type Intent Optional Attributes Name class( rk_variable_step_fsal_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f private subroutine initialize_rk_class (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_class . Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine begin_integration_rk_class (me) Begin an integration. Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me private subroutine begin_integration_rk_fixed_step_class (me) Begin a rk_fixed_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me private subroutine initialize_fixed_step (me, n, f, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_fixed_step_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me integer, intent(in) :: n number of variables procedure( deriv_func ) :: f derivative function procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine integrate_fixed_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_class . Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state private subroutine integrate_to_event_fixed_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Read more… Arguments Type Intent Optional Attributes Name class( rk_fixed_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(:) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf private pure subroutine stepsize_class_constructor (me, hmin, hmax, hfactor_reject, hfactor_accept, norm, accept_mode, relative_err, safety_factor, p_exponent_offset, max_attempts, fixed_step_mode) Constructor for a stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(inout) :: me real(kind=wp), intent(in), optional :: hmin minimum allowed step size (>0) real(kind=wp), intent(in), optional :: hmax maximum allowed step size (>0) real(kind=wp), intent(in), optional :: hfactor_reject minimum allowed factor for\ndecreasing step size after\nrejected step (>0) real(kind=wp), intent(in), optional :: hfactor_accept maximum allowed factor for\ndecreasing step size after\naccepted step (>0) procedure( norm_func ), optional :: norm the user-specified function integer, intent(in), optional :: accept_mode method to determine if step\nis accepted [1,2] logical, intent(in), optional :: relative_err to use tol*h in the hfactor equation real(kind=wp), intent(in), optional :: safety_factor for hfactor equation (>0) integer, intent(in), optional :: p_exponent_offset p + this value in the exponent (0 or 1) integer, intent(in), optional :: max_attempts max step size change attempts\nafter rejected step logical, intent(in), optional :: fixed_step_mode if true, then the method runs in\nfixed step mode with not error estimation.\nAll the other inputs are ignored. Note that\nthis requires a dt /= 0 input for the integrator. private subroutine destroy_stepsize_class (me) Destructor for stepsize_class . Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(out) :: me private subroutine compute_stepsize (me, n, h, tol, err, p, hnew, accept) Compute the new step size using the specific method. Arguments Type Intent Optional Attributes Name class( stepsize_class ), intent(in) :: me integer, intent(in) :: n number of variables real(kind=wp), intent(in) :: h current step size (<>0) real(kind=wp), intent(in), dimension(n) :: tol abs error tolerance (>0) real(kind=wp), intent(in), dimension(n) :: err truncation error estimate (>0) integer, intent(in) :: p order of the method real(kind=wp), intent(out) :: hnew new step size (<>0) logical, intent(out) :: accept if the step is accepted private subroutine begin_integration_rk_variable_step_class (me) Begin a rk_variable_step_class integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me private subroutine initialize_variable_step (me, n, f, rtol, atol, stepsize_method, hinit_method, report, g, stop_on_errors, max_number_of_steps, report_rate, solver) Initialize the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me integer, intent(in) :: n number of equations procedure( deriv_func ) :: f derivative function real(kind=wp), intent(in), optional, dimension(:) :: rtol relative tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used real(kind=wp), intent(in), optional, dimension(:) :: atol absolute tolerance (if size=1,\nthen same tol used for all\nequations). If not present, a default\nof 100*eps is used type( stepsize_class ), intent(in), optional :: stepsize_method method for varying the step size integer, intent(in), optional :: hinit_method which method (1 or 2) to use for\nautomatic initial step size\ncomputation.\n1 = use hstart , 2 = use hinit . procedure( report_func ), optional :: report for reporting the steps procedure( event_func ), optional :: g for stopping at an event logical, intent(in), optional :: stop_on_errors stop the program for\nany errors (default is False) integer, intent(in), optional :: max_number_of_steps max number of steps allowed integer, intent(in), optional :: report_rate how often to call report function: 0 : no reporting (same as not associating report ), 1 : report every point, 2 : report every other point, etc.\nThe first and last point are always reported. class(root_method), intent(in), optional :: solver the root-finding method to use for even finding.\nif not present, then brent_solver is used. private subroutine info_variable_step (me, num_steps, num_rejected_steps, last_accepted_step_size) Return some info about the integration. Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(in) :: me integer, intent(out), optional :: num_steps number of steps taken integer, intent(out), optional :: num_rejected_steps number of rejected steps real(kind=wp), intent(out), optional :: last_accepted_step_size the last accepted step size dt from the integration\n(positive or negative) private subroutine integrate_variable_step (me, t0, x0, h, tf, xf) Main integration routine for the rk_variable_step_class . Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(:) :: x0 initial state real(kind=wp), intent(in) :: h initial abs(time step) real(kind=wp), intent(in) :: tf final time real(kind=wp), intent(out), dimension(:) :: xf final state private subroutine integrate_to_event_variable_step (me, t0, x0, h, tmax, tol, tf, xf, gf) Event-finding integration routine for the rk_variable_step_class .\n Integrates until g(t,x)=0, or until t=tf (whichever happens first). Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: t0 initial time real(kind=wp), intent(in), dimension(me%n) :: x0 initial state real(kind=wp), intent(in) :: h abs(time step) real(kind=wp), intent(in) :: tmax max final time if event not located real(kind=wp), intent(in) :: tol function tolerance for root finding real(kind=wp), intent(out) :: tf actual final time reached real(kind=wp), intent(out), dimension(me%n) :: xf final state (at tf) real(kind=wp), intent(out) :: gf g value at tf private subroutine hstart (me, a, b, y, yprime, etol, h) Computes a starting step size to be used in solving initial\n value problems in ordinary differential equations. Read more… Arguments Type Intent Optional Attributes Name class( rk_variable_step_class ), intent(inout) :: me real(kind=wp), intent(in) :: a the initial point of integration. real(kind=wp), intent(in) :: b a value of the independent variable used to define\nthe direction of integration. a reasonable choice is to\nset b to the first point at which a solution is desired.\nyou can also use b , if necessary, to restrict the length\nof the first integration step because the algorithm will\nnot compute a starting step length which is bigger than abs(b-a) , unless b has been chosen too close to a .\n(it is presumed that hstart has been called with b different from a on the machine being used. also see the\ndiscussion about the parameter small .) real(kind=wp), intent(in), dimension(me%n) :: y the vector of initial values of the neq solution\ncomponents at the initial point a . real(kind=wp), intent(in), dimension(me%n) :: yprime the vector of derivatives of the neq solution components at the initial point a .\n(defined by the differential equations in subroutine me%f ) real(kind=wp), intent(in), dimension(me%n) :: etol the vector of error tolerances corresponding to\nthe neq solution components. it is assumed that all\nelements are positive. following the first integration\nstep, the tolerances are expected to be used by the\nintegrator in an error test which roughly requires that abs(local error) <= etol for each vector component. real(kind=wp), intent(out) :: h appropriate starting step size to be attempted by the\ndifferential equation method.","tags":"","loc":"module/rklib_module.html"},{"title":"rklib_fixed_steps – rklib","text":"Fixed-step RK formulas. Uses Ancestors: rklib_module module~~rklib_fixed_steps~~UsesGraph module~rklib_fixed_steps rklib_fixed_steps module~rklib_module rklib_module module~rklib_fixed_steps->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures euler midpoint heun rkssp22 rk3 rkssp33 rkssp53 rk4 rks4 rkr4 rkls44 rkssp54 rkls54 rks5 rk5 rkc5 rkl5 rklk5a rklk5b rkb6 rk7 rk8_10 rk8_12 rkcv8 rkz10 rko10 rkh10 Module Procedures module procedure euler module subroutine euler(me, t, x, h, xf) Interface → Euler (1st order) integration method. Arguments Type Intent Optional Attributes Name class( euler_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure midpoint module subroutine midpoint(me, t, x, h, xf) Interface → Midpoint (2nd order) integration method. Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure heun module subroutine heun(me, t, x, h, xf) Interface → Heun's (2nd order) integration method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp22 module subroutine rkssp22(me, t, x, h, xf) Interface → 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Read more… Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk3 module subroutine rk3(me, t, x, h, xf) Interface → 3rd order, 3 steps RK integration method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp33 module subroutine rkssp33(me, t, x, h, xf) Interface → 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. Read more… Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp53 module subroutine rkssp53(me, t, x, h, xf) Interface → 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. Read more… Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk4 module subroutine rk4(me, t, x, h, xf) Interface → Take one Runge Kutta 4 integration step: t -> t+h (x -> xf) Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rks4 module subroutine rks4(me, t, x, h, xf) Interface → 4th order Runge Kutta Shanks (4 points) Read more… Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkr4 module subroutine rkr4(me, t, x, h, xf) Interface → Ralston 4th order method with minimum truncation error. Read more… Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkls44 module subroutine rkls44(me, t, x, h, xf) Interface → 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). Read more… Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkssp54 module subroutine rkssp54(me, t, x, h, xf) Interface → 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. Read more… Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkls54 module subroutine rkls54(me, t, x, h, xf) Interface → 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994).\n CFL<=0.32 Read more… Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rks5 module subroutine rks5(me, t, x, h, xf) Interface → Runge Kutta Shanks (5th order) Read more… Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk5 module subroutine rk5(me, t, x, h, xf) Interface → Runge's 5th order method. Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkc5 module subroutine rkc5(me, t, x, h, xf) Interface → Cassity's Order 5 method Read more… Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkl5 module subroutine rkl5(me, t, x, h, xf) Interface → 5th order Lawson Read more… Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rklk5a module subroutine rklk5a(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (1) Read more… Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rklk5b module subroutine rklk5b(me, t, x, h, xf) Interface → Luther and Konen's 5th order method (2) Read more… Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkb6 module subroutine rkb6(me, t, x, h, xf) Interface → Butcher's 6th order method. 7 function evaluations. Read more… Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk7 module subroutine rk7(me, t, x, h, xf) Interface → Take one Runge Kutta 7 integration step: t -> t+h (x -> xf) Read more… Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk8_10 module subroutine rk8_10(me, t, x, h, xf) Interface → Take one Runge Kutta 8 integration step: t -> t+h (x -> xf) This is Formula (8-10) from Reference [1]. Read more… Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rk8_12 module subroutine rk8_12(me, t, x, h, xf) Interface → 8th order Shanks, 12 function evaluations. Read more… Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkcv8 module subroutine rkcv8(me, t, x, h, xf) Interface → Cooper-Verner 11 stage, 8th order Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkz10 module subroutine rkz10(me, t, x, h, xf) Interface → Zhang 10th order Read more… Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rko10 module subroutine rko10(me, t, x, h, xf) Interface → Ono's 10th order method Read more… Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h module procedure rkh10 module subroutine rkh10(me, t, x, h, xf) Interface → Hairer 10th order method. Read more… Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h","tags":"","loc":"module/rklib_fixed_steps.html"},{"title":"rklib_fixed_properties – rklib","text":"Procedures specifying the properties of the various fixed-step RK methods. Uses Ancestors: rklib_module module~~rklib_fixed_properties~~UsesGraph module~rklib_fixed_properties rklib_fixed_properties module~rklib_module rklib_module module~rklib_fixed_properties->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures euler_properties midpoint_properties heun_properties rkssp22_properties rk3_properties rkssp33_properties rkssp53_properties rk4_properties rks4_properties rkr4_properties rkls44_properties rkls54_properties rkssp54_properties rks5_properties rk5_properties rkc5_properties rkl5_properties rklk5a_properties rklk5b_properties rkb6_properties rk7_properties rk8_10_properties rkcv8_properties rk8_12_properties rkz10_properties rko10_properties rkh10_properties Module Procedures module procedure euler_properties pure module function euler_properties(me) result(p) Interface → Returns the properties of the euler method Arguments Type Intent Optional Attributes Name class( euler_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure midpoint_properties pure module function midpoint_properties(me) result(p) Interface → Returns the properties of the midpoint method Arguments Type Intent Optional Attributes Name class( midpoint_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure heun_properties pure module function heun_properties(me) result(p) Interface → Returns the properties of the heun method Arguments Type Intent Optional Attributes Name class( heun_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp22_properties pure module function rkssp22_properties(me) result(p) Interface → Returns the properties of the rkssp22 method Arguments Type Intent Optional Attributes Name class( rkssp22_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk3_properties pure module function rk3_properties(me) result(p) Interface → Returns the properties of the rk3 method Arguments Type Intent Optional Attributes Name class( rk3_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp33_properties pure module function rkssp33_properties(me) result(p) Interface → Returns the properties of the rkssp33 method Arguments Type Intent Optional Attributes Name class( rkssp33_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp53_properties pure module function rkssp53_properties(me) result(p) Interface → Returns the properties of the rkssp53 method Arguments Type Intent Optional Attributes Name class( rkssp53_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk4_properties pure module function rk4_properties(me) result(p) Interface → Returns the properties of the rk4 method Arguments Type Intent Optional Attributes Name class( rk4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks4_properties pure module function rks4_properties(me) result(p) Interface → Returns the properties of the rks4 method Arguments Type Intent Optional Attributes Name class( rks4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkr4_properties pure module function rkr4_properties(me) result(p) Interface → Returns the properties of the rkr4 method Arguments Type Intent Optional Attributes Name class( rkr4_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkls44_properties pure module function rkls44_properties(me) result(p) Interface → Returns the properties of the rkls44 method Arguments Type Intent Optional Attributes Name class( rkls44_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkls54_properties pure module function rkls54_properties(me) result(p) Interface → Returns the properties of the rkls54 method Arguments Type Intent Optional Attributes Name class( rkls54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp54_properties pure module function rkssp54_properties(me) result(p) Interface → Returns the properties of the rkssp54 method Arguments Type Intent Optional Attributes Name class( rkssp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks5_properties pure module function rks5_properties(me) result(p) Interface → Returns the properties of the rks5 method Arguments Type Intent Optional Attributes Name class( rks5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk5_properties pure module function rk5_properties(me) result(p) Interface → Returns the properties of the rk5 method Arguments Type Intent Optional Attributes Name class( rk5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc5_properties pure module function rkc5_properties(me) result(p) Interface → Returns the properties of the rkc5 method Arguments Type Intent Optional Attributes Name class( rkc5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkl5_properties pure module function rkl5_properties(me) result(p) Interface → Returns the properties of the rkl5 method Arguments Type Intent Optional Attributes Name class( rkl5_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rklk5a_properties pure module function rklk5a_properties(me) result(p) Interface → Returns the properties of the rklk5a method Arguments Type Intent Optional Attributes Name class( rklk5a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rklk5b_properties pure module function rklk5b_properties(me) result(p) Interface → Returns the properties of the rklk5b method Arguments Type Intent Optional Attributes Name class( rklk5b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkb6_properties pure module function rkb6_properties(me) result(p) Interface → Returns the properties of the rkb6 method Arguments Type Intent Optional Attributes Name class( rkb6_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk7_properties pure module function rk7_properties(me) result(p) Interface → Returns the properties of the rk7 method Arguments Type Intent Optional Attributes Name class( rk7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk8_10_properties pure module function rk8_10_properties(me) result(p) Interface → Returns the properties of the rk8_10 method Arguments Type Intent Optional Attributes Name class( rk8_10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkcv8_properties pure module function rkcv8_properties(me) result(p) Interface → Returns the properties of the rkcv8 method Arguments Type Intent Optional Attributes Name class( rkcv8_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rk8_12_properties pure module function rk8_12_properties(me) result(p) Interface → Returns the properties of the rk8_12 method Arguments Type Intent Optional Attributes Name class( rk8_12_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkz10_properties pure module function rkz10_properties(me) result(p) Interface → Returns the properties of the rkz10 method Arguments Type Intent Optional Attributes Name class( rkz10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rko10_properties pure module function rko10_properties(me) result(p) Interface → Returns the properties of the rko10 method Arguments Type Intent Optional Attributes Name class( rko10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkh10_properties pure module function rkh10_properties(me) result(p) Interface → Returns the properties of the rkh10 method Arguments Type Intent Optional Attributes Name class( rkh10_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"module/rklib_fixed_properties.html"},{"title":"rklib_variable_properties – rklib","text":"Procedures specifying the properties of the various variable-step RK methods. Uses Ancestors: rklib_module module~~rklib_variable_properties~~UsesGraph module~rklib_variable_properties rklib_variable_properties module~rklib_module rklib_module module~rklib_variable_properties->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures rkbs32_properties rkssp43_properties rkf45_properties rkck54_properties rkdp54_properties rkt54_properties rks54_properties rkpp54_properties rkpp54b_properties rkbs54_properties rkss54_properties rkdp65_properties rkc65_properties rktp64_properties rkv65e_properties rkv65r_properties rkv65_properties dverk65_properties rktf65_properties rktp75_properties rktmy7_properties rktmy7s_properties rkv76e_properties rkv76r_properties rkss76_properties rkf78_properties rkv78_properties dverk78_properties rkdp85_properties rktp86_properties rkdp87_properties rkv87e_properties rkv87r_properties rkev87_properties rkk87_properties rkf89_properties rkv89_properties rkt98a_properties rkv98e_properties rkv98r_properties rks98_properties rkf108_properties rkc108_properties rkb109_properties rks1110a_properties rkf1210_properties rko129_properties rkf1412_properties Module Procedures module procedure rkbs32_properties pure module function rkbs32_properties(me) result(p) Interface → Returns the properties of the rkbs32 method Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkssp43_properties pure module function rkssp43_properties(me) result(p) Interface → Returns the properties of the rkssp43 method Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf45_properties pure module function rkf45_properties(me) result(p) Interface → Returns the properties of the rkf45 method Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkck54_properties pure module function rkck54_properties(me) result(p) Interface → Returns the properties of the rkck54 method Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp54_properties pure module function rkdp54_properties(me) result(p) Interface → Returns the properties of the rkdp54 method Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkt54_properties pure module function rkt54_properties(me) result(p) Interface → Returns the properties of the rkt54 method Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks54_properties pure module function rks54_properties(me) result(p) Interface → Returns the properties of the rks54 method Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkpp54_properties pure module function rkpp54_properties(me) result(p) Interface → Returns the properties of the rkpp54 method Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkpp54b_properties pure module function rkpp54b_properties(me) result(p) Interface → Returns the properties of the rkpp54b method Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkbs54_properties pure module function rkbs54_properties(me) result(p) Interface → Returns the properties of the rkbs54 method Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkss54_properties pure module function rkss54_properties(me) result(p) Interface → Returns the properties of the rkss54 method Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp65_properties pure module function rkdp65_properties(me) result(p) Interface → Returns the properties of the rkdp65 method Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc65_properties pure module function rkc65_properties(me) result(p) Interface → Returns the properties of the rkc65 method Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp64_properties pure module function rktp64_properties(me) result(p) Interface → Returns the properties of the rktp64 method Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65e_properties pure module function rkv65e_properties(me) result(p) Interface → Returns the properties of the rkv65e method Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65r_properties pure module function rkv65r_properties(me) result(p) Interface → Returns the properties of the rkv65r method Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv65_properties pure module function rkv65_properties(me) result(p) Interface → Returns the properties of the rkv65 method Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure dverk65_properties pure module function dverk65_properties(me) result(p) Interface → Returns the properties of the dverk65 method Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktf65_properties pure module function rktf65_properties(me) result(p) Interface → Returns the properties of the rktf65 method Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp75_properties pure module function rktp75_properties(me) result(p) Interface → Returns the properties of the rktp75 method Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktmy7_properties pure module function rktmy7_properties(me) result(p) Interface → Returns the properties of the rktmy7 method Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktmy7s_properties pure module function rktmy7s_properties(me) result(p) Interface → Returns the properties of the rktmy7s method Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv76e_properties pure module function rkv76e_properties(me) result(p) Interface → Returns the properties of the rkv76e method Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv76r_properties pure module function rkv76r_properties(me) result(p) Interface → Returns the properties of the rkv76r method Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkss76_properties pure module function rkss76_properties(me) result(p) Interface → Returns the properties of the rkss76 method Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf78_properties pure module function rkf78_properties(me) result(p) Interface → Returns the properties of the rkf78 method Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv78_properties pure module function rkv78_properties(me) result(p) Interface → Returns the properties of the rkv78 method Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure dverk78_properties pure module function dverk78_properties(me) result(p) Interface → Returns the properties of the dverk78 method Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp85_properties pure module function rkdp85_properties(me) result(p) Interface → Returns the properties of the rkdp85 method Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rktp86_properties pure module function rktp86_properties(me) result(p) Interface → Returns the properties of the rktp86 method Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkdp87_properties pure module function rkdp87_properties(me) result(p) Interface → Returns the properties of the rkdp87 method Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv87e_properties pure module function rkv87e_properties(me) result(p) Interface → Returns the properties of the rkv87e method Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv87r_properties pure module function rkv87r_properties(me) result(p) Interface → Returns the properties of the rkv87r method Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkev87_properties pure module function rkev87_properties(me) result(p) Interface → Returns the properties of the rkev87 method Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkk87_properties pure module function rkk87_properties(me) result(p) Interface → Returns the properties of the rkk87 method Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf89_properties pure module function rkf89_properties(me) result(p) Interface → Returns the properties of the rkf89 method Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv89_properties pure module function rkv89_properties(me) result(p) Interface → Returns the properties of the rkv89 method Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkt98a_properties pure module function rkt98a_properties(me) result(p) Interface → Returns the properties of the rkt98a method Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv98e_properties pure module function rkv98e_properties(me) result(p) Interface → Returns the properties of the rkv98e method Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkv98r_properties pure module function rkv98r_properties(me) result(p) Interface → Returns the properties of the rkv98r method Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks98_properties pure module function rks98_properties(me) result(p) Interface → Returns the properties of the rks98 method Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf108_properties pure module function rkf108_properties(me) result(p) Interface → Returns the properties of the rkf108 method Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkc108_properties pure module function rkc108_properties(me) result(p) Interface → Returns the properties of the rkc108 method Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkb109_properties pure module function rkb109_properties(me) result(p) Interface → Returns the properties of the rkb109 method Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rks1110a_properties pure module function rks1110a_properties(me) result(p) Interface → Returns the properties of the rks1110a method Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf1210_properties pure module function rkf1210_properties(me) result(p) Interface → Returns the properties of the rkf1210 method Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rko129_properties pure module function rko129_properties(me) result(p) Interface → Returns the properties of the rko129 method Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method module procedure rkf1412_properties pure module function rkf1412_properties(me) result(p) Interface → Returns the properties of the rkf1412 method Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(in) :: me Return Value type( rklib_properties ) properties of the method","tags":"","loc":"module/rklib_variable_properties.html"},{"title":"rklib_variable_steps – rklib","text":"Variable-step RK formulas. Uses Ancestors: rklib_module module~~rklib_variable_steps~~UsesGraph module~rklib_variable_steps rklib_variable_steps module~rklib_module rklib_module module~rklib_variable_steps->module~rklib_module iso_fortran_env iso_fortran_env module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Module Procedures rkbs32 rkssp43 rkf45 rkck54 rkdp54 rkt54 rks54 rkpp54 rkpp54b rkbs54 rkss54 rkdp65 rkc65 rkv65e rktf65 rkv65r rkv65 dverk65 rkv76e rkv76r rkss76 rkv87e rkv87r rkk87 rkv98e rkv98r rktp64 rkf78 rkdp87 rkv78 dverk78 rktp75 rktmy7 rktmy7s rkdp85 rktp86 rkev87 rkf89 rkv89 rkt98a rks98 rkf108 rkc108 rkb109 rkf1210 rkf1412 rko129 rks1110a Module Procedures module procedure rkbs32 module subroutine rkbs32(me, t, x, h, xf, xerr) Interface → Bogacki-Shampine 3(2) method Read more… Arguments Type Intent Optional Attributes Name class( rkbs32_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkssp43 module subroutine rkssp43(me, t, x, h, xf, xerr) Interface → 4-stage, 3rd order SSP Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rkssp43_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf45 module subroutine rkf45(me, t, x, h, xf, xerr) Interface → Fehlberg's 4(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkf45_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkck54 module subroutine rkck54(me, t, x, h, xf, xerr) Interface → Runge Kutta Cash-Karp. Read more… Arguments Type Intent Optional Attributes Name class( rkck54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp54 module subroutine rkdp54(me, t, x, h, xf, xerr) Interface → Dormand-Prince 5(4) method (RKDP or DOPRI) Read more… Arguments Type Intent Optional Attributes Name class( rkdp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkt54 module subroutine rkt54(me, t, x, h, xf, xerr) Interface → Tsitouras 5(4) method Read more… Arguments Type Intent Optional Attributes Name class( rkt54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks54 module subroutine rks54(me, t, x, h, xf, xerr) Interface → Stepanov 5(4) method. Read more… Arguments Type Intent Optional Attributes Name class( rks54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkpp54 module subroutine rkpp54(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) Read more… Arguments Type Intent Optional Attributes Name class( rkpp54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkpp54b module subroutine rkpp54b(me, t, x, h, xf, xerr) Interface → Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). Read more… Arguments Type Intent Optional Attributes Name class( rkpp54b_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkbs54 module subroutine rkbs54(me, t, x, h, xf, xerr) Interface → Bogacki & Shampine 5(4) Read more… Arguments Type Intent Optional Attributes Name class( rkbs54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkss54 module subroutine rkss54(me, t, x, h, xf, xerr) Interface → Sharp & Smart 5(4) method. Read more… Arguments Type Intent Optional Attributes Name class( rkss54_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp65 module subroutine rkdp65(me, t, x, h, xf, xerr) Interface → Dormand-Prince 6(5) method.\n This is RK6(5)8M from the reference. Read more… Arguments Type Intent Optional Attributes Name class( rkdp65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkc65 module subroutine rkc65(me, t, x, h, xf, xerr) Interface → Calvo 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkc65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65e module subroutine rkv65e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv65e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktf65 module subroutine rktf65(me, t, x, h, xf, xerr) Interface → Tsitouras & Famelis Runge-Kutta 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rktf65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65r module subroutine rkv65r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv65r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv65 module subroutine rkv65(me, t, x, h, xf, xerr) Interface → Verner 6(5) method. Read more… Arguments Type Intent Optional Attributes Name class( rkv65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure dverk65 module subroutine dverk65(me, t, x, h, xf, xerr) Interface → Verner 6(5) 'DVERK' method. Arguments Type Intent Optional Attributes Name class( dverk65_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv76e module subroutine rkv76e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv76e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv76r module subroutine rkv76r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv76r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkss76 module subroutine rkss76(me, t, x, h, xf, xerr) Interface → Sharp & Smart 7(6)) method. Read more… Arguments Type Intent Optional Attributes Name class( rkss76_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv87e module subroutine rkv87e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv87e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv87r module subroutine rkv87r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv87r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkk87 module subroutine rkk87(me, t, x, h, xf, xerr) Interface → Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method Read more… Arguments Type Intent Optional Attributes Name class( rkk87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv98e module subroutine rkv98e(me, t, x, h, xf, xerr) Interface → Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv98e_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv98r module subroutine rkv98r(me, t, x, h, xf, xerr) Interface → Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. Read more… Arguments Type Intent Optional Attributes Name class( rkv98r_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp64 module subroutine rktp64(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW6(4) Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp64_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf78 module subroutine rkf78(me, t, x, h, xf, xerr) Interface → Fehlberg's 7(8) algorithm. Read more… Arguments Type Intent Optional Attributes Name class( rkf78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp87 module subroutine rkdp87(me, t, x, h, xf, xerr) Interface → Dormand-Prince RK8(7)13M method. Read more… Arguments Type Intent Optional Attributes Name class( rkdp87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv78 module subroutine rkv78(me, t, x, h, xf, xerr) Interface → Verner's 7(8) algorithm. Read more… Arguments Type Intent Optional Attributes Name class( rkv78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure dverk78 module subroutine dverk78(me, t, x, h, xf, xerr) Interface → Verner's \"Maple\" (dverk78). Read more… Arguments Type Intent Optional Attributes Name class( dverk78_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp75 module subroutine rktp75(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW7(5) Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp75_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktmy7 module subroutine rktmy7(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) Read more… Arguments Type Intent Optional Attributes Name class( rktmy7_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktmy7s module subroutine rktmy7s(me, t, x, h, xf, xerr) Interface → Tanaka/Muramatsu/Yamashita 7th order (stable alternate) Read more… Arguments Type Intent Optional Attributes Name class( rktmy7s_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkdp85 module subroutine rkdp85(me, t, x, h, xf, xerr) Interface → Dormand-Prince 8(5) Read more… Arguments Type Intent Optional Attributes Name class( rkdp85_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rktp86 module subroutine rktp86(me, t, x, h, xf, xerr) Interface → Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. Read more… Arguments Type Intent Optional Attributes Name class( rktp86_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkev87 module subroutine rkev87(me, t, x, h, xf, xerr) Interface → Enright Verner 8(7) Read more… Arguments Type Intent Optional Attributes Name class( rkev87_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf89 module subroutine rkf89(me, t, x, h, xf, xerr) Interface → Fehlberg 8(9) method. Read more… Arguments Type Intent Optional Attributes Name class( rkf89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkv89 module subroutine rkv89(me, t, x, h, xf, xerr) Interface → Runge Kutta Verner 8(9) Read more… Arguments Type Intent Optional Attributes Name class( rkv89_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkt98a module subroutine rkt98a(me, t, x, h, xf, xerr) Interface → Tsitouras combined order 9(8) Runge-Kutta scheme A. Read more… Arguments Type Intent Optional Attributes Name class( rkt98a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks98 module subroutine rks98(me, t, x, h, xf, xerr) Interface → Sharp 9(8) Read more… Arguments Type Intent Optional Attributes Name class( rks98_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf108 module subroutine rkf108(me, t, x, h, xf, xerr) Interface → Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkc108 module subroutine rkc108(me, t, x, h, xf, xerr) Interface → A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme Read more… Arguments Type Intent Optional Attributes Name class( rkc108_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkb109 module subroutine rkb109(me, t, x, h, xf, xerr) Interface → Baker 10(9) method. Read more… Arguments Type Intent Optional Attributes Name class( rkb109_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf1210 module subroutine rkf1210(me, t, x, h, xf, xerr) Interface → Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf1210_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rkf1412 module subroutine rkf1412(me, t, x, h, xf, xerr) Interface → Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. Read more… Arguments Type Intent Optional Attributes Name class( rkf1412_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rko129 module subroutine rko129(me, t, x, h, xf, xerr) Interface → A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. Read more… Arguments Type Intent Optional Attributes Name class( rko129_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x module procedure rks1110a module subroutine rks1110a(me, t, x, h, xf, xerr) Interface → Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme Read more… Arguments Type Intent Optional Attributes Name class( rks1110a_class ), intent(inout) :: me real(kind=wp), intent(in) :: t initial time real(kind=wp), intent(in), dimension(me%n) :: x initial state real(kind=wp), intent(in) :: h time step real(kind=wp), intent(out), dimension(me%n) :: xf state at time t+h real(kind=wp), intent(out), dimension(me%n) :: xerr truncation error estimate for x","tags":"","loc":"module/rklib_variable_steps.html"},{"title":"rklib_example – rklib","text":"Uses rklib_module iso_fortran_env program~~rklib_example~~UsesGraph program~rklib_example rklib_example iso_fortran_env iso_fortran_env program~rklib_example->iso_fortran_env module~rklib_module rklib_module program~rklib_example->module~rklib_module module~rklib_module->iso_fortran_env root_module root_module module~rklib_module->root_module Help × Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Contents Variables n tol t0 dt tf x0 xf prop message Subroutines fvpol Source Code rklib_example Variables Type Attributes Name Initial integer, parameter :: n = 2 dimension of the system real(kind=wp), parameter :: tol = 1.0e-12_wp integration tolerance real(kind=wp), parameter :: t0 = 0.0_wp initial t value real(kind=wp), parameter :: dt = 1.0_wp initial step size real(kind=wp), parameter :: tf = 100.0_wp endpoint of integration real(kind=wp), parameter, dimension(n) :: x0 = [0.0_wp, 0.1_wp] initial x value real(kind=wp), dimension(n) :: xf final x value type( rktp86_class ) :: prop character(len=:), allocatable :: message Subroutines subroutine fvpol (me, t, x, f) Right-hand side of van der Pol equation Arguments Type Intent Optional Attributes Name class( rk_class ), intent(inout) :: me real(kind=wp), intent(in) :: t real(kind=wp), intent(in), dimension(:) :: x real(kind=wp), intent(out), dimension(:) :: f Source Code program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example","tags":"","loc":"program/rklib_example.html"},{"title":"rklib_module.F90 – rklib","text":"Files dependent on this one sourcefile~~rklib_module.f90~~AfferentGraph sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_example.f90 rklib_example.f90 sourcefile~rklib_example.f90->sourcefile~rklib_module.f90 sourcefile~rklib_fixed_properties.f90 rklib_fixed_properties.f90 sourcefile~rklib_fixed_properties.f90->sourcefile~rklib_module.f90 sourcefile~rklib_fixed_steps.f90 rklib_fixed_steps.f90 sourcefile~rklib_fixed_steps.f90->sourcefile~rklib_module.f90 sourcefile~rklib_variable_properties.f90 rklib_variable_properties.f90 sourcefile~rklib_variable_properties.f90->sourcefile~rklib_module.f90 sourcefile~rklib_variable_steps.f90 rklib_variable_steps.f90 sourcefile~rklib_variable_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Modules rklib_module Source Code rklib_module.F90 Source Code !***************************************************************************************** !> author: Jacob Williams ! ! Runge-Kutta integration. ! !@note The default real kind (`wp`) can be ! changed using optional preprocessor flags. ! This library was built with real kind: #ifdef REAL32 ! `real(kind=real32)` [4 bytes] #elif REAL64 ! `real(kind=real64)` [8 bytes] #elif REAL128 ! `real(kind=real128)` [16 bytes] #else ! `real(kind=real64)` [8 bytes] #endif module rklib_module use iso_fortran_env use root_module implicit none private #ifdef REAL32 integer , parameter , public :: rk_module_rk = real32 !! real kind used by this module [4 bytes] #elif REAL64 integer , parameter , public :: rk_module_rk = real64 !! real kind used by this module [8 bytes] #elif REAL128 integer , parameter , public :: rk_module_rk = real128 !! real kind used by this module [16 bytes] #else integer , parameter , public :: rk_module_rk = real64 !! real kind used by this module [8 bytes] #endif integer , parameter :: wp = rk_module_rk !! local copy of `rk_module_rk` with a shorter name real ( wp ), parameter :: zero = 0.0_wp integer , parameter :: max_error_len = 100 !! max size of error message strings integer , parameter , public :: RKLIB_ERROR_TOO_MANY_STEPS = - 10 integer , parameter , public :: RKLIB_ERROR_INVALID_RTOL_SIZE = - 9 integer , parameter , public :: RKLIB_ERROR_INVALID_ATOL_SIZE = - 8 integer , parameter , public :: RKLIB_ERROR_INVALID_H = - 7 integer , parameter , public :: RKLIB_ERROR_USER_STOPPED = - 6 integer , parameter , public :: RKLIB_ERROR_MIN_STEP_SIZE = - 5 integer , parameter , public :: RKLIB_ERROR_TOO_MANY_REDUCTIONS = - 4 integer , parameter , public :: RKLIB_ERROR_INVALID_HINIT_METHOD = - 3 integer , parameter , public :: RKLIB_ERROR_G_NOT_ASSOCIATED = - 2 integer , parameter , public :: RKLIB_ERROR_F_NOT_ASSOCIATED = - 1 integer , parameter , public :: RKLIB_ERROR_NONE = 0 character ( len = max_error_len ), dimension ( RKLIB_ERROR_TOO_MANY_STEPS : RKLIB_ERROR_NONE ), parameter :: & rklib_error_messages = [& 'Too many steps ' , & ! -10 'Invalid size for rtol array ' , & ! -9 'Invalid size for atol array ' , & ! -8 'Step size cannot be zero ' , & ! -7 'User stopped the integration ' , & ! -6 'Minimum step size reached ' , & ! -5 'Too many attempts to reduce step size ' , & ! -4 'Invalid initial step size estimation method ' , & ! -3 'The event procedure g is not associated ' , & ! -2 'The function procedure f is not associated ' , & ! -1 'Success ' ] ! 0 !! Status message strings that go with the status codes. !! The index in this array is the `istatus` code. type , public :: rklib_properties !! Properties of an RK method. integer :: order = 0 !! order of the method integer :: number_of_stages = 0 !! number of stages logical :: fsal = . false . !! if it is a FSAL method logical :: low_storage = . false . !! if it is a LS method logical :: strong_stability_preserving = . false . !! if it is a SSP method integer :: number_of_registers = 0 !! number of `f` vectors used real ( wp ) :: cfl = zero !! Courant-Friedrichs-Lewy number character ( len = :), allocatable :: short_name !! short version of the method name character ( len = :), allocatable :: long_name !! longer description of the method end type rklib_properties type , public :: stepsize_class !! Algorithms for adjusting the step size for variable-step !! Runge-Kutta integrators. private logical :: fixed_step_mode = . false . !! if true, then the method runs in !! fixed step mode with not error estimation real ( wp ) :: hmax = 1.0e+6_wp !! maximum allowed step size real ( wp ) :: hmin = 1.0e-6_wp !! minimum allowed step size real ( wp ) :: hfactor_reject = 0.5_wp !! minimum allowed factor for decreasing step size after rejected step real ( wp ) :: hfactor_accept = 2.0_wp !! maximum allowed factor for increasing step size after accepted step integer :: accept_mode = 2 !! method to determine if step is accepted [1,2] integer :: max_attempts = 10000 !! maximum number of attempts to decrease step size before giving up ! for the `hfactor` equation: logical :: relative_err = . false . !! to use `tol*h` in the `hfactor` equation real ( wp ) :: safety_factor = 0.9_wp !! for `hfactor` equation (>0) integer :: p_exponent_offset = 1 !! `p` + this value in the exponent (0 or 1) procedure ( norm_func ), nopass , pointer :: norm => maxval_func !! routine for computing the norm of the state contains private procedure , public :: initialize => stepsize_class_constructor procedure , public :: compute_stepsize procedure , public :: destroy => destroy_stepsize_class end type stepsize_class type , abstract , public :: rk_class !! main integration class private integer :: istatus = 0 !! status code logical :: stopped = . false . !! if user has stopped the integration in `f` or `report`. integer :: num_steps = 0 !! number of accepted steps taken integer :: max_number_of_steps = huge ( 1 ) !! maximum number of steps to take integer :: report_rate = 1 !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. logical :: stop_on_errors = . false . !! if true, then errors will stop the program integer :: n = 0 !! user specified number of variables procedure ( deriv_func ), pointer :: f => null () !! user-specified derivative function procedure ( report_func ), pointer :: report => null () !! user-specified report function procedure ( event_func ), pointer :: g => null () !! event function (stop when this is zero) type ( root_method ) :: solver = root_method_brent !! the root solver method to use for even finding real ( wp ), dimension (:,:), allocatable :: funcs !! matrix to store the function !! evalutaions in the step function. !! this will be size (`n` x `number_of_registers`) contains private procedure , public :: destroy !! destructor procedure , public :: stop => rk_class_stop !! user-callable method to stop the integration procedure , public :: status => rk_class_status !! get status code and message procedure , public :: failed procedure :: init => initialize_rk_class procedure :: begin => begin_integration_rk_class procedure :: raise_exception procedure :: clear_exception procedure :: export_point procedure ( begin_func ), deferred :: begin_integration procedure ( properties_func ), deferred , public :: properties end type rk_class type , extends ( rk_class ), abstract , public :: rk_fixed_step_class !! fixed step size class private contains private procedure ( step_func_fixed ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_fixed_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_fixed_step procedure , public :: integrate_to_event => integrate_to_event_fixed_step procedure :: begin_integration => begin_integration_rk_fixed_step_class end type rk_fixed_step_class type , extends ( rk_class ), abstract , public :: rk_variable_step_class !! Main integration class for variable step size Runge-Kutta methods private type ( stepsize_class ) :: stepsize_method !! the method for varying the step size real ( wp ), dimension (:), allocatable :: rtol !! relative tolerance (`size(n)`) real ( wp ), dimension (:), allocatable :: atol !! absolute tolerance (`size(n)`) integer :: hinit_method = 1 !! if automatically computing the inital step size, which !! method to use. 1 = `hstart`, 2 = `hinit`. integer :: num_rejected_steps = 0 !! number of rejected steps real ( wp ) :: last_accepted_step_size = zero !! the last accepted step size `dt` from the integration !! (positive or negative) contains private procedure ( step_func_variable ), deferred :: step !! the step routine for the rk method procedure , public :: initialize => initialize_variable_step !! initialize the class (set n,f, and report) procedure , public :: integrate => integrate_variable_step procedure , public :: integrate_to_event => integrate_to_event_variable_step procedure , public :: info => info_variable_step procedure :: hstart !! for automatically computing the initial step size [this is from DDEABM] procedure :: hinit !! for automatically computing the initial step size [this is from DOP853] procedure :: begin_integration => begin_integration_rk_variable_step_class procedure :: compute_initial_step procedure :: order !! returns `p`, the order of the method end type rk_variable_step_class type , extends ( rk_variable_step_class ), abstract , public :: rk_variable_step_fsal_class !! a variable step method with the \"first same as last\" (FSAL) property. !! Cache the last `f` and `x` vectors to use for the next step. !! !! The assumption is that the nature of the !! function has not changed since the last step. !! If it has, the user would need to manually call [[destroy_fsal_cache]] !! so that the previous point was not reused. private real ( wp ), allocatable :: t_saved !! cached `t` real ( wp ), dimension (:), allocatable :: x_saved !! cached `x` real ( wp ), dimension (:), allocatable :: f_saved !! cached `f` contains private procedure , public :: destroy_fsal_cache procedure , public :: check_fsal_cache procedure , public :: set_fsal_cache end type rk_variable_step_fsal_class #include \"rklib_fixed_classes.inc\" #include \"rklib_variable_classes.inc\" abstract interface subroutine begin_func ( me ) !! routine called before integration begins !! to set up internal variables. import :: rk_class class ( rk_class ), intent ( inout ) :: me end subroutine begin_func subroutine deriv_func ( me , t , x , xdot ) !! derivative function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector real ( wp ), dimension (:), intent ( out ) :: xdot !! derivative of state vector end subroutine deriv_func subroutine event_func ( me , t , x , g ) !! event function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector real ( wp ), intent ( out ) :: g !! g(t,x). The goal is to stop the integration when g=0. end subroutine event_func subroutine report_func ( me , t , x ) !! report function import :: rk_class , wp implicit none class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! time real ( wp ), dimension (:), intent ( in ) :: x !! state vector end subroutine report_func subroutine step_func_fixed ( me , t , x , h , xf ) !! rk step function for the fixed-step methods. import :: rk_fixed_step_class , wp implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x !! initial state vector real ( wp ), intent ( in ) :: h !! time step |\\Delta t| real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state vector end subroutine step_func_fixed subroutine step_func_variable ( me , t , x , h , xf , xerr ) !! rk step function for the variable-step methods. import :: rk_variable_step_class , wp implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x !! initial state vector real ( wp ), intent ( in ) :: h !! time step |\\Delta t| real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state vector real ( wp ), dimension ( me % n ), intent ( out ) :: xerr !! truncation error estimate end subroutine step_func_variable pure function norm_func ( x ) result ( xmag ) !! Vector norm function. Must return a value \\ge 0 . import :: wp implicit none real ( wp ), dimension (:), intent ( in ) :: x !! a vector real ( wp ) :: xmag !! the magnitude of the vector end function norm_func pure function properties_func ( me ) result ( p ) !! Returns the properties of the method. import :: rk_class , rklib_properties implicit none class ( rk_class ), intent ( in ) :: me type ( rklib_properties ) :: p !! properties of the method end function properties_func end interface ! submodule procedures: interface #include \"rklib_fixed_step_interfaces.inc\" #include \"rklib_variable_step_interfaces.inc\" #include \"rklib_fixed_property_interfaces.inc\" #include \"rklib_variable_property_interfaces.inc\" end interface ! public routines: public :: norm2_func , maxval_func contains !***************************************************************************************** !***************************************************************************************** !> ! Returns the order of the RK method pure function order ( me ) result ( p ) class ( rk_variable_step_class ), intent ( in ) :: me integer :: p !! order of the method type ( rklib_properties ) :: properties properties = me % properties () p = properties % order end function order !***************************************************************************************** !***************************************************************************************** !> ! Clear any exception. subroutine clear_exception ( me ) class ( rk_class ), intent ( inout ) :: me me % istatus = RKLIB_ERROR_NONE end subroutine clear_exception !***************************************************************************************** !***************************************************************************************** !> ! Raise an exception. subroutine raise_exception ( me , error_code ) class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: error_code !! the error to raise me % istatus = error_code if ( error_code < 0 . and . me % stop_on_errors ) then error stop trim ( rklib_error_messages ( error_code )) end if end subroutine raise_exception !***************************************************************************************** !***************************************************************************************** !> ! Destructor for [[rk_class]]. subroutine destroy ( me ) class ( rk_class ), intent ( out ) :: me end subroutine destroy !***************************************************************************************** !***************************************************************************************** !> ! User-callable method to stop the integration. subroutine rk_class_stop ( me ) class ( rk_class ), intent ( inout ) :: me me % stopped = . true . end subroutine rk_class_stop !***************************************************************************************** !***************************************************************************************** !> ! Returns true if there was an error. ! Can use [[rk_class_status]] to get more info. logical function failed ( me ) class ( rk_class ), intent ( in ) :: me failed = me % istatus < 0 end function failed !***************************************************************************************** !***************************************************************************************** !> ! Get the status of an integration. subroutine rk_class_status ( me , istatus , message ) class ( rk_class ), intent ( in ) :: me integer , intent ( out ), optional :: istatus !! status code (`<0` means an error) character ( len = :), allocatable , intent ( out ), optional :: message !! status message if ( present ( istatus )) istatus = me % istatus if ( present ( message )) message = trim ( rklib_error_messages ( me % istatus )) end subroutine rk_class_status !***************************************************************************************** !***************************************************************************************** !> ! Wrapper for exporting points during integration. subroutine export_point ( me , t , x , first_or_last ) class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x logical , intent ( in ), optional :: first_or_last !! if this is the first or !! last point (always reported) logical :: export !! if the point is to be exported if ( associated ( me % report ) . and . me % report_rate > 0 ) then export = . false . if ( present ( first_or_last )) then ! always report first and last step if ( first_or_last ) export = . true . end if if (. not . export ) then ! report steps at user-specified rate export = modulo ( me % num_steps , me % report_rate ) == 0 end if if ( export ) call me % report ( t , x ) end if end subroutine export_point !***************************************************************************************** !***************************************************************************************** !> ! Destructor for the FSAL variables. subroutine destroy_fsal_cache ( me ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me if ( allocated ( me % t_saved )) deallocate ( me % t_saved ) if ( allocated ( me % x_saved )) deallocate ( me % x_saved ) if ( allocated ( me % f_saved )) deallocate ( me % f_saved ) end subroutine destroy_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Check the FSAL cache. subroutine check_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f logical :: fsal !! if we can avoid a step due to first-same-as-last fsal = . false . if ( allocated ( me % x_saved )) then if ( size ( x ) == size ( me % x_saved )) then fsal = all ( x == me % x_saved ) . and . t == me % t_saved end if end if if ( fsal ) then f = me % f_saved else call me % f ( t , x , f ) end if end subroutine check_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Compute the function and add it to the FSAL cache. subroutine set_fsal_cache ( me , t , x , f ) class ( rk_variable_step_fsal_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f call me % f ( t , x , f ) me % t_saved = t me % x_saved = x me % f_saved = f end subroutine set_fsal_cache !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_class]]. subroutine initialize_rk_class ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( event_func ), optional :: g !! for stopping at an event procedure ( report_func ), optional :: report !! for reporting the steps logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. type ( rklib_properties ) :: props !! to get the method properties call me % destroy () me % n = n me % f => f if ( present ( report )) me % report => report if ( present ( g )) me % g => g if ( present ( stop_on_errors )) me % stop_on_errors = stop_on_errors if ( present ( max_number_of_steps )) me % max_number_of_steps = abs ( max_number_of_steps ) if ( present ( report_rate )) me % report_rate = abs ( report_rate ) if ( present ( solver )) me % solver = solver ! allocate the registers: props = me % properties () if ( allocated ( me % funcs )) deallocate ( me % funcs ) allocate ( me % funcs ( n , props % number_of_registers )) me % funcs = zero ! reset internal variables: me % num_steps = 0 me % stopped = . false . end subroutine initialize_rk_class !***************************************************************************************** !***************************************************************************************** !> ! Begin an integration. subroutine begin_integration_rk_class ( me ) class ( rk_class ), intent ( inout ) :: me call me % clear_exception () me % num_steps = 0 me % stopped = . false . end subroutine begin_integration_rk_class !***************************************************************************************** !***************************************************************************************** !> ! Begin a [[rk_fixed_step_class]] integration. subroutine begin_integration_rk_fixed_step_class ( me ) class ( rk_fixed_step_class ), intent ( inout ) :: me call me % begin () ! all we need is base method here. end subroutine begin_integration_rk_fixed_step_class !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_fixed_step_class]]. subroutine initialize_fixed_step ( me , n , f , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of variables procedure ( deriv_func ) :: f !! derivative function procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. ! base init all we need here: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) end subroutine initialize_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Main integration routine for the [[rk_class]]. subroutine integrate_fixed_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t !! current time value real ( wp ) :: dt !! time step from `t` to `t2` real ( wp ) :: t2 !! time to step to from `t` real ( wp ), dimension ( me % n ) :: x !! state vector logical :: last !! if it is the last step if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( h ) > zero ) then t = t0 x = x0 dt = sign ( h , tf - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do else xf = x0 end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Event-finding integration routine for the [[rk_class]]. ! Integrates until g(t,x)=0, or until t=tf (whichever happens first). ! !@note There are some efficiency improvements that could be made here. ! This is a work in progress. subroutine integrate_to_event_fixed_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_fixed_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension (:), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf !local variables: real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum real ( wp ), dimension ( me % n ) :: x !! state vector real ( wp ), dimension ( me % n ) :: g_xf !! state vector from the root finder logical :: first !! it is the first step logical :: last !! it is the last step integer :: iflag !! return flag from `solver` if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if if ( abs ( h ) <= zero ) then call me % raise_exception ( RKLIB_ERROR_INVALID_H ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t0 , x0 , ga ) !evaluate event function dt = sign ( h , tmax - t0 ) !time step (correct sign) do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if call me % step ( t , x , dt , xf ) if ( me % stopped ) return me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . end do end if call me % export_point ( t2 , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g !take a step from t to t+delt and evaluate g function: call me % step ( t , x , delt , g_xf ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_fixed_step !***************************************************************************************** !***************************************************************************************** !> ! Use intrinsic `norm2(x)` for computing the vector norm. pure function norm2_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = norm2 ( x ) end function norm2_func !***************************************************************************************** !***************************************************************************************** !> ! Use `maxval(abs(x))` for computing the vector norm. pure function maxval_func ( x ) result ( xmag ) implicit none real ( wp ), dimension (:), intent ( in ) :: x real ( wp ) :: xmag xmag = maxval ( abs ( x )) end function maxval_func !***************************************************************************************** !***************************************************************************************** !> ! Constructor for a [[stepsize_class]]. pure subroutine stepsize_class_constructor ( me , hmin , hmax , hfactor_reject ,& hfactor_accept , norm , accept_mode , relative_err ,& safety_factor , p_exponent_offset , max_attempts ,& fixed_step_mode ) implicit none class ( stepsize_class ), intent ( inout ) :: me real ( wp ), intent ( in ), optional :: hmin !! minimum allowed step size (>0) real ( wp ), intent ( in ), optional :: hmax !! maximum allowed step size (>0) real ( wp ), intent ( in ), optional :: hfactor_reject !! minimum allowed factor for !! decreasing step size after !! rejected step (>0) real ( wp ), intent ( in ), optional :: hfactor_accept !! maximum allowed factor for !! decreasing step size after !! accepted step (>0) procedure ( norm_func ), optional :: norm !! the user-specified ||x|| !! function integer , intent ( in ), optional :: accept_mode !! method to determine if step !! is accepted [1,2] integer , intent ( in ), optional :: max_attempts !! max step size change attempts !! after rejected step logical , intent ( in ), optional :: relative_err !! to use `tol*h` in the `hfactor` equation real ( wp ), intent ( in ), optional :: safety_factor !! for `hfactor` equation (>0) integer , intent ( in ), optional :: p_exponent_offset !! p + this value in the exponent (0 or 1) logical , intent ( in ), optional :: fixed_step_mode !! if true, then the method runs in !! fixed step mode with not error estimation. !! All the other inputs are ignored. Note that !! this requires a `dt /= 0` input for the integrator. if ( present ( hmin )) me % hmin = abs ( hmin ) if ( present ( hmax )) me % hmax = abs ( hmax ) if ( present ( hfactor_reject )) me % hfactor_reject = abs ( hfactor_reject ) if ( present ( hfactor_accept )) me % hfactor_accept = abs ( hfactor_accept ) if ( present ( norm )) me % norm => norm if ( present ( accept_mode )) me % accept_mode = accept_mode if ( present ( max_attempts )) me % max_attempts = max_attempts !if (present(compute_h_factor)) me%compute_h_factor => compute_h_factor if ( present ( relative_err )) me % relative_err = relative_err if ( present ( safety_factor )) me % safety_factor = abs ( safety_factor ) if ( present ( p_exponent_offset )) me % p_exponent_offset = abs ( p_exponent_offset ) if ( present ( fixed_step_mode )) me % fixed_step_mode = fixed_step_mode end subroutine stepsize_class_constructor !***************************************************************************************** !***************************************************************************************** !> ! Destructor for [[stepsize_class]]. subroutine destroy_stepsize_class ( me ) implicit none class ( stepsize_class ), intent ( out ) :: me end subroutine destroy_stepsize_class !***************************************************************************************** !***************************************************************************************** !> ! Compute the new step size using the specific method. subroutine compute_stepsize ( me , n , h , tol , err , p , hnew , accept ) implicit none class ( stepsize_class ), intent ( in ) :: me integer , intent ( in ) :: n !! number of variables real ( wp ), intent ( in ) :: h !! current step size (<>0) real ( wp ), dimension ( n ), intent ( in ) :: tol !! abs error tolerance (>0) real ( wp ), dimension ( n ), intent ( in ) :: err !! truncation error estimate (>0) integer , intent ( in ) :: p !! order of the method real ( wp ), intent ( out ) :: hnew !! new step size (<>0) logical , intent ( out ) :: accept !! if the step is accepted real ( wp ) :: e !! exponent real ( wp ) :: hfactor !! step size factor (>0) real ( wp ) :: max_err !! max error for all the elements real ( wp ), parameter :: small = 1 0.0_wp * epsilon ( 1.0_wp ) !! small error value if ( me % fixed_step_mode ) then ! do not adjust the step size accept = . true . hnew = h else if ( all ( err <= small )) then ! the error is extremely small hfactor = me % hfactor_accept accept = . true . else ! compute base factor based on the selected formula: if ( me % relative_err ) then max_err = me % norm ( err / tol * abs ( h )) else max_err = me % norm ( err / tol ) end if e = 1.0_wp / real ( p + me % p_exponent_offset , wp ) hfactor = abs ( me % safety_factor * ( 1.0_wp / max_err ) ** e ) ! if the step is to be accepted: select case ( me % accept_mode ) case ( 1 ) !algorithm 17.12 accept = hfactor >= 1.0_wp case ( 2 ) !algorithm 17.13 accept = me % norm ( err / tol ) <= 1.0_wp end select !...notes: ! see: L. Shampine \"Some Practical Runge-Kutta Formulas\", ! Mathematics of Computation, 46(173), Jan 1986. ! different conditions for satisfying error conditions: ! ||err|| <= tol -- Error per step (EPS) ! ||err|| <= h*tol -- Error per unit step (EPUS) !compute the actual hfactor based on the limits: if ( accept ) then hfactor = min ( me % hfactor_accept , hfactor ) else hfactor = max ( me % hfactor_reject , hfactor ) end if end if ! compute the new step size (enforce min/max bounds & add sign): hnew = sign ( max ( me % hmin , min ( me % hmax , abs ( h ) * hfactor )), h ) end if end subroutine compute_stepsize !***************************************************************************************** !***************************************************************************************** !> ! Begin a [[rk_variable_step_class]] integration. subroutine begin_integration_rk_variable_step_class ( me ) class ( rk_variable_step_class ), intent ( inout ) :: me call me % begin () ! base ! variable step params: me % num_rejected_steps = 0 me % last_accepted_step_size = zero select type ( me ) class is ( rk_variable_step_fsal_class ) call me % destroy_fsal_cache () end select end subroutine begin_integration_rk_variable_step_class !***************************************************************************************** !***************************************************************************************** !> ! Initialize the [[rk_variable_step_class]]. subroutine initialize_variable_step ( me , n , f , rtol , atol , stepsize_method ,& hinit_method , report , g , stop_on_errors ,& max_number_of_steps , report_rate ,& solver ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me integer , intent ( in ) :: n !! number of equations procedure ( deriv_func ) :: f !! derivative function real ( wp ), dimension (:), intent ( in ), optional :: rtol !! relative tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used real ( wp ), dimension (:), intent ( in ), optional :: atol !! absolute tolerance (if size=1, !! then same tol used for all !! equations). If not present, a default !! of `100*eps` is used type ( stepsize_class ), intent ( in ), optional :: stepsize_method !! method for varying the step size integer , intent ( in ), optional :: hinit_method !! which method (1 or 2) to use for !! automatic initial step size !! computation. !! 1 = use `hstart`, 2 = use `hinit`. procedure ( report_func ), optional :: report !! for reporting the steps procedure ( event_func ), optional :: g !! for stopping at an event logical , intent ( in ), optional :: stop_on_errors !! stop the program for !! any errors (default is False) integer , intent ( in ), optional :: max_number_of_steps !! max number of steps allowed integer , intent ( in ), optional :: report_rate !! how often to call report function: !! `0` : no reporting (same as not associating `report`), !! `1` : report every point, !! `2` : report every other point, etc. !! The first and last point are always reported. class ( root_method ), intent ( in ), optional :: solver !! the root-finding method to use for even finding. !! if not present, then `brent_solver` is used. real ( wp ), parameter :: default_tol = 100 * epsilon ( 1.0_wp ) !! if tols not specified ! base init: call me % init ( n , f , report , g , stop_on_errors , max_number_of_steps , report_rate , solver ) ! variable-step specific inputs: if ( allocated ( me % rtol )) deallocate ( me % rtol ) if ( allocated ( me % atol )) deallocate ( me % atol ) allocate ( me % rtol ( n )) allocate ( me % atol ( n )) if ( present ( rtol )) then if ( size ( rtol ) == 1 ) then me % rtol = abs ( rtol ( 1 )) !use this for all equations else if ( size ( rtol ) == n ) then me % rtol = abs ( rtol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_RTOL_SIZE ) end if else me % rtol = default_tol end if if ( present ( atol )) then if ( size ( atol ) == 1 ) then me % atol = abs ( atol ( 1 )) !use this for all equations else if ( size ( atol ) == n ) then me % atol = abs ( atol ) else call me % raise_exception ( RKLIB_ERROR_INVALID_ATOL_SIZE ) end if else me % atol = default_tol end if if ( present ( hinit_method )) then if ( any ( hinit_method == [ 1 , 2 ])) then me % hinit_method = hinit_method else call me % raise_exception ( RKLIB_ERROR_INVALID_HINIT_METHOD ) return end if end if if ( present ( stepsize_method )) me % stepsize_method = stepsize_method ! reset internal variables: me % num_rejected_steps = 0 me % last_accepted_step_size = zero end subroutine initialize_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Return some info about the integration. subroutine info_variable_step ( me , num_steps , num_rejected_steps , last_accepted_step_size ) implicit none class ( rk_variable_step_class ), intent ( in ) :: me integer , intent ( out ), optional :: num_steps !! number of steps taken integer , intent ( out ), optional :: num_rejected_steps !! number of rejected steps real ( wp ), intent ( out ), optional :: last_accepted_step_size !! the last accepted step size !! `dt` from the integration !! (positive or negative) if ( present ( num_steps )) num_steps = me % num_steps if ( present ( num_rejected_steps )) num_rejected_steps = me % num_rejected_steps if ( present ( last_accepted_step_size )) last_accepted_step_size = me % last_accepted_step_size end subroutine info_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Compute the initial step size. function compute_initial_step ( me , t0 , tf , x0 , h0 ) result ( dt ) class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: h0 !! user-input initial step size (if zero, then one is computed) real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), intent ( in ) :: tf !! final time real ( wp ) :: dt !! step size to use real ( wp ), dimension ( me % n ) :: x0 !! initial state real ( wp ), dimension ( me % n ) :: etol !! tolerance vector real ( wp ), dimension ( me % n ) :: f0 !! initial derivative if ( abs ( h0 ) <= zero ) then ! compute an appropriate initial step size: etol = me % rtol * me % stepsize_method % norm ( x0 ) + me % atol call me % f ( t0 , x0 , f0 ) ! get initial dx/dt select case ( me % hinit_method ) ! value was checked in initialize_variable_step case ( 1 ); call me % hstart ( t0 , tf , x0 , f0 , etol , dt ) case ( 2 ); dt = me % hinit ( t0 , x0 , sign ( 1.0_wp , tf - t0 ), f0 ,& me % stepsize_method % hmax ,& me % atol , me % rtol ) end select else ! user-specified initial step size: dt = sign ( h0 , tf - t0 ) ! (correct sign) end if end function compute_initial_step !***************************************************************************************** !***************************************************************************************** !> ! Main integration routine for the [[rk_variable_step_class]]. subroutine integrate_variable_step ( me , t0 , x0 , h , tf , xf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension (:), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! initial abs(time step) real ( wp ), intent ( in ) :: tf !! final time real ( wp ), dimension (:), intent ( out ) :: xf !! final state real ( wp ) :: t , dt , t2 , dt_new real ( wp ), dimension ( me % n ) :: x , xerr , tol logical :: last !! it is the last step logical :: accept !! the step is accepted integer :: i !! max step size reduction attempts counter integer :: p !! order of the method if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tf ) <= zero ) then xf = x0 else t = t0 x = x0 dt = me % compute_initial_step ( t0 , tf , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tf ) . or . & !adjust last time step ( dt < zero . and . t2 <= tf )) ! if ( last ) dt = tf - t ! do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) tol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , tol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tf ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tf )) ! if ( last ) dt = tf - t ! t2 = t + dt end if end do if ( last ) exit call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point end subroutine integrate_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Event-finding integration routine for the [[rk_variable_step_class]]. ! Integrates until g(t,x)=0, or until t=tf (whichever happens first). ! !@note There are some efficiency improvements that could be made here. ! This is a work in progress. subroutine integrate_to_event_variable_step ( me , t0 , x0 , h , tmax , tol , tf , xf , gf ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t0 !! initial time real ( wp ), dimension ( me % n ), intent ( in ) :: x0 !! initial state real ( wp ), intent ( in ) :: h !! abs(time step) real ( wp ), intent ( in ) :: tmax !! max final time if event not located real ( wp ), intent ( in ) :: tol !! function tolerance for root finding real ( wp ), intent ( out ) :: tf !! actual final time reached real ( wp ), dimension ( me % n ), intent ( out ) :: xf !! final state (at tf) real ( wp ), intent ( out ) :: gf !! g value at tf real ( wp ), dimension ( me % n ) :: x , g_xf real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate real ( wp ), dimension ( me % n ) :: stol integer :: i , p , iflag real ( wp ) :: t , dt , t2 , ga , gb , dt_root , dum , dt_new logical :: first , last , accept if (. not . associated ( me % f )) then call me % raise_exception ( RKLIB_ERROR_F_NOT_ASSOCIATED ) return end if if (. not . associated ( me % g )) then call me % raise_exception ( RKLIB_ERROR_G_NOT_ASSOCIATED ) return end if call me % begin_integration () call me % export_point ( t0 , x0 ,. true .) !first point if ( abs ( t0 - tmax ) <= zero ) then xf = x0 tf = t0 call me % g ( t0 , x0 , gf ) else first = . true . t = t0 x = x0 call me % g ( t , x , ga ) !evaluate event function dt = me % compute_initial_step ( t0 , tmax , x0 , h ) p = me % order () !order of the method do t2 = t + dt last = (( dt >= zero . and . t2 >= tmax ) . or . & !adjust last time step ( dt < zero . and . t2 <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax end if do i = 0 , me % stepsize_method % max_attempts ! take a step: call me % step ( t , x , dt , xf , xerr ) if ( me % stopped ) return if ( me % stepsize_method % fixed_step_mode ) then ! don't adjust the step size accept = . true . me % last_accepted_step_size = dt ! save it [really only needs to be done once] else ! evaluate error and compute new step size: xerr = abs ( xerr ) stol = me % rtol * abs ( xf ) + me % atol call me % stepsize_method % compute_stepsize ( me % n , dt , stol , xerr , p , dt_new , accept ) if ( accept ) me % last_accepted_step_size = dt ! save it dt = dt_new end if if ( accept ) then !accept this step me % num_steps = me % num_steps + 1 if ( me % num_steps > me % max_number_of_steps ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_STEPS ) return end if exit else !step is rejected, repeat step with new dt me % num_rejected_steps = me % num_rejected_steps + 1 !note: if we have reached the min step size, and the error !is still too large, we can't proceed. if ( i >= me % stepsize_method % max_attempts ) then call me % raise_exception ( RKLIB_ERROR_TOO_MANY_REDUCTIONS ) return end if if ( abs ( dt ) < abs ( me % stepsize_method % hmin )) then call me % raise_exception ( RKLIB_ERROR_MIN_STEP_SIZE ) return end if last = (( dt >= zero . and . ( t + dt ) >= tmax ) . or . & !adjust last time step ( dt < zero . and . ( t + dt ) <= tmax )) ! if ( last ) then dt = tmax - t t2 = tmax else t2 = t + dt end if end if end do call me % g ( t2 , xf , gb ) !evaluate event function if ( first . and . abs ( ga ) <= tol ) then !we ignore a root at t0 after the first step if ( abs ( gb ) <= tol ) then !check this one since it could have landed on a root gf = gb tf = t2 exit else if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if elseif ( ga * gb <= zero ) then !there is a root somewhere on [t,t+dt] !find the root: call root_scalar ( me % solver , solver_func , zero , dt , dt_root , dum , iflag ,& fax = ga , fbx = gb , rtol = tol , atol = tol ) ! ftol,maxiter,bisect_on_failure) ! other options if ( me % stopped ) return t2 = t + dt_root gf = solver_func ( dt_root ) if ( me % stopped ) return tf = t2 xf = g_xf !computed in the solver function exit else !no root yet, continue if ( last ) then !exiting without having found a root tf = t2 gf = gb exit end if call me % export_point ( t2 , xf ) !intermediate point x = xf t = t2 ga = gb end if if ( first ) first = . false . if ( last ) exit x = xf t = t2 end do end if call me % export_point ( tf , xf ,. true .) !last point contains function solver_func ( delt ) result ( g ) !! root solver function. The input is the `dt` offset from time `t`. implicit none real ( wp ), intent ( in ) :: delt !! from [0 to `dt`] real ( wp ) :: g real ( wp ), dimension ( me % n ) :: xerr !! truncation error estimate !take a step from t to t+delt and evaluate g function: ! [we don't check the error because we are within a ! step that was already accepted, so it should be ok] call me % step ( t , x , delt , g_xf , xerr ) if ( me % stopped ) return call me % g ( t + delt , g_xf , g ) end function solver_func end subroutine integrate_to_event_variable_step !***************************************************************************************** !***************************************************************************************** !> ! Computes a starting step size to be used in solving initial ! value problems in ordinary differential equations. ! ! It is based on an estimate of the local lipschitz constant for the ! differential equation (lower bound on a norm of the jacobian) , ! a bound on the differential equation (first derivative), and ! a bound on the partial derivative of the equation with respect to ! the independent variable. (all approximated near the initial point a) ! !@note Subroutine hstart also uses the `me%stepsize_method%norm` ! function for computing vector norms ! !@note This routine is from [DDEABM](https://github.com/jacobwilliams/ddeabm). ! !# History ! * 820301 date written -- watts, h. a., (snla) ! * 890531 changed all specific intrinsics to generic. (wrb) ! * 890831 modified array declarations. (wrb) ! * 890911 removed unnecessary intrinsics. (wrb) ! * 891024 changed references from dvnorm to dhvnrm. (wrb) ! * 891214 prologue converted to version 4.0 format. (bab) ! * 900328 added type section. (wrb) ! * 910722 updated author section. (als) ! * December, 2015 : Refactored this routine (jw) ! * April 2016 : Some modifications for the variable-step RK module (jw) subroutine hstart ( me , a , b , y , yprime , etol , h ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: a !! the initial point of integration. real ( wp ), intent ( in ) :: b !! a value of the independent variable used to define !! the direction of integration. a reasonable choice is to !! set `b` to the first point at which a solution is desired. !! you can also use `b`, if necessary, to restrict the length !! of the first integration step because the algorithm will !! not compute a starting step length which is bigger than !! `abs(b-a)`, unless `b` has been chosen too close to `a`. !! (it is presumed that hstart has been called with `b` !! different from `a` on the machine being used. also see the !! discussion about the parameter `small`.) real ( wp ), dimension ( me % n ), intent ( in ) :: y !! the vector of initial values of the `neq` solution !! components at the initial point `a`. real ( wp ), dimension ( me % n ), intent ( in ) :: yprime !! the vector of derivatives of the `neq` !! solution components at the initial point `a`. !! (defined by the differential equations in subroutine `me%f`) real ( wp ), dimension ( me % n ), intent ( in ) :: etol !! the vector of error tolerances corresponding to !! the `neq` solution components. it is assumed that all !! elements are positive. following the first integration !! step, the tolerances are expected to be used by the !! integrator in an error test which roughly requires that !! `abs(local error) <= etol` for each vector component. real ( wp ), intent ( out ) :: h !! appropriate starting step size to be attempted by the !! differential equation method. real ( wp ), dimension ( me % n ) :: spy !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: pv !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: yp !! work array which provide the routine with needed storage space. real ( wp ), dimension ( me % n ) :: sf !! work array which provide the routine with needed storage space. real ( wp ), parameter :: small = epsilon ( 1.0_wp ) real ( wp ), parameter :: big = huge ( 1.0_wp ) real ( wp ), parameter :: relper = small ** 0.375_wp integer :: j , k , lk real ( wp ) :: absdx , da , delf , dely ,& dfdub , dfdxb ,& dx , dy , fbnd ,& srydpb , tolexp , tolmin , tolp , tolsum , ydpb integer :: morder !! the order of the formula which will be used by !! the initial value method for taking the first integration !! step. morder = me % order () dx = b - a absdx = abs ( dx ) ! compute an approximate bound (dfdxb) on the partial ! derivative of the equation with respect to the ! independent variable. protect against an overflow. ! also compute a bound (fbnd) on the first derivative ! locally. da = sign ( max ( min ( relper * abs ( a ), absdx ), 10 0.0_wp * small * abs ( a )), dx ) if ( da == zero ) da = relper * dx call me % f ( a + da , y , sf ) yp = sf - yprime delf = me % stepsize_method % norm ( yp ) dfdxb = big if ( delf < big * abs ( da )) dfdxb = delf / abs ( da ) fbnd = me % stepsize_method % norm ( sf ) ! compute an estimate (dfdub) of the local lipschitz ! constant for the system of differential equations. this ! also represents an estimate of the norm of the jacobian ! locally. three iterations (two when neq=1) are used to ! estimate the lipschitz constant by numerical differences. ! the first perturbation vector is based on the initial ! derivatives and direction of integration. the second ! perturbation vector is formed using another evaluation of ! the differential equation. the third perturbation vector ! is formed using perturbations based only on the initial ! values. components that are zero are always changed to ! non-zero values (except on the first iteration). when ! information is available, care is taken to ensure that ! components of the perturbation vector have signs which are ! consistent with the slopes of local solution curves. ! also choose the largest bound (fbnd) for the first ! derivative. ! ! perturbation vector size is held ! constant for all iterations. compute ! this change from the ! size of the vector of initial ! values. dely = relper * me % stepsize_method % norm ( y ) if ( dely == zero ) dely = relper dely = sign ( dely , dx ) delf = me % stepsize_method % norm ( yprime ) fbnd = max ( fbnd , delf ) if ( delf == zero ) then ! cannot have a null perturbation vector spy = zero yp = 1.0_wp delf = me % stepsize_method % norm ( yp ) else ! use initial derivatives for first perturbation spy = yprime yp = yprime end if dfdub = zero lk = min ( me % n + 1 , 3 ) do k = 1 , lk ! define perturbed vector of initial values pv = y + yp * ( dely / delf ) if ( k == 2 ) then ! use a shifted value of the independent variable ! in computing one estimate call me % f ( a + da , pv , yp ) pv = yp - sf else ! evaluate derivatives associated with perturbed ! vector and compute corresponding differences call me % f ( a , pv , yp ) pv = yp - yprime end if ! choose largest bounds on the first derivative ! and a local lipschitz constant fbnd = max ( fbnd , me % stepsize_method % norm ( yp )) delf = me % stepsize_method % norm ( pv ) if ( delf >= big * abs ( dely )) then ! protect against an overflow dfdub = big exit end if dfdub = max ( dfdub , delf / abs ( dely )) if ( k == lk ) exit ! choose next perturbation vector if ( delf == zero ) delf = 1.0_wp do j = 1 , me % n if ( k == 2 ) then dy = y ( j ) if ( dy == zero ) dy = dely / relper else dy = abs ( pv ( j )) if ( dy == zero ) dy = delf end if if ( spy ( j ) == zero ) spy ( j ) = yp ( j ) if ( spy ( j ) /= zero ) dy = sign ( dy , spy ( j )) yp ( j ) = dy end do delf = me % stepsize_method % norm ( yp ) end do ! compute a bound (ydpb) on the norm of the second derivative ydpb = dfdxb + dfdub * fbnd ! define the tolerance parameter upon which the starting step ! size is to be based. a value in the middle of the error ! tolerance range is selected. tolmin = big tolsum = zero do k = 1 , me % n tolexp = log10 ( etol ( k )) tolmin = min ( tolmin , tolexp ) tolsum = tolsum + tolexp end do tolp = 1 0.0_wp ** ( 0.5_wp * ( tolsum / me % n + tolmin ) / ( morder + 1 )) ! compute a starting step size based on the above first and ! second derivative information ! ! restrict the step length to be not bigger ! than abs(b-a). (unless b is too close to a) h = absdx if ( ydpb == zero . and . fbnd == zero ) then ! both first derivative term (fbnd) and second ! derivative term (ydpb) are zero if ( tolp < 1.0_wp ) h = absdx * tolp elseif ( ydpb == zero ) then ! only second derivative term (ydpb) is zero if ( tolp < fbnd * absdx ) h = tolp / fbnd else ! second derivative term (ydpb) is non-zero srydpb = sqrt ( 0.5_wp * ydpb ) if ( tolp < srydpb * absdx ) h = tolp / srydpb end if ! further restrict the step length to be not bigger than 1/dfdub if ( h * dfdub > 1.0_wp ) h = 1.0_wp / dfdub ! finally, restrict the step length to be not ! smaller than 100*small*abs(a). however, if ! a=0. and the computed h underflowed to zero, ! the algorithm returns small*abs(b) for the step length. h = max ( h , 10 0.0_wp * small * abs ( a )) if ( h == zero ) h = small * abs ( b ) ! now set direction of integration h = sign ( h , dx ) end subroutine hstart !***************************************************************************************** !***************************************************************************************** !> ! computation of an initial step size guess ! !@note This routine is from dop853. It was modified for this module. function hinit ( me , x , y , posneg , f0 , hmax , atol , rtol ) implicit none class ( rk_variable_step_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: x real ( wp ), dimension (:), intent ( in ) :: y !! dimension(n) real ( wp ), intent ( in ) :: posneg !! posneg = sign(1.0_wp,xend-x) real ( wp ), dimension (:), intent ( in ) :: f0 !! dimension(n) real ( wp ), intent ( in ) :: hmax real ( wp ), dimension (:), intent ( in ) :: atol real ( wp ), dimension (:), intent ( in ) :: rtol real ( wp ) :: der12 , der2 , dnf , dny , h , h1 , hinit , sk integer :: i integer :: iord !! order of the method real ( wp ), dimension ( me % n ) :: f1 , y1 iord = me % order () ! compute a first guess for explicit euler as ! h = 0.01 * norm (y0) / norm (f0) ! the increment for explicit euler is small ! compared to the solution dnf = zero dny = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) dnf = dnf + ( f0 ( i ) / sk ) ** 2 dny = dny + ( y ( i ) / sk ) ** 2 end do if ( dnf <= 1.0e-10_wp . or . dny <= 1.0e-10_wp ) then h = 1.0e-6_wp else h = sqrt ( dny / dnf ) * 0.01_wp end if h = min ( h , hmax ) h = sign ( h , posneg ) ! perform an explicit euler step do i = 1 , me % n y1 ( i ) = y ( i ) + h * f0 ( i ) end do call me % f ( x + h , y1 , f1 ) ! estimate the second derivative of the solution der2 = zero do i = 1 , me % n sk = atol ( i ) + rtol ( i ) * abs ( y ( i )) der2 = der2 + (( f1 ( i ) - f0 ( i )) / sk ) ** 2 end do der2 = sqrt ( der2 ) / h ! step size is computed such that ! h**iord * max ( norm (f0), norm (der2)) = 0.01 der12 = max ( abs ( der2 ), sqrt ( dnf )) if ( der12 <= 1.0e-15_wp ) then h1 = max ( 1.0e-6_wp , abs ( h ) * 1.0e-3_wp ) else h1 = ( 0.01_wp / der12 ) ** ( 1.0_wp / iord ) end if h = min ( 10 0.0_wp * abs ( h ), h1 , hmax ) hinit = sign ( h , posneg ) end function hinit !***************************************************************************************** !***************************************************************************************** end module rklib_module !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_module.f90.html"},{"title":"rklib_fixed_steps.f90 – rklib","text":"This file depends on sourcefile~~rklib_fixed_steps.f90~~EfferentGraph sourcefile~rklib_fixed_steps.f90 rklib_fixed_steps.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_fixed_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_fixed_steps Source Code rklib_fixed_steps.f90 Source Code !***************************************************************************************** !> ! Fixed-step RK formulas. submodule ( rklib_module ) rklib_fixed_steps implicit none contains !***************************************************************************************** !***************************************************************************************** !> ! Euler (1st order) integration method. module procedure euler associate ( f1 => me % funcs (:, 1 )) call me % f ( t , x , f1 ) xf = x + h * f1 end associate end procedure euler !***************************************************************************************** !***************************************************************************************** !> ! Midpoint (2nd order) integration method. module procedure midpoint associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 )) call me % f ( t , x , f1 ) call me % f ( t + 0.5_wp * h , x + 0.5_wp * h * f1 , f2 ) xf = x + h * f2 end associate end procedure midpoint !***************************************************************************************** !***************************************************************************************** !> ! Heun's (2nd order) integration method module procedure heun associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 )) call me % f ( t , x , f1 ) call me % f ( t + h , x + h * f1 , f2 ) xf = x + 0.5_wp * h * ( f1 + f2 ) end associate end procedure heun !***************************************************************************************** !***************************************************************************************** !> ! 2-stage, 2nd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. ! !### Reference ! * C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory ! shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471. ! https://doi.org/10.1016/0021-9991(88)90177-5. module procedure rkssp22 associate ( fs => me % funcs (:, 1 )) call me % f ( t , x , fs ) xf = x + h * fs call me % f ( t + h , xf , fs ) xf = ( x + xf + h * fs ) / 2.0_wp end associate end procedure rkssp22 !***************************************************************************************** !***************************************************************************************** !> ! 3rd order, 3 steps RK integration method module procedure rk3 real ( wp ), parameter :: a1 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a2 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b2 = 1.0_wp / 2.0_wp !real(wp),parameter :: b3 = 1.0_wp real ( wp ), parameter :: c21 = 1.0_wp / 2.0_wp !real(wp),parameter :: c31 = -1.0_wp real ( wp ), parameter :: c32 = 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 )) call me % f ( t , x , f1 ) call me % f ( t + b2 * h , x + h * c21 * f1 , f2 ) call me % f ( t + h , x + h * ( - f1 + c32 * f2 ), f3 ) xf = x + h * ( a1 * f1 + a2 * f2 + a3 * f3 ) end associate end procedure rk3 !***************************************************************************************** !***************************************************************************************** !> ! 3-stage, 3rd order TVD Runge-Kutta method of Shu and Osher (1988). CFL=1.0. ! !### Reference ! * C.-W. Shu, S. Osher, \"Efficient implementation of essentially non-oscillatory ! shock-capturing schemes\", Journal of Computational Physics, 77, 1988, 439-471. ! https://doi.org/10.1016/0021-9991(88)90177-5. module procedure rkssp33 associate ( fs => me % funcs (:, 1 )) call me % f ( t , x , fs ) xf = x + h * fs call me % f ( t + h , xf , fs ) xf = ( 3.0_wp * x + xf + h * fs ) / 4.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = ( x + 2.0_wp * xf + 2.0_wp * h * fs ) / 3.0_wp end associate end procedure rkssp33 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 3rd order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=2.65. ! !### Reference ! * Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta ! methods.\" Mathematics of Computation 75.253 (2006): 183-207. ! https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf ! !@note the coefficients here are only 15 digits of precision. module procedure rkssp53 real ( wp ), parameter :: a30 = 0.355909775063327_wp real ( wp ), parameter :: a32 = 0.644090224936674_wp real ( wp ), parameter :: a40 = 0.367933791638137_wp real ( wp ), parameter :: a43 = 0.632066208361863_wp real ( wp ), parameter :: a52 = 0.237593836598569_wp real ( wp ), parameter :: a54 = 0.762406163401431_wp real ( wp ), parameter :: b10 = 0.377268915331368_wp real ( wp ), parameter :: b21 = 0.377268915331368_wp real ( wp ), parameter :: b32 = 0.242995220537396_wp real ( wp ), parameter :: b43 = 0.238458932846290_wp real ( wp ), parameter :: b54 = 0.287632146308408_wp real ( wp ), parameter :: c1 = 0.377268915331368_wp real ( wp ), parameter :: c2 = 0.754537830662736_wp real ( wp ), parameter :: c3 = 0.728985661612188_wp real ( wp ), parameter :: c4 = 0.699226135931670_wp associate ( xs => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) call me % f ( t , x , fs ) ! x1 as xs xs = x + b10 * h * fs call me % f ( t + c1 * h , xs , fs ) ! x2 as xf xf = xs + b21 * h * fs call me % f ( t + c2 * h , xf , fs ) ! x3 as xs xs = a30 * x + a32 * xf + b32 * h * fs call me % f ( t + c3 * h , xs , fs ) ! x4 as xs xs = a40 * x + a43 * xs + b43 * h * fs call me % f ( t + c4 * h , xs , fs ) xf = a52 * xf + a54 * xs + b54 * h * fs end associate end procedure rkssp53 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 4 integration step: `t -> t+h (x -> xf)` module procedure rk4 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & h2 => 0.5_wp * h ) call me % f ( t , x , f1 ) call me % f ( t + h2 , x + h2 * f1 , f2 ) call me % f ( t + h2 , x + h2 * f2 , f3 ) call me % f ( t + h , x + h * f3 , f4 ) xf = x + h * ( f1 + f2 + f2 + f3 + f3 + f4 ) / 6.0_wp end associate end procedure rk4 !***************************************************************************************** !***************************************************************************************** !> ! 4th order Runge Kutta Shanks (4 points) ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rks4 real ( wp ), parameter :: a1 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: a2 = 3.0_wp / 5.0_wp !real(wp),parameter :: a3 = 1.0_wp real ( wp ), parameter :: c = 1.0_wp / 7009 2.0_wp real ( wp ), parameter :: c0 = - 17912 4.0_wp real ( wp ), parameter :: c1 = 20000 0.0_wp real ( wp ), parameter :: c2 = 4042 5.0_wp real ( wp ), parameter :: c3 = 879 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 24 5.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 879 1.0_wp real ( wp ), parameter :: b20 = - 427 8.0_wp real ( wp ), parameter :: b21 = 442 5.0_wp real ( wp ), parameter :: b30 = 52474 6.0_wp real ( wp ), parameter :: b31 = - 53212 5.0_wp real ( wp ), parameter :: b32 = 1617 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + h , x + aa3 * h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) xf = x + h * c * ( c0 * f0 + c1 * f1 + c2 * f2 + c3 * f3 ) end associate end procedure rks4 !***************************************************************************************** !***************************************************************************************** !> ! Ralston 4th order method with minimum truncation error. ! !### Reference ! * Ralston, Anthony (1962). ! \"[Runge-Kutta Methods with Minimum Error Bounds](https://www.ams.org/journals/mcom/1962-16-080/S0025-5718-1962-0150954-0/S0025-5718-1962-0150954-0.pdf)\". ! Math. Comput. 16 (80): 431-437. module procedure rkr4 real ( wp ), parameter :: sqrt5 = sqrt ( 5.0_wp ) real ( wp ), parameter :: a2 = 4.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = ( 1 4.0_wp - 3.0_wp * sqrt5 ) / 1 6.0_wp ! .45573725 real ( wp ), parameter :: b21 = 4.0_wp / 1 0.0_wp real ( wp ), parameter :: b31 = ( - 288 9.0_wp + 142 8.0_wp * sqrt5 ) / 102 4.0_wp ! .29697761 real ( wp ), parameter :: b32 = ( 378 5.0_wp - 162 0.0_wp * sqrt5 ) / 102 4.0_wp ! .15875964 real ( wp ), parameter :: b41 = ( - 336 5.0_wp + 209 4.0_wp * sqrt5 ) / 604 0.0_wp ! .21810040 real ( wp ), parameter :: b42 = ( - 97 5.0_wp - 304 6.0_wp * sqrt5 ) / 255 2.0_wp ! -3.05096516 real ( wp ), parameter :: b43 = ( 46704 0.0_wp + 20396 8.0_wp * sqrt5 ) / 24084 5.0_wp ! 3.83286476 real ( wp ), parameter :: c1 = ( 26 3.0_wp + 2 4.0_wp * sqrt5 ) / 181 2.0_wp ! .17476028 real ( wp ), parameter :: c2 = ( 12 5.0_wp - 100 0.0_wp * sqrt5 ) / 382 8.0_wp ! -.55148066 real ( wp ), parameter :: c3 = 102 4.0_wp * ( 334 6.0_wp + 162 3.0_wp * sqrt5 ) / 592478 7.0_wp ! 1.20553560 real ( wp ), parameter :: c4 = ( 3 0.0_wp - 4.0_wp * sqrt5 ) / 12 3.0_wp ! .17118478 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 ) end associate end procedure rkr4 !***************************************************************************************** !***************************************************************************************** !> ! 4-stage, 4th order low storage non-TVD Runge-Kutta method of Jiang and Shu (1988). ! !### Reference ! * Method: Jiang, Guang-Shan, and Chi-Wang Shu. \"Efficient implementation of weighted ENO ! schemes.\" Journal of computational physics 126.1 (1996): 202-228. ! https://ntrs.nasa.gov/api/citations/19960007052/downloads/19960007052.pdf ! * Implementation: J. M. F. Donnert et al 2019 ApJS 241 23. ! https://iopscience.iop.org/article/10.3847/1538-4365/ab09fb module procedure rkls44 associate ( xs => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) xf = x xs = - 4.0_wp * x / 3.0_wp call me % f ( t , xf , fs ) xf = x + h * fs / 2.0_wp xs = xs + xf / 3.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = x + h * fs / 2.0_wp xs = xs + 2.0_wp * xf / 3.0_wp call me % f ( t + h / 2.0_wp , xf , fs ) xf = x + h * fs xs = xs + xf / 3.0_wp call me % f ( t + h , xf , fs ) xf = x + h * fs / 6.0_wp xf = xf + xs end associate end procedure rkls44 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 4th order SSP Runge-Kutta method of Spiteri and Ruuth (2005). CFL=1.508. ! !### Reference ! * Ruuth, Steven. \"Global optimization of explicit strong-stability-preserving Runge-Kutta ! methods.\" Mathematics of Computation 75.253 (2006): 183-207. ! https://www.ams.org/journals/mcom/2006-75-253/S0025-5718-05-01772-2/S0025-5718-05-01772-2.pdf module procedure rkssp54 real ( wp ), parameter :: b10 = 0.391752226571890_wp real ( wp ), parameter :: a20 = 0.444370493651235_wp real ( wp ), parameter :: a21 = 0.555629506348765_wp real ( wp ), parameter :: b21 = 0.368410593050371_wp real ( wp ), parameter :: a30 = 0.620101851488403_wp real ( wp ), parameter :: a32 = 0.379898148511597_wp real ( wp ), parameter :: b32 = 0.251891774271694_wp real ( wp ), parameter :: a40 = 0.178079954393132_wp real ( wp ), parameter :: a43 = 0.821920045606868_wp real ( wp ), parameter :: b43 = 0.544974750228521_wp real ( wp ), parameter :: a52 = 0.517231671970585_wp real ( wp ), parameter :: a53 = 0.096059710526147_wp real ( wp ), parameter :: b53 = 0.063692468666290_wp real ( wp ), parameter :: a54 = 0.386708617503269_wp real ( wp ), parameter :: b54 = 0.226007483236906_wp real ( wp ), parameter :: c1 = 0.391752226571890_wp real ( wp ), parameter :: c2 = 0.586079689311540_wp real ( wp ), parameter :: c3 = 0.474542363121400_wp real ( wp ), parameter :: c4 = 0.935010630967653_wp associate ( x2 => me % funcs (:, 1 ), & x3 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & fs => me % funcs (:, 4 )) call me % f ( t , x , fs ) ! x2 as x1 x2 = x + b10 * h * fs call me % f ( t + c1 * h , x2 , fs ) x2 = a20 * x + a21 * x2 + b21 * h * fs call me % f ( t + c2 * h , x2 , fs ) x3 = a30 * x + a32 * x2 + b32 * h * fs call me % f ( t + c3 * h , x3 , f3 ) ! xf as x4 xf = a40 * x + a43 * x3 + b43 * h * f3 call me % f ( t + c4 * h , xf , fs ) xf = a52 * x2 + a53 * x3 + b53 * h * f3 + a54 * xf + b54 * h * fs end associate end procedure rkssp54 !***************************************************************************************** !***************************************************************************************** !> ! 5-stage, 4th order low storage Runge-Kutta method of Carpenter and Kennedy (1994). ! CFL<=0.32 ! !### Reference ! * Carpenter, Mark H., and Christopher A. Kennedy. Fourth-order 2N-storage Runge-Kutta ! schemes. No. NASA-TM-109112. 1994. ! https://ntrs.nasa.gov/api/citations/19940028444/downloads/19940028444.pdf module procedure rkls54 real ( wp ), parameter :: a ( 2 : 5 ) = [ - 56730180577 3.0_wp / 135753705908 7.0_wp , & - 240426799039 3.0_wp / 201674669523 8.0_wp , & - 355091868664 6.0_wp / 209150117938 5.0_wp , & - 127580623766 8.0_wp / 84257045769 9.0_wp ] real ( wp ), parameter :: b ( 1 : 5 ) = [ 143299717447 7.0_wp / 957508044175 5.0_wp , & 516183667771 7.0_wp / 1361206829235 7.0_wp , & 172014632154 9.0_wp / 209020694949 8.0_wp , & 313456435353 7.0_wp / 448146731033 8.0_wp , & 227782119143 7.0_wp / 1488215175481 9.0_wp ] real ( wp ), parameter :: c ( 2 : 5 ) = [ 143299717447 7.0_wp / 957508044175 5.0_wp , & 252626934142 9.0_wp / 682036396289 6.0_wp , & 200634551931 7.0_wp / 322431006377 6.0_wp , & 280232161313 8.0_wp / 292431792625 1.0_wp ] integer :: i !! counter associate ( ds => me % funcs (:, 1 ), & fs => me % funcs (:, 2 )) call me % f ( t , x , fs ) ds = h * fs xf = x + b ( 1 ) * ds do i = 2 , 5 call me % f ( t + c ( i ) * h , xf , fs ) ds = a ( i ) * ds + h * fs xf = xf + b ( i ) * ds end do end associate end procedure rkls54 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Shanks (5th order) ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rks5 real ( wp ), parameter :: a1 = 1.0_wp / 900 0.0_wp real ( wp ), parameter :: a2 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 4.0_wp real ( wp ), parameter :: c = 1.0_wp / 113 4.0_wp real ( wp ), parameter :: c0 = 10 5.0_wp real ( wp ), parameter :: c2 = 50 0.0_wp real ( wp ), parameter :: c3 = 44 8.0_wp real ( wp ), parameter :: c4 = 8 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 900 0.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 8 1.0_wp real ( wp ), parameter :: b20 = - 404 7.0_wp real ( wp ), parameter :: b21 = 405 0.0_wp real ( wp ), parameter :: b30 = 2024 1.0_wp real ( wp ), parameter :: b31 = - 2025 0.0_wp real ( wp ), parameter :: b32 = 1 5.0_wp real ( wp ), parameter :: b40 = - 93104 1.0_wp real ( wp ), parameter :: b41 = 93150 0.0_wp real ( wp ), parameter :: b42 = - 49 0.0_wp real ( wp ), parameter :: b43 = 11 2.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + aa4 * h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) xf = x + h * c * ( c0 * f0 + c2 * f2 + c3 * f3 + c4 * f4 ) end associate end procedure rks5 !***************************************************************************************** !***************************************************************************************** !> ! Runge's 5th order method. module procedure rk5 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b41 = 9.0_wp / 4.0_wp real ( wp ), parameter :: b42 = - 5.0_wp real ( wp ), parameter :: b43 = 1 5.0_wp / 4.0_wp real ( wp ), parameter :: b51 = - 6 3.0_wp / 10 0.0_wp real ( wp ), parameter :: b52 = 9.0_wp / 5.0_wp real ( wp ), parameter :: b53 = - 1 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b54 = 2.0_wp / 2 5.0_wp real ( wp ), parameter :: b61 = - 6.0_wp / 2 5.0_wp real ( wp ), parameter :: b62 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b63 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b64 = 8.0_wp / 7 5.0_wp real ( wp ), parameter :: c1 = 1 7.0_wp / 14 4.0_wp real ( wp ), parameter :: c3 = 2 5.0_wp / 3 6.0_wp real ( wp ), parameter :: c4 = 1.0_wp / 7 2.0_wp real ( wp ), parameter :: c5 = - 2 5.0_wp / 7 2.0_wp real ( wp ), parameter :: c6 = 2 5.0_wp / 4 8.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rk5 !***************************************************************************************** !***************************************************************************************** !> ! Cassity's Order 5 method ! !### Reference ! * C.R. Cassity, Solutions of the fifth order Runge-Kutta equations, ! SIAM J. Numer. Anal., 3, (1966), pp. 598-606 ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5a_3.pdf) module procedure rkc5 real ( wp ), parameter :: a2 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a3 = 5.0_wp / 1 4.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 1 4.0_wp real ( wp ), parameter :: a5 = 6.0_wp / 7.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b31 = - 36 7.0_wp / 408 8.0_wp real ( wp ), parameter :: b32 = 26 1.0_wp / 58 4.0_wp real ( wp ), parameter :: b41 = 4199 1.0_wp / 204 4.0_wp real ( wp ), parameter :: b42 = - 249 3.0_wp / 7 3.0_wp real ( wp ), parameter :: b43 = 5 7.0_wp / 4.0_wp real ( wp ), parameter :: b51 = - 10841 3.0_wp / 19622 4.0_wp real ( wp ), parameter :: b52 = 5886 5.0_wp / 6540 8.0_wp real ( wp ), parameter :: b53 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b54 = 26 5.0_wp / 134 4.0_wp real ( wp ), parameter :: b61 = - 20441 9.0_wp / 5898 4.0_wp real ( wp ), parameter :: b62 = 14382 9.0_wp / 5898 4.0_wp real ( wp ), parameter :: b63 = 17 1.0_wp / 20 2.0_wp real ( wp ), parameter :: b64 = 220 5.0_wp / 40 4.0_wp real ( wp ), parameter :: b65 = - 43 2.0_wp / 10 1.0_wp real ( wp ), parameter :: c1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: c2 = 7.0_wp / 270 0.0_wp real ( wp ), parameter :: c3 = 41 3.0_wp / 81 0.0_wp real ( wp ), parameter :: c4 = 7.0_wp / 45 0.0_wp real ( wp ), parameter :: c5 = 2 8.0_wp / 7 5.0_wp real ( wp ), parameter :: c6 = - 10 1.0_wp / 810 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rkc5 !***************************************************************************************** !***************************************************************************************** !> ! 5th order Lawson ! !### References ! * An Order Five Runge Kutta Process with Extended Region of Stability, ! J. Douglas Lawson, Siam Journal on Numerical Analysis, ! Vol. 3, No. 4, (Dec., 1966) pages 593-597 module procedure rkl5 real ( wp ), parameter :: a2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b31 = - 1.0_wp / 8.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 8.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 5.0_wp real ( wp ), parameter :: b42 = - 9.0_wp / 1 0.0_wp real ( wp ), parameter :: b43 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b51 = 3 9.0_wp / 8 0.0_wp real ( wp ), parameter :: b52 = - 9.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b54 = 9.0_wp / 1 6.0_wp real ( wp ), parameter :: b61 = - 5 9.0_wp / 3 5.0_wp real ( wp ), parameter :: b62 = 6 6.0_wp / 3 5.0_wp real ( wp ), parameter :: b63 = 4 8.0_wp / 3 5.0_wp real ( wp ), parameter :: b64 = - 1 2.0_wp / 7.0_wp real ( wp ), parameter :: b65 = 8.0_wp / 7.0_wp real ( wp ), parameter :: c1 = 7.0_wp / 9 0.0_wp real ( wp ), parameter :: c3 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c4 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: c5 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c6 = 7.0_wp / 9 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) end associate end procedure rkl5 !***************************************************************************************** !***************************************************************************************** !> ! Luther and Konen's 5th order method (1) ! !### References ! * H.A.Luther and H.P.Konen, ! \"Some Fifth-Order Classical Runge Kutta Formulas\", ! Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. module procedure rklk5a real ( wp ), parameter :: sqrt5 = sqrt ( 5.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp - 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp + 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 1 0.0_wp - 1.0_wp / 1 0.0_wp * sqrt5 real ( wp ), parameter :: b41 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b42 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b51 = 1.0_wp / 2 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt5 real ( wp ), parameter :: b52 = - 1.0_wp / 5.0_wp real ( wp ), parameter :: b53 = 1.0_wp / 4.0_wp + 3.0_wp / 2 0.0_wp * sqrt5 real ( wp ), parameter :: b54 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b61 = 1.0_wp / 4.0_wp * sqrt5 - 1.0_wp / 4.0_wp real ( wp ), parameter :: b62 = 1.0_wp / 2.0_wp * sqrt5 - 1.0_wp / 2.0_wp real ( wp ), parameter :: b63 = 5.0_wp / 4.0_wp - 1.0_wp / 4.0_wp * sqrt5 real ( wp ), parameter :: b64 = - 2.0_wp real ( wp ), parameter :: b65 = 5.0_wp / 2.0_wp - 1.0_wp / 2.0_wp * sqrt5 real ( wp ), parameter :: c1 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: c3 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: c5 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: c6 = 1.0_wp / 1 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c5 * f5 + c6 * f6 ) end associate end procedure rklk5a !***************************************************************************************** !***************************************************************************************** !> ! Luther and Konen's 5th order method (2) ! !### References ! * H.A.Luther and H.P.Konen, ! \"Some Fifth-Order Classical Runge Kutta Formulas\", ! Siam Review, Vol. 3, No. 7, (Oct., 1965) pages 551-558. module procedure rklk5b real ( wp ), parameter :: sqrt15 = sqrt ( 1 5.0_wp ) real ( wp ), parameter :: a2 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp - 1.0_wp / 1 0.0_wp * sqrt15 real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp + 1.0_wp / 1 0.0_wp * sqrt15 real ( wp ), parameter :: b21 = 2.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 1 6.0_wp real ( wp ), parameter :: b32 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b42 = - 5.0_wp / 4.0_wp real ( wp ), parameter :: b43 = 2.0_wp real ( wp ), parameter :: b51 = 3.0_wp / 2 0.0_wp - 1.0_wp / 10 0.0_wp * sqrt15 real ( wp ), parameter :: b52 = - 1.0_wp / 4.0_wp real ( wp ), parameter :: b53 = 3.0_wp / 5.0_wp - 2.0_wp / 2 5.0_wp * sqrt15 real ( wp ), parameter :: b54 = - 1.0_wp / 10 0.0_wp * sqrt15 real ( wp ), parameter :: b61 = - 3.0_wp / 2 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt15 real ( wp ), parameter :: b62 = - 1.0_wp / 4.0_wp real ( wp ), parameter :: b63 = 3.0_wp / 5.0_wp real ( wp ), parameter :: b64 = 3.0_wp / 1 0.0_wp - 1.0_wp / 2 0.0_wp * sqrt15 real ( wp ), parameter :: b65 = 1.0_wp / 5.0_wp * sqrt15 real ( wp ), parameter :: c3 = 4.0_wp / 9.0_wp real ( wp ), parameter :: c5 = 5.0_wp / 1 8.0_wp real ( wp ), parameter :: c6 = 5.0_wp / 1 8.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c3 * f3 + c5 * f5 + c6 * f6 ) end associate end procedure rklk5b !***************************************************************************************** !***************************************************************************************** !> ! Butcher's 6th order method. 7 function evaluations. ! !### References ! * Butcher, J. (1964). On Runge-Kutta processes of high order. ! Journal of the Australian Mathematical Society, 4(2), 179-194. module procedure rkb6 real ( wp ), parameter :: a2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 3.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b42 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b43 = - 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b51 = - 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b52 = 9.0_wp / 8.0_wp real ( wp ), parameter :: b53 = - 3.0_wp / 1 6.0_wp real ( wp ), parameter :: b54 = - 3.0_wp / 8.0_wp real ( wp ), parameter :: b62 = 9.0_wp / 8.0_wp real ( wp ), parameter :: b63 = - 3.0_wp / 8.0_wp real ( wp ), parameter :: b64 = - 3.0_wp / 4.0_wp real ( wp ), parameter :: b65 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b71 = 9.0_wp / 4 4.0_wp real ( wp ), parameter :: b72 = - 9.0_wp / 1 1.0_wp real ( wp ), parameter :: b73 = 6 3.0_wp / 4 4.0_wp real ( wp ), parameter :: b74 = 1 8.0_wp / 1 1.0_wp real ( wp ), parameter :: b76 = - 1 6.0_wp / 1 1.0_wp real ( wp ), parameter :: c1 = 1 1.0_wp / 12 0.0_wp real ( wp ), parameter :: c3 = 2 7.0_wp / 4 0.0_wp real ( wp ), parameter :: c4 = 2 7.0_wp / 4 0.0_wp real ( wp ), parameter :: c5 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: c6 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: c7 = 1 1.0_wp / 12 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) end associate end procedure rkb6 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 7 integration step: `t -> t+h (x -> xf)` ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rk7 real ( wp ), parameter :: a1 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 8.0_wp / 9.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a7 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 214032 0.0_wp real ( wp ), parameter :: c0 = 11020 1.0_wp real ( wp ), parameter :: c3 = 76793 6.0_wp real ( wp ), parameter :: c4 = 63504 0.0_wp real ( wp ), parameter :: c5 = - 5904 9.0_wp real ( wp ), parameter :: c6 = - 5904 9.0_wp real ( wp ), parameter :: c7 = 63504 0.0_wp real ( wp ), parameter :: c8 = 11020 1.0_wp real ( wp ), parameter :: aa1 = 2.0_wp / 9.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 21 6.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 72 9.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 15163 2.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 137592 0.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 25188 8.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b40 = 2 3.0_wp real ( wp ), parameter :: b42 = 2 1.0_wp real ( wp ), parameter :: b43 = - 8.0_wp real ( wp ), parameter :: b50 = - 413 6.0_wp real ( wp ), parameter :: b52 = - 1358 4.0_wp real ( wp ), parameter :: b53 = 526 4.0_wp real ( wp ), parameter :: b54 = 1310 4.0_wp real ( wp ), parameter :: b60 = 10513 1.0_wp real ( wp ), parameter :: b62 = 30201 6.0_wp real ( wp ), parameter :: b63 = - 10774 4.0_wp real ( wp ), parameter :: b64 = - 28425 6.0_wp real ( wp ), parameter :: b65 = 170 1.0_wp real ( wp ), parameter :: b70 = - 77522 9.0_wp real ( wp ), parameter :: b72 = - 277095 0.0_wp real ( wp ), parameter :: b73 = 173513 6.0_wp real ( wp ), parameter :: b74 = 254721 6.0_wp real ( wp ), parameter :: b75 = 8189 1.0_wp real ( wp ), parameter :: b76 = 32853 6.0_wp real ( wp ), parameter :: b80 = 2356 9.0_wp real ( wp ), parameter :: b82 = - 12230 4.0_wp real ( wp ), parameter :: b83 = - 2038 4.0_wp real ( wp ), parameter :: b84 = 69552 0.0_wp real ( wp ), parameter :: b85 = - 9987 3.0_wp real ( wp ), parameter :: b86 = - 46656 0.0_wp real ( wp ), parameter :: b87 = 24192 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * ( f0 ), f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + aa7 * h * ( b70 * f0 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + aa8 * h * ( b80 * f0 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) xf = x + h * c * ( c0 * f0 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) end associate end procedure rk7 !***************************************************************************************** !***************************************************************************************** !> ! Take one Runge Kutta 8 integration step: `t -> t+h (x -> xf)` ! This is Formula (8-10) from Reference [1]. ! !# Reference ! 1. E. B. Shanks, \"[Higher Order Approximations of Runge-Kutta Type](http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19650022581.pdf)\", ! NASA Technical Note, NASA TN D-2920, Sept. 1965. module procedure rk8_10 real ( wp ), parameter :: a1 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: a2 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a8 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c0 = 4 1.0_wp real ( wp ), parameter :: c3 = 2 7.0_wp real ( wp ), parameter :: c4 = 27 2.0_wp real ( wp ), parameter :: c5 = 2 7.0_wp real ( wp ), parameter :: c6 = 21 6.0_wp real ( wp ), parameter :: c8 = 21 6.0_wp real ( wp ), parameter :: c9 = 4 1.0_wp real ( wp ), parameter :: aa1 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 5 4.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 432 0.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 28 8.0_wp real ( wp ), parameter :: aa9 = 1.0_wp / 82 0.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b43 = 3.0_wp real ( wp ), parameter :: b50 = 1 3.0_wp real ( wp ), parameter :: b52 = - 2 7.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp real ( wp ), parameter :: b54 = 8.0_wp real ( wp ), parameter :: b60 = 38 9.0_wp real ( wp ), parameter :: b62 = - 5 4.0_wp real ( wp ), parameter :: b63 = 96 6.0_wp real ( wp ), parameter :: b64 = - 82 4.0_wp real ( wp ), parameter :: b65 = 24 3.0_wp real ( wp ), parameter :: b70 = - 23 1.0_wp real ( wp ), parameter :: b72 = 8 1.0_wp real ( wp ), parameter :: b73 = - 116 4.0_wp real ( wp ), parameter :: b74 = 65 6.0_wp real ( wp ), parameter :: b75 = - 12 2.0_wp real ( wp ), parameter :: b76 = 80 0.0_wp real ( wp ), parameter :: b80 = - 12 7.0_wp real ( wp ), parameter :: b82 = 1 8.0_wp real ( wp ), parameter :: b83 = - 67 8.0_wp real ( wp ), parameter :: b84 = 45 6.0_wp real ( wp ), parameter :: b85 = - 9.0_wp real ( wp ), parameter :: b86 = 57 6.0_wp real ( wp ), parameter :: b87 = 4.0_wp real ( wp ), parameter :: b90 = 148 1.0_wp real ( wp ), parameter :: b92 = - 8 1.0_wp real ( wp ), parameter :: b93 = 710 4.0_wp real ( wp ), parameter :: b94 = - 337 6.0_wp real ( wp ), parameter :: b95 = 7 2.0_wp real ( wp ), parameter :: b96 = - 504 0.0_wp real ( wp ), parameter :: b97 = - 6 0.0_wp real ( wp ), parameter :: b98 = 72 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * f0 , f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( f0 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + aa7 * h * ( b70 * f0 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + aa8 * h * ( b80 * f0 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + aa9 * h * ( b90 * f0 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * c * ( c0 * f0 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c8 * f8 + c9 * f9 ) end associate end procedure rk8_10 !***************************************************************************************** !***************************************************************************************** !> ! 8th order Shanks, 12 function evaluations. ! !### Reference ! * E. B. Shanks, \"Solutions of Differential Equations by Evaluations of Functions\" ! Math. Comp. 20 (1966). module procedure rk8_12 real ( wp ), parameter :: a1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a8 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a10 = 5.0_wp / 6.0_wp real ( wp ), parameter :: c = 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c0 = 4 1.0_wp real ( wp ), parameter :: c5 = 21 6.0_wp real ( wp ), parameter :: c6 = 27 2.0_wp real ( wp ), parameter :: c7 = 2 7.0_wp real ( wp ), parameter :: c8 = 2 7.0_wp real ( wp ), parameter :: c9 = 3 6.0_wp real ( wp ), parameter :: c10 = 18 0.0_wp real ( wp ), parameter :: c11 = 4 1.0_wp real ( wp ), parameter :: aa1 = 1.0_wp / 9.0_wp real ( wp ), parameter :: aa2 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: aa3 = 1.0_wp / 1 6.0_wp real ( wp ), parameter :: aa4 = 1.0_wp / 50 0.0_wp real ( wp ), parameter :: aa5 = 1.0_wp / 97 2.0_wp real ( wp ), parameter :: aa6 = 1.0_wp / 3 6.0_wp real ( wp ), parameter :: aa7 = 1.0_wp / 24 3.0_wp real ( wp ), parameter :: aa8 = 1.0_wp / 32 4.0_wp real ( wp ), parameter :: aa9 = 1.0_wp / 32 4.0_wp real ( wp ), parameter :: aa10 = 1.0_wp / 162 0.0_wp real ( wp ), parameter :: aa11 = 1.0_wp / 442 8.0_wp real ( wp ), parameter :: b21 = 3.0_wp real ( wp ), parameter :: b32 = 3.0_wp real ( wp ), parameter :: b40 = 2 9.0_wp real ( wp ), parameter :: b42 = 3 3.0_wp real ( wp ), parameter :: b43 = - 1 2.0_wp real ( wp ), parameter :: b50 = 3 3.0_wp real ( wp ), parameter :: b53 = 4.0_wp real ( wp ), parameter :: b54 = 12 5.0_wp real ( wp ), parameter :: b60 = - 2 1.0_wp real ( wp ), parameter :: b63 = 7 6.0_wp real ( wp ), parameter :: b64 = 12 5.0_wp real ( wp ), parameter :: b65 = - 16 2.0_wp real ( wp ), parameter :: b70 = - 3 0.0_wp real ( wp ), parameter :: b73 = - 3 2.0_wp real ( wp ), parameter :: b74 = 12 5.0_wp real ( wp ), parameter :: b76 = 9 9.0_wp real ( wp ), parameter :: b80 = 117 5.0_wp real ( wp ), parameter :: b83 = - 345 6.0_wp real ( wp ), parameter :: b84 = - 625 0.0_wp real ( wp ), parameter :: b85 = 842 4.0_wp real ( wp ), parameter :: b86 = 24 2.0_wp real ( wp ), parameter :: b87 = - 2 7.0_wp real ( wp ), parameter :: b90 = 29 3.0_wp real ( wp ), parameter :: b93 = - 85 2.0_wp real ( wp ), parameter :: b94 = - 137 5.0_wp real ( wp ), parameter :: b95 = 183 6.0_wp real ( wp ), parameter :: b96 = - 11 8.0_wp real ( wp ), parameter :: b97 = 16 2.0_wp real ( wp ), parameter :: b98 = 32 4.0_wp real ( wp ), parameter :: b100 = 130 3.0_wp real ( wp ), parameter :: b103 = - 426 0.0_wp real ( wp ), parameter :: b104 = - 687 5.0_wp real ( wp ), parameter :: b105 = 999 0.0_wp real ( wp ), parameter :: b106 = 103 0.0_wp real ( wp ), parameter :: b109 = 16 2.0_wp real ( wp ), parameter :: b110 = - 859 5.0_wp real ( wp ), parameter :: b113 = 3072 0.0_wp real ( wp ), parameter :: b114 = 4875 0.0_wp real ( wp ), parameter :: b115 = - 6609 6.0_wp real ( wp ), parameter :: b116 = 37 8.0_wp real ( wp ), parameter :: b117 = - 72 9.0_wp real ( wp ), parameter :: b118 = - 194 4.0_wp real ( wp ), parameter :: b119 = - 129 6.0_wp real ( wp ), parameter :: b1110 = 324 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + aa1 * h * ( f0 ), f1 ) call me % f ( t + a2 * h , x + aa2 * h * ( f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + aa3 * h * ( f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + aa4 * h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + aa5 * h * ( b50 * f0 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + aa6 * h * ( b60 * f0 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + aa7 * h * ( b70 * f0 + b73 * f3 + b74 * f4 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + aa8 * h * ( b80 * f0 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + aa9 * h * ( b90 * f0 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + aa10 * h * ( b100 * f0 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b109 * f9 ), f10 ) call me % f ( t + h , x + aa11 * h * ( b110 * f0 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) xf = x + h * c * ( c0 * f0 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) end associate end procedure rk8_12 !***************************************************************************************** !***************************************************************************************** !> ! Cooper-Verner 11 stage, 8th order Runge-Kutta method. ! !### Reference ! * Some Explicit Runge-Kutta Methods of High Order, by G. J. Cooper and J. H. Verner, ! SIAM Journal on Numerical Analysis, Vol. 9, No. 3, (September 1972), pages 389 to 405 ! * http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8b_1.pdf module procedure rkcv8 real ( wp ), parameter :: s = sqrt ( 2 1.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 2.0_wp + 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a8 = 1.0_wp / 2.0_wp + 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: a9 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a10 = 1.0_wp / 2.0_wp - 1.0_wp / 1 4.0_wp * s real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b42 = - 1.0_wp / 1 4.0_wp + 3.0_wp / 9 8.0_wp * s real ( wp ), parameter :: b43 = 3.0_wp / 7.0_wp - 5.0_wp / 4 9.0_wp * s real ( wp ), parameter :: b51 = 1 1.0_wp / 8 4.0_wp - 1.0_wp / 8 4.0_wp * s real ( wp ), parameter :: b53 = 2.0_wp / 7.0_wp - 4.0_wp / 6 3.0_wp * s real ( wp ), parameter :: b54 = 1.0_wp / 1 2.0_wp + 1.0_wp / 25 2.0_wp * s real ( wp ), parameter :: b61 = 5.0_wp / 4 8.0_wp - 1.0_wp / 4 8.0_wp * s real ( wp ), parameter :: b63 = 1.0_wp / 4.0_wp - 1.0_wp / 3 6.0_wp * s real ( wp ), parameter :: b64 = - 7 7.0_wp / 12 0.0_wp - 7.0_wp / 18 0.0_wp * s real ( wp ), parameter :: b65 = 6 3.0_wp / 8 0.0_wp + 7.0_wp / 8 0.0_wp * s real ( wp ), parameter :: b71 = 5.0_wp / 2 1.0_wp + 1.0_wp / 4 2.0_wp * s real ( wp ), parameter :: b73 = - 4 8.0_wp / 3 5.0_wp - 9 2.0_wp / 31 5.0_wp * s real ( wp ), parameter :: b74 = 21 1.0_wp / 3 0.0_wp + 2 9.0_wp / 1 8.0_wp * s real ( wp ), parameter :: b75 = - 3 6.0_wp / 5.0_wp - 2 3.0_wp / 1 4.0_wp * s real ( wp ), parameter :: b76 = 9.0_wp / 5.0_wp + 1 3.0_wp / 3 5.0_wp * s real ( wp ), parameter :: b81 = 1.0_wp / 1 4.0_wp real ( wp ), parameter :: b85 = 1.0_wp / 9.0_wp + 1.0_wp / 4 2.0_wp * s real ( wp ), parameter :: b86 = 1 3.0_wp / 6 3.0_wp + 1.0_wp / 2 1.0_wp * s real ( wp ), parameter :: b87 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b91 = 1.0_wp / 3 2.0_wp real ( wp ), parameter :: b95 = 9 1.0_wp / 57 6.0_wp + 7.0_wp / 19 2.0_wp * s real ( wp ), parameter :: b96 = 1 1.0_wp / 7 2.0_wp real ( wp ), parameter :: b97 = - 38 5.0_wp / 115 2.0_wp + 2 5.0_wp / 38 4.0_wp * s real ( wp ), parameter :: b98 = 6 3.0_wp / 12 8.0_wp - 1 3.0_wp / 12 8.0_wp * s real ( wp ), parameter :: b101 = 1.0_wp / 1 4.0_wp real ( wp ), parameter :: b105 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b106 = - 73 3.0_wp / 220 5.0_wp + 1.0_wp / 1 5.0_wp * s real ( wp ), parameter :: b107 = 51 5.0_wp / 50 4.0_wp - 3 7.0_wp / 16 8.0_wp * s real ( wp ), parameter :: b108 = - 5 1.0_wp / 5 6.0_wp + 1 1.0_wp / 5 6.0_wp * s real ( wp ), parameter :: b109 = 13 2.0_wp / 24 5.0_wp - 4.0_wp / 3 5.0_wp * s real ( wp ), parameter :: b115 = - 7.0_wp / 3.0_wp - 7.0_wp / 1 8.0_wp * s real ( wp ), parameter :: b116 = - 2.0_wp / 5.0_wp - 2 8.0_wp / 4 5.0_wp * s real ( wp ), parameter :: b117 = - 9 1.0_wp / 2 4.0_wp + 5 3.0_wp / 7 2.0_wp * s real ( wp ), parameter :: b118 = 30 1.0_wp / 7 2.0_wp - 5 3.0_wp / 7 2.0_wp * s real ( wp ), parameter :: b119 = 2 8.0_wp / 4 5.0_wp + 2 8.0_wp / 4 5.0_wp * s real ( wp ), parameter :: b1110 = 4 9.0_wp / 18 + 7.0_wp / 1 8.0_wp * s real ( wp ), parameter :: c1 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: c8 = 4 9.0_wp / 18 0.0_wp real ( wp ), parameter :: c9 = 1 6.0_wp / 4 5.0_wp real ( wp ), parameter :: c10 = 4 9.0_wp / 18 0.0_wp real ( wp ), parameter :: c11 = 1.0_wp / 2 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) end associate end procedure rkcv8 !***************************************************************************************** !***************************************************************************************** !> ! Zhang 10th order ! !### Reference ! * David K. Zhang, \"Discovering New Runge-Kutta Methods Using Unstructured Numerical Search\", ! Thesis, April 16, 2019 [1911.00318.pdf](https://arxiv.org/pdf/1911.00318.pdf) ! * [Coefficients](https://github.com/dzhang314/rktk/blob/master/methods/Zhang10.txt) module procedure rkz10 real ( wp ), parameter :: b21 = + 0.06888096612188652230677098661632935381315159322698285980682460033484176156636_wp real ( wp ), parameter :: b31 = - 0.83810520353364237535186366202804838694106968892100493081079119861616316483888_wp real ( wp ), parameter :: b32 = + 1.25369004871695465344923436259290210937215845259642921936068038992469719487344_wp real ( wp ), parameter :: b41 = - 0.00490948675932680175369634467679043271190185159760893197940412354439119879747_wp real ( wp ), parameter :: b42 = + 0.08232173030768021571147603044143500716498050758632346872918243517328221749373_wp real ( wp ), parameter :: b43 = - 0.00853127742646689165100869914831522063992706276173167694295371129404925712991_wp real ( wp ), parameter :: b51 = + 1.04893195376435953811751460952804681519865641127045728585681123905425821150864_wp real ( wp ), parameter :: b52 = - 0.75382817731759581241904280322911590179250916990960557195131331600659134298994_wp real ( wp ), parameter :: b53 = + 0.80522815974064911780476652756884437914316713728791543021500322792680878839117_wp real ( wp ), parameter :: b54 = - 0.38446322074238561063992159166768203951623890872336238198515458977800812023865_wp real ( wp ), parameter :: b61 = - 0.23992383433329995270018501071487605020336614587127799309879281304981537313900_wp real ( wp ), parameter :: b62 = - 0.06364261163929229571107164643776483490956349179570579724023318438638668084701_wp real ( wp ), parameter :: b63 = + 0.19967543135197895864283978317448663244372194705250026204952108330132418721869_wp real ( wp ), parameter :: b64 = + 0.61035379509547002158981202467825146906358429601618359949777530100370262806814_wp real ( wp ), parameter :: b65 = + 0.37859947224999048426403753064329493462141566215033797838496558400426835557965_wp real ( wp ), parameter :: b71 = + 0.01778833946316172550067667113299992644020408256145083580468064240809624146756_wp real ( wp ), parameter :: b72 = - 0.01105021905501825472152093430479940021746699824126398377648788328289961044531_wp real ( wp ), parameter :: b73 = - 0.00439342855052892929633342674635339618911779936473248023015437836908839819799_wp real ( wp ), parameter :: b74 = + 0.10597527290509018731505658395393495306363828909501538659771103682791206047696_wp real ( wp ), parameter :: b75 = + 0.00405089069638330732472929903714130352675532845602736909932582009874330236167_wp real ( wp ), parameter :: b76 = - 0.00167929709134223461022001825411827908084682305838572957913124250043819202374_wp real ( wp ), parameter :: b81 = + 0.23566046225418537925692690356824973135127585829120749799176100081366132717900_wp real ( wp ), parameter :: b82 = + 0.08893362689701559656112930868794335701480724068673657440558996917556014206620_wp real ( wp ), parameter :: b83 = + 0.04138834709876858545169518341465722051417932518424807026039922164100253591914_wp real ( wp ), parameter :: b84 = - 0.85290303603263069912309614093599359240031750375681439893926580845622126359984_wp real ( wp ), parameter :: b85 = - 0.02308087548113625563008379864870135277272977633339373075859414529485111031087_wp real ( wp ), parameter :: b86 = + 0.00968592188591852514590807745954989979539211465004178878459403530669594442891_wp real ( wp ), parameter :: b87 = + 0.80144977934196893864833794701047679699141990680205169668196460489197395944287_wp real ( wp ), parameter :: b91 = + 0.09048693760705330681795027653195090842362561521235737211709949607524998063814_wp real ( wp ), parameter :: b92 = + 0.03204427202479226242378001797390171191984804295279358947221505285617826137779_wp real ( wp ), parameter :: b93 = + 0.12433768215891056280095053314827014992247446913700152962717366852615035330919_wp real ( wp ), parameter :: b94 = - 0.30731521755038158104946232011583084977900951861660916480042444618524837737411_wp real ( wp ), parameter :: b95 = + 0.16447843681160268810163161551627427448581444120771873237010859382161886567365_wp real ( wp ), parameter :: b96 = - 0.04100681167344768439646557295106150922485658224571650562701715147123044716022_wp real ( wp ), parameter :: b97 = + 0.40661989930773198456977153545461924102851176247811339291440854490078881632775_wp real ( wp ), parameter :: b98 = + 0.18669987124631939180018777607871869034096434382893787663176153320303681978038_wp real ( wp ), parameter :: b101 = - 0.12815849137721058028379122684114729957595452282110310092889040855742427673083_wp real ( wp ), parameter :: b102 = - 0.09494292242532245543748881606192770346771760827967185000597507680447193729080_wp real ( wp ), parameter :: b103 = - 0.14450344511826259894917045729900439186304081642314445476990786282061867102157_wp real ( wp ), parameter :: b104 = + 0.92134940704406912363606156819205798706915260363096464763106069459083167107327_wp real ( wp ), parameter :: b105 = - 0.13265301054949046320484467982507968172620145761107284691851092173475314294014_wp real ( wp ), parameter :: b106 = + 0.01661485872631464348319012586897860991564771318706900087871886151957318825574_wp real ( wp ), parameter :: b107 = - 0.64461773243991825568826538659502156175792556790721387489238296660149971176174_wp real ( wp ), parameter :: b108 = + 0.47148463683422024098060807066053294761028203774917809473770514989820710158152_wp real ( wp ), parameter :: b109 = + 0.15101154448891262356107150246546481622684638215041867281807172181868980886911_wp real ( wp ), parameter :: b111 = - 0.35394262889926481874318272132638227200275604000107564690424492655250744148526_wp real ( wp ), parameter :: b112 = - 0.12999250061102426001102206164524015480707041252098090235235458563228391897841_wp real ( wp ), parameter :: b113 = + 0.07296717474130959358123820183761890201581557542115580687780801792533382974931_wp real ( wp ), parameter :: b114 = + 1.23409288203437673148811178545199717478084359792767549031487434785241641765067_wp real ( wp ), parameter :: b115 = + 0.24325479314414790350916184694938182359002523242070889454561579643424180130675_wp real ( wp ), parameter :: b116 = - 0.04886415340347670065787549059652108014832442895629947389530738182689787996728_wp real ( wp ), parameter :: b117 = - 0.51442371407978914516038594645191171303742863244306956194414424856852330710239_wp real ( wp ), parameter :: b118 = + 0.07088500449199304304537010242765865457286791828303557337358385517356109210099_wp real ( wp ), parameter :: b119 = - 0.20555333994396552677698205301698855743095009068049025897065388713681681672772_wp real ( wp ), parameter :: b1110 = + 0.04716132770900545782293703693524094489806604422476436750471220364001025348790_wp real ( wp ), parameter :: b121 = - 1.28883596401187309154174375754588391722337985378291577953064993833085325077145_wp real ( wp ), parameter :: b122 = - 0.28020869761589692854933312826845810393637896090137224607343344880154309805585_wp real ( wp ), parameter :: b123 = + 2.95502531060581466025398140893693575414694538631086569687435523799636000133369_wp real ( wp ), parameter :: b124 = + 2.68729452804277601048934070442766694554427130448420986662047690713132366345266_wp real ( wp ), parameter :: b125 = + 4.94062342991935573838476417426809163760371481941041460313006887242753416771859_wp real ( wp ), parameter :: b126 = - 1.10669748003212502578007105340045335120159611347391447923604138591653946190627_wp real ( wp ), parameter :: b127 = - 1.01499184284449721513261150169983810954496707583685170059698090784083909089787_wp real ( wp ), parameter :: b128 = + 2.53750982609373480524394613209930567128221625331336116097749979112883387569908_wp real ( wp ), parameter :: b129 = - 3.05085435525303312587778339284072228780737127406865428592625671405448243077510_wp real ( wp ), parameter :: b1210 = - 4.48248369012964780236263511347668602256466957962418723733767273268597925464354_wp real ( wp ), parameter :: b1211 = - 1.21257843188510861623323738621796488386816954981559478788233918659317859600661_wp real ( wp ), parameter :: b131 = - 0.26440344286774078027313975052115341819194404740705505988980388884472351746613_wp real ( wp ), parameter :: b132 = - 0.06681118811399606825394685412417487195704333031683770523718698572711060614338_wp real ( wp ), parameter :: b133 = + 0.22983178806827308655694675660046084355033982772309698316158066683955449428729_wp real ( wp ), parameter :: b134 = + 0.64074149645736181719485655167408177784648088775776468738158085006283347730738_wp real ( wp ), parameter :: b135 = + 0.42942911081576828545053652299580217770451868606900245607955202491949872419495_wp real ( wp ), parameter :: b136 = - 0.00967078876662303036856558223558993132212111489612543886857914521712390529304_wp real ( wp ), parameter :: b137 = + 0.01613666672999681392501812041282804272240296713357286534780333216134004281864_wp real ( wp ), parameter :: b138 = - 0.03596314318487727365094853269870982256844289210631058204493077377818835633949_wp real ( wp ), parameter :: b139 = - 0.04902670091896965612083428201101205091198148478269054303875029017005640576667_wp real ( wp ), parameter :: b1310 = + 0.01388537673498896790224810676002758506392838309962714417674884945696557987538_wp real ( wp ), parameter :: b1311 = - 0.02329475109524907760636494276820464664967810607545806961371703044079964798003_wp real ( wp ), parameter :: b1312 = + 0.00411071472206196739547606137318514638902786727009559929394539277815884070579_wp real ( wp ), parameter :: b141 = + 1.28995927881082034516023610876593719136951515200841564716720963602983766539309_wp real ( wp ), parameter :: b142 = + 0.13503265202676397192358271319486347590315093450300003507414087911915346743493_wp real ( wp ), parameter :: b143 = - 1.57533735338626298015011591165511659112640458688783385930436332029909777715227_wp real ( wp ), parameter :: b144 = - 1.13614144125767380945133294734170682018114470434355261134291967031467884444496_wp real ( wp ), parameter :: b145 = - 2.60629976327340284860734294234508518773200013764798796731373995419345584010989_wp real ( wp ), parameter :: b146 = - 0.14225514857221282929776869245957057127882456911938845124276329363250774479820_wp real ( wp ), parameter :: b147 = - 1.30050279397530175137190231972314623324238865480815606289913301764254981931424_wp real ( wp ), parameter :: b148 = + 2.70797163114645615543070920761013389431867941711011998785845670786144007733081_wp real ( wp ), parameter :: b149 = + 2.43554296946750176014394493560037156798756615586273835416220476865949138763199_wp real ( wp ), parameter :: b1410 = - 0.26458182516446999987007272710827096690076304619434648405874330108389046658365_wp real ( wp ), parameter :: b1411 = + 0.28431747275350668428305940521170347967298804085514279367418757904848425107603_wp real ( wp ), parameter :: b1412 = - 0.01567336501605444936187349334932741547111318613954509638698908027760861917463_wp real ( wp ), parameter :: b1413 = + 0.60355253162364202926624736416406789911182794847681800316234125803391629274555_wp real ( wp ), parameter :: b151 = - 0.82170145239485721248182614307298014363501501247665665859542963907661741852252_wp real ( wp ), parameter :: b152 = + 1.25591221619821840505806060191670198289896021578755350597122093077684012752648_wp real ( wp ), parameter :: b153 = - 0.01615284116525821921698589364201132298146948312403205059324494512949466638820_wp real ( wp ), parameter :: b154 = - 0.02297038987201048533939731478067813642773684981394747854111883904855646952919_wp real ( wp ), parameter :: b155 = - 0.02796034376707111482574969609615809805957457730932703561247060660045527963337_wp real ( wp ), parameter :: b156 = - 0.75094298727080692288567852962945843784728392190426468013732662611274129611030_wp real ( wp ), parameter :: b157 = - 0.00831029089278008603544533798969572897337060350821384521268253868513966100453_wp real ( wp ), parameter :: b158 = + 0.02785523862077057819395231768788127899618354611871665730619924470585495216854_wp real ( wp ), parameter :: b159 = + 0.04021421539333651503730432703988977024358721548426886753518601253708363296062_wp real ( wp ), parameter :: b1510 = + 1.61713646360095425893804116572314412328254887955289755326352595104935489454125_wp real ( wp ), parameter :: b1511 = - 1.39628377741243214317623603663032161218084680028714877542197062209713837494256_wp real ( wp ), parameter :: b1512 = - 0.01424439159061064208304848726946155039179802539115130281665541763757472383980_wp real ( wp ), parameter :: b1513 = + 0.75709054336643265169970374917936196757291644158102449813751290304179069353124_wp real ( wp ), parameter :: b1514 = - 0.22405735763057330478532402187136037006601226103429496673285661641467238072308_wp real ( wp ), parameter :: b161 = + 0.27726401853185531071095250844208662954769209843860654782270439586107555912462_wp real ( wp ), parameter :: b162 = + 0.09453818370728229619312145290868518019954577268055790438905422269619151226603_wp real ( wp ), parameter :: b163 = + 0.84172754295454286541980788975065897179825972249436132684274103676922879908590_wp real ( wp ), parameter :: b164 = - 0.90665259832844475943298457713954683980649043330939335614048943465366310987303_wp real ( wp ), parameter :: b165 = - 0.09334858033923263720339222938292231543826754868386677793091178055855225779084_wp real ( wp ), parameter :: b166 = + 4.08887758914114010965574538791054120551785765841976165061624483740399180627400_wp real ( wp ), parameter :: b167 = + 0.79539986499428990687079492545982314739495812782573436535546220822826278953650_wp real ( wp ), parameter :: b168 = - 0.04859175145875636251218702854395529418032114353274620641007859711365783956136_wp real ( wp ), parameter :: b169 = + 0.14819851457498430887143064575970769402240035004018486609649448109702272035773_wp real ( wp ), parameter :: b1610 = - 1.77021148062189597056755123808303838576982978034562033343027660487016998355672_wp real ( wp ), parameter :: b1611 = + 1.83821084492008174732030666893446362369060575712213328902105414298283276556307_wp real ( wp ), parameter :: b1612 = + 0.04909344463430916722179909282844531508454281205967923461622573420987424382584_wp real ( wp ), parameter :: b1613 = - 3.80378823067007538071243467410680278604792596795503781745130930797860484235966_wp real ( wp ), parameter :: b1614 = + 0.33157239872339854149205035234217673029656296754907585248267975563293121409049_wp real ( wp ), parameter :: b1615 = - 0.84228976076347914332745917708032287630959039280343054587959508970676337698255_wp real ( wp ), parameter :: c1 = + 0.03181927458023409759419419944088926839595967458804889313841865851348230504492_wp real ( wp ), parameter :: c3 = + 0.04681369289018421954398607025172424191865836856120072277976273594277845007872_wp real ( wp ), parameter :: c6 = + 1.37553536170545749013126339747598151094852489823041688723220548486290269295630_wp real ( wp ), parameter :: c7 = + 0.17506567143964248943590740397548086595186840317795589108615338820052040464001_wp real ( wp ), parameter :: c8 = + 0.14924798653008455234489054168544610975862154045444166485218499565185924479229_wp real ( wp ), parameter :: c9 = + 0.27180992312662372142355988162582830282467844949919584507610421296773792690656_wp real ( wp ), parameter :: c10 = - 0.17077940511361075387191294440611902706762757201779959741914461935949309724569_wp real ( wp ), parameter :: c11 = + 0.30035519768848521819453255694344499143765502380409939822945376435190034136303_wp real ( wp ), parameter :: c12 = - 0.01014254403202798636405231311418830930667910487160410011307114999518762983823_wp real ( wp ), parameter :: c13 = - 1.19177815782093190956613115811061881440838744821819017576359936663422556606341_wp real ( wp ), parameter :: c14 = + 0.03639139354170713653095246097302347593652682408895579802073390992985525665017_wp real ( wp ), parameter :: c15 = - 0.04683316086510645556720041443823709643011325850704077997225219431585033242635_wp real ( wp ), parameter :: c16 = + 0.03249476632925818017001031769734448004031420121031955285305017988372000314167_wp ! see Equation 1.20 in reference: real ( wp ), parameter :: a1 = 0 real ( wp ), parameter :: a2 = b21 real ( wp ), parameter :: a3 = b31 + b32 real ( wp ), parameter :: a4 = b41 + b42 + b43 real ( wp ), parameter :: a5 = b51 + b52 + b53 + b54 real ( wp ), parameter :: a6 = b61 + b62 + b63 + b64 + b65 real ( wp ), parameter :: a7 = b71 + b72 + b73 + b74 + b75 + b76 real ( wp ), parameter :: a8 = b81 + b82 + b83 + b84 + b85 + b86 + b87 real ( wp ), parameter :: a9 = b91 + b92 + b93 + b94 + b95 + b96 + b97 + b98 real ( wp ), parameter :: a10 = b101 + b102 + b103 + b104 + b105 + b106 + b107 + b108 + b109 real ( wp ), parameter :: a11 = b111 + b112 + b113 + b114 + b115 + b116 + b117 + b118 + b119 + b1110 real ( wp ), parameter :: a12 = b121 + b122 + b123 + b124 + b125 + b126 + b127 + b128 + b129 + b1210 + b1211 real ( wp ), parameter :: a13 = b131 + b132 + b133 + b134 + b135 + b136 + b137 + b138 + b139 + b1310 + b1311 + b1312 real ( wp ), parameter :: a14 = b141 + b142 + b143 + b144 + b145 + b146 + b147 + b148 + b149 + b1410 + b1411 + b1412 + b1413 real ( wp ), parameter :: a15 = b151 + b152 + b153 + b154 + b155 + b156 + b157 + b158 + b159 + b1510 + b1511 + b1512 + b1513 + b1514 real ( wp ), parameter :: a16 = b161 + b162 + b163 + b164 + b165 + b166 + b167 + b168 + b169 + b1610 + b1611 + b1612 + b1613 + b1614 + b1615 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + a1 * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + & b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + & b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + & b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + & b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + & b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + & b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + & b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) xf = x + h * ( c1 * f1 + c3 * f3 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) end associate end procedure rkz10 !***************************************************************************************** !***************************************************************************************** !> ! Ono's 10th order method ! !### References ! * Hiroshi Ono, \"A Runge-Kutta method of order 10 which minimizes truncation error\", ! The Japan Society for Industrial and Applied Mathematics, ! Vol. 13, No. 1, 2003, pp 35 - 44. module procedure rko10 real ( wp ), parameter :: a2 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: a3 = . 5263563553500217821118595221339767434067222948292617539626688113669112965383197614021_wp real ( wp ), parameter :: a4 = . 7895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a5 = . 1852155685265047076970656199437875208987680209449849941608024849050604421517806064228_wp real ( wp ), parameter :: a6 = . 2895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a7 = . 7659879027055932401898717206953675811356898851157703878511505293452324618973555436361_wp real ( wp ), parameter :: a8 = . 1080739009578824490100240661758266719014599665988034811870817465871751958605805741080_wp real ( wp ), parameter :: a9 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a10 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a11 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a12 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a13 = . 7659879027055932401898717206953675811356898851157703878511505293452324618973555436361_wp real ( wp ), parameter :: a14 = . 2895345330250326731677892832009651151100834422438926309440032170503669448074796421031_wp real ( wp ), parameter :: a15 = . 5263563553500217821118595221339767434067222948292617539626688113669112965383197614021_wp real ( wp ), parameter :: a16 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b21 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b31 = . 1137717040478783056449396184425018992536986324028992632761012508174661576282091865815_wp real ( wp ), parameter :: b32 = . 4125846513021434764669199036914748441530236624263624906865675605494451389101105748206_wp real ( wp ), parameter :: b41 = . 1973836332562581682919473208002412787775208605609731577360008042625917362018699105258_wp real ( wp ), parameter :: b43 = . 5921508997687745048758419624007238363325625816829194732080024127877752086056097315774_wp real ( wp ), parameter :: b51 = . 1360001717992528326665261557210531883399922632350163155393510462488093550801937826726_wp real ( wp ), parameter :: b53 = . 824720805202811222379079977574504818037996000363091041777905360271594623631069354283 7e-1_wp real ( wp ), parameter :: b54 = - . 332566837930292472073685335347161492450238423263404255563390973709083752915201116781 5e-1_wp real ( wp ), parameter :: b61 = . 654678519948111057975663033586887072416508858302450954893843449284860127842110887181 8e-1_wp real ( wp ), parameter :: b64 = . 685871562042303399396682664055028198509388868123613585975699418887138553966287647885 9e-3_wp real ( wp ), parameter :: b65 = . 2233808094681792639708262971782213796699231675455239218686431727029937934693022657371_wp real ( wp ), parameter :: b71 = . 2379439999135994223360182301765245366877534054337310606780367192080205084533052094979_wp real ( wp ), parameter :: b74 = . 1285793626493546102687479560301629068933431333159680850577212924587597635005521433930_wp real ( wp ), parameter :: b75 = - . 7303763776380165799305971651206183012312272113455920027358381669467410091843571268521_wp real ( wp ), parameter :: b76 = 1.129840917780655787515702699609298438785820557711663244851230684625193199127855317597_wp real ( wp ), parameter :: b81 = . 606278089644172041828851763289449356101383929213871935662188828124574009433854416577 5e-1_wp real ( wp ), parameter :: b85 = . 788822224869202238639802956157355708195673413893998012378730299018568351728356274717 9e-1_wp real ( wp ), parameter :: b86 = - . 321321350412593900510162678207448391177877251765465842094683934155351160999215185781 5e-1_wp real ( wp ), parameter :: b87 = . 696004547804411014174862051891004589541957464563070592458227288396075844281023556639 4e-3_wp real ( wp ), parameter :: b91 = . 310441586543872188908409753881999593035847986835220089359164492112482866700568653692 0e-1_wp real ( wp ), parameter :: b96 = . 1571656120644442171909172634188670081467914525944196307657031602142991040495820182979_wp real ( wp ), parameter :: b97 = . 111763854138408430298968733827150564266166391841703707104175280155396971597072215560 9e-3_wp real ( wp ), parameter :: b98 = . 1690627071867076073308672954386663460258558459670039606814010070304482468516642450265_wp real ( wp ), parameter :: b101 = . 143061420142267773294341145620270598158292988407553851922433281175939125604562870960 1e-1_wp real ( wp ), parameter :: b106 = - . 3914725335338579386439799990026912235591541327277623987271673700062264924050571982953_wp real ( wp ), parameter :: b107 = . 2848400967322984698670378405298733357388045123736554424201702352859211869408079104816_wp real ( wp ), parameter :: b108 = . 2559426777170804941167590501634194225203620020234561863154326261989141389268124787652_wp real ( wp ), parameter :: b109 = . 7189112790349845437562504807270404806670261637579475044631123583223249124963937790142_wp real ( wp ), parameter :: b111 = . 100666845742663178817227082262022726090612102393137172374184106085273098952254964164 8e-1_wp real ( wp ), parameter :: b116 = - . 3683271809355001194608455001594963737510628435069995678571139196388186857259494651043_wp real ( wp ), parameter :: b117 = . 857550262402229990354693960925451370506815971267273889165067994976749715636339652326 6e-1_wp real ( wp ), parameter :: b118 = . 2633792404483482304677774849110341109669789276529274236259927084605103685123897043694_wp real ( wp ), parameter :: b119 = . 6783120744401823352568978305425238981627472606453781308422134412090277276134222894570_wp real ( wp ), parameter :: b1110 = - . 265700865271972150239464225923695090789044157941343968551422318730727264016221912804 5e-1_wp real ( wp ), parameter :: b121 = . 421257301570145802287543187145341282749104461888283907786317114955424946915941038412 6e-1_wp real ( wp ), parameter :: b126 = - . 114073025739498662832358741501332045332754077505475889494504614085885658522072079316 0e-1_wp real ( wp ), parameter :: b127 = - . 357732358388104164263985491039084383847709475224877912599477197450717910777081667362 2e-2_wp real ( wp ), parameter :: b128 = . 847808506904718159588379566933344327419896519600476705478313620344711827543672159469 2e-1_wp real ( wp ), parameter :: b129 = - . 823689740384519053451672363846415534369879668146873991026026659538430170751318715182 3e-4_wp real ( wp ), parameter :: b1210 = . 792017493664916044525153500594110464427146269240442858078643804091120854614237759251 2e-3_wp real ( wp ), parameter :: b1211 = . 484073482598570117360198040877694326099440178344243162621494079641713115706434186756 3e-2_wp real ( wp ), parameter :: b131 = . 1866168584194642618748985099397434698267694490527249444362505121514680479505442836574_wp real ( wp ), parameter :: b134 = . 1285793626493546102687479560301629068933431333159680850577212924587597635005521433930_wp real ( wp ), parameter :: b135 = - . 7303763776380165799305971651206183012312272113455920027358381669467410091843571268521_wp real ( wp ), parameter :: b136 = . 3365620746651354218129539461265307620933082614096471567813938850533189571406833598679_wp real ( wp ), parameter :: b137 = . 3439152195696137654283681672732838006806635738118480999635325742827372086353048385257_wp real ( wp ), parameter :: b138 = . 6116809614283795957124860804122425718138169583157463948158033894717678649195939132136_wp real ( wp ), parameter :: b139 = . 8555642651045021202243366091904917631763787495189342130253621820535903092162656518481_wp real ( wp ), parameter :: b1310 = - . 891392852486696004845640155766881857316512047949986128540746584443895055096019167947 2e-1_wp real ( wp ), parameter :: b1311 = - . 4263317531098201582091498458499961586420389075833366648914840378325891404712881232497_wp real ( wp ), parameter :: b1312 = - . 4510834231343501965076085217297850477436729165851712257475164429026900343003414799732_wp real ( wp ), parameter :: b141 = . 813272217458117794807280979168314150245787313612597895474152882582268286833402023137 4e-1_wp real ( wp ), parameter :: b144 = . 685871562042303399396682664055028198509388868123613585975699418887138553966287647885 9e-3_wp real ( wp ), parameter :: b145 = . 2233808094681792639708262971782213796699231675455239218686431727029937934693022657371_wp real ( wp ), parameter :: b146 = - . 3543152669595614715438074770044728248424634682417120916726014150358797064660842419218_wp real ( wp ), parameter :: b147 = - . 1614228337471357340842753214971350545154909424968569413717974406833347832344548170007_wp real ( wp ), parameter :: b148 = - 1.267989518319081979614362221100086229540210555088918164010191288219362963604567702803_wp real ( wp ), parameter :: b149 = . 2482505660965057784745955362600844051763121832196360142449926255422280563592831868088_wp real ( wp ), parameter :: b1410 = . 189401507220432986230430508826749566454355835084831097010333170836962862919660196114 5e-2_wp real ( wp ), parameter :: b1411 = - . 236710850425040469729927587547751462365353620277346625237201541217354742435686516188 2e-1_wp real ( wp ), parameter :: b1412 = 1.376373544047006195976245547649688122109906103559164922810806152088122419417100442009_wp real ( wp ), parameter :: b1413 = . 1650212091015662542191305948002865244010106371945579174943772453918520072439660689694_wp real ( wp ), parameter :: b151 = . 1137717040478783056449396184425018992536986324028992632761012508174661576282091865815_wp real ( wp ), parameter :: b152 = . 4125846513021434764669199036914748441530236624263624906865675605494451389101105748206_wp real ( wp ), parameter :: b156 = - . 5266141894222268880524004361760397955773267936583064281992495328485812564705031059898_wp real ( wp ), parameter :: b157 = . 4270299995350464166415042303891280056028480962227556089080302280248036279775533169729_wp real ( wp ), parameter :: b1513 = - . 4270299995350464166415042303891280056028480962227556089080302280248036279775533169729_wp real ( wp ), parameter :: b1514 = . 5266141894222268880524004361760397955773267936583064281992495328485812564705031059898_wp real ( wp ), parameter :: b161 = . 3357505083417036184129939488963472892525539577157696170900805997207182929518116563365_wp real ( wp ), parameter :: b163 = - . 4368367083891407610190158064846822677554138099678168504498524386288907219928146135373_wp real ( wp ), parameter :: b1615 = . 4368367083891407610190158064846822677554138099678168504498524386288907219928146135373_wp real ( wp ), parameter :: b171 = . 352840091453906575769537425002052698379204209477870663357404857513859839544537545996 4e-1_wp real ( wp ), parameter :: b172 = - . 4368588562339554617519938616027395568153523718226810275461527253101515442644071737416_wp real ( wp ), parameter :: b173 = - . 5185253025751911700815354370658368214653404020923461413204927007907407344767758710502_wp real ( wp ), parameter :: b176 = . 835388214631834770882397990787144429369302489753300898028685113495020955686828548199 8e-1_wp real ( wp ), parameter :: b177 = . 3357324883823615793514438806416832609180686549969009829861766772233990660034579152038_wp real ( wp ), parameter :: b178 = - . 1180346853290197678148440843338719378456952414935754110833043790640005049977678056530_wp real ( wp ), parameter :: b179 = - . 2028121524999718341813208304021045923675061150408674489110338814798518734278169865166_wp real ( wp ), parameter :: b1710 = . 4018734442526045674154192467995252408036818247069631361197899796078897150680466096292_wp real ( wp ), parameter :: b1711 = . 6982808681238487516481594542254805552510541794271997632640921307356093400075120505480_wp real ( wp ), parameter :: b1712 = . 2745953340127460413630142920026546525788337913278252157685398122819348957290706395825_wp real ( wp ), parameter :: b1713 = - . 8071051158813288531951186779278104056732084407804403857002131168492985419909905100904_wp real ( wp ), parameter :: b1714 = . 2986469883301853807480531774155235135599206769328769914173437804434298240853514778770_wp real ( wp ), parameter :: b1715 = . 5185253025751911700815354370658368214653404020923461413204927007907407344767758710502_wp real ( wp ), parameter :: b1716 = . 4368588562339554617519938616027395568153523718226810275461527253101515442644071737416_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = - . 219224283305227655986509274873524451939291736930860033726812816188870151770657672849 9e-1_wp real ( wp ), parameter :: c3 = - . 567107750472589792060491493383742911153119092627599243856332703213610586011342155009 5e-1_wp real ( wp ), parameter :: c6 = - . 560471976401179941002949852507374631268436578171091445427728613569321533923303834808 3e-1_wp real ( wp ), parameter :: c7 = . 1789297658862876254180602006688963210702341137123745819397993311036789297658862876254_wp real ( wp ), parameter :: c9 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c10 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c11 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c12 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c13 = - . 1789297658862876254180602006688963210702341137123745819397993311036789297658862876254_wp real ( wp ), parameter :: c14 = . 560471976401179941002949852507374631268436578171091445427728613569321533923303834808 3e-1_wp real ( wp ), parameter :: c15 = . 567107750472589792060491493383742911153119092627599243856332703213610586011342155009 5e-1_wp real ( wp ), parameter :: c16 = . 219224283305227655986509274873524451939291736930860033726812816188870151770657672849 9e-1_wp real ( wp ), parameter :: c17 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b156 * f6 + b157 * f7 + & b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b163 * f3 + b1615 * f15 ), f16 ) call me % f ( t + h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c6 * f6 + c7 * f7 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 ) end associate end procedure rko10 !***************************************************************************************** !***************************************************************************************** !> ! Hairer 10th order method. ! !### References ! * Ernst Hairer, \"A Runge-Kutta Method of Order 10\" ! January 1978, IMA Journal of Applied Mathematics 21(1) module procedure rkh10 real ( wp ), parameter :: a2 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: a3 = . 5265091001416125727329516734775408259523008085442588621240322448552569517961160776999_wp real ( wp ), parameter :: a4 = . 7897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a5 = . 3939235701256720143227738119996521367488350094732736567444747389961242969755195414769_wp real ( wp ), parameter :: a6 = . 7666539862535505911932668693560686601417881683220066628197494388337786524595845606945_wp real ( wp ), parameter :: a7 = . 2897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a8 = . 1084776892195672933536461100396272126536495082872530661076180009074872219675135232227_wp real ( wp ), parameter :: a9 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a10 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a11 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a12 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a13 = . 7666539862535505911932668693560686601417881683220066628197494388337786524595845606945_wp real ( wp ), parameter :: a14 = . 2897636502124188590994275102163112389284512128163882931860483672828854276941741165498_wp real ( wp ), parameter :: a15 = . 5265091001416125727329516734775408259523008085442588621240322448552569517961160776999_wp real ( wp ), parameter :: a16 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b21 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b31 = . 2616697163778127283312402097548997641973627614039327706102102491953717704187699219879_wp real ( wp ), parameter :: b32 = . 2648393837637998444017114637226410617549380471403260915138219956598851813773461557120_wp real ( wp ), parameter :: b41 = . 1974409125531047147748568775540778097321128032040970732965120918207213569235435291375_wp real ( wp ), parameter :: b43 = . 5923227376593141443245706326622334291963384096122912198895362754621640707706305874124_wp real ( wp ), parameter :: b51 = . 1973205486287023067036649485978952117578825584337199991656132317825743833021058860612_wp real ( wp ), parameter :: b53 = . 2950833340926721918228255598274359230145509784596048092593866299668586683096812321792_wp real ( wp ), parameter :: b54 = - . 984803125957024842037166964256789980235985274200511516805251227533087546362675767635 1e-1_wp real ( wp ), parameter :: b61 = . 1313134173444616536130177999345909470542768366990469474228776563495603985387834598888_wp real ( wp ), parameter :: b64 = . 1101544395386396206773696967716892932905881833462590372574439152868807925960672597269_wp real ( wp ), parameter :: b65 = . 5251861293704493169028793726497884197969231482767006781394278671973374613247338410788_wp real ( wp ), parameter :: b71 = . 1342003418463226002727476951680931444018781918996634475042938727232827990267510411664_wp real ( wp ), parameter :: b74 = . 6960887032881160802299824047678314828416281106463280160258778625630871045892118300249_wp real ( wp ), parameter :: b75 = . 2504977215703398097125518092509800218006823479445679226772611578145189247821334145350_wp real ( wp ), parameter :: b76 = - . 7910231164923596311158543989705934101157374376741710930213845258180034007039221691766_wp real ( wp ), parameter :: b81 = . 722182741896626194200508184551704977047411771786043553816725961719388531778723978951 7e-1_wp real ( wp ), parameter :: b85 = - . 583363229364561071638060613893065187416111593185084019437153089695318415302860382615 8e-1_wp real ( wp ), parameter :: b86 = . 304755766857452522017495007029403609251908255228701578304998246785713162928493623293 3e-2_wp real ( wp ), parameter :: b87 = . 915481802977862558772264029034691975980004078748700968866107312372230786906422273561 9e-1_wp real ( wp ), parameter :: b91 = . 312550081351661794705012052826347661215092881180084429562242445312997971185711894214 0e-1_wp real ( wp ), parameter :: b96 = . 109123821542412892929483495520771649461954647478325118571959619118955095607399521855 8e-3_wp real ( wp ), parameter :: b97 = . 1567257586309938356246107465648794708917441337700138495832023584660674808897051732313_wp real ( wp ), parameter :: b98 = . 1692943511719750238548830676365254553777828871012866864321262291196648014390164387346_wp real ( wp ), parameter :: b101 = . 119066044146686192421688425808092509950954606115616378176147857033813431604361732217 3e-1_wp real ( wp ), parameter :: b106 = . 2834370820246027860255992266982188665428702252125274101591962479489267620092644600260_wp real ( wp ), parameter :: b107 = - . 4163121675706282353724276181356300212164192944619403444080980777942870933794472685216_wp real ( wp ), parameter :: b108 = . 2646463339497663668210902091085361027053564926326924812994390366777834273576276339310_wp real ( wp ), parameter :: b109 = . 7388498091463228097090708267277348761559649602732109347956391853827232193715322584046_wp real ( wp ), parameter :: b111 = . 234065736913319789147083837798400784250394685775684541636233986599966237705791696029 0e-1_wp real ( wp ), parameter :: b116 = . 944931301894936540130025309560561432498251662377734609644880062513095401829593904774 0e-1_wp real ( wp ), parameter :: b117 = - . 2728720559019952606363092580665963250433705067252372208829562550632597611313198545757_wp real ( wp ), parameter :: b118 = . 2240220461156057997944315522518131846261124699330640294272458923970695162204120486767_wp real ( wp ), parameter :: b119 = . 6043814410751657569719347222576085340011863610739072982875214128849988434755301302413_wp real ( wp ), parameter :: b1110 = - . 308153769292793809006924341582820792992912227338633260500472468662657970610610853317 3e-1_wp real ( wp ), parameter :: b121 = . 454437753101761631576538990815309649864589094199196117783663313790235366676063368708 8e-1_wp real ( wp ), parameter :: b126 = - . 118799667186402858676525421928535634337628599017638647489115092924566035574213086018 3e-2_wp real ( wp ), parameter :: b127 = . 120356549909226109796618821723436205851544669504769411623189591929644148009012557559 6e-1_wp real ( wp ), parameter :: b128 = . 751269029876496682162752137156557214027531550065624051350452811259815018139344504866 6e-1_wp real ( wp ), parameter :: b129 = - . 182209240988801240314118610597483889276157985919218207469682836908895976741907756717 8e-1_wp real ( wp ), parameter :: b1210 = - . 257152854084104346880637622177139620546035418151340038310609043034595616298103127820 7e-3_wp real ( wp ), parameter :: b1211 = . 453207837134746818596527095201150273430374435523846952064829404667274184437570948454 0e-2_wp real ( wp ), parameter :: b131 = . 1767137782592772030958798765711993346076326211800572275450227165783753236705910865492_wp real ( wp ), parameter :: b134 = . 1101544395386396206773696967716892932905881833462590372574439152868807925960672597269_wp real ( wp ), parameter :: b135 = . 5251861293704493169028793726497884197969231482767006781394278671973374613247338410788_wp real ( wp ), parameter :: b136 = - . 4716207672801957948798217912152359376250630852495511063738116933651587031904328351457_wp real ( wp ), parameter :: b137 = . 8990310498491875266368990071875152922763468480002185650326986125011485318362907529907_wp real ( wp ), parameter :: b138 = - . 7467230306916289638599602008088168117750310724922743198498253813592425510843163068237_wp real ( wp ), parameter :: b139 = - 1.017101516756146040853186972006065972987027196800421553809421717321497529906933631477_wp real ( wp ), parameter :: b1310 = . 1263508715195988962951307827687648346421985369266969430473204298972536422365713122404_wp real ( wp ), parameter :: b1311 = . 5660138272355064270682732249907470012763799581315503842554078250210353407723389384909_wp real ( wp ), parameter :: b1312 = . 5986492052088624001098038724464832066388402270027708075754868643976463442046741430643_wp real ( wp ), parameter :: b141 = . 1277534947480869822694777006880571541639616513225826576695303067404023367054772185702_wp real ( wp ), parameter :: b144 = . 6960887032881160802299824047678314828416281106463280160258778625630871045892118300249_wp real ( wp ), parameter :: b145 = . 2504977215703398097125518092509800218006823479445679226772611578145189247821334145350_wp real ( wp ), parameter :: b146 = - . 7368246436028416867609246757454535374296880219263938462439002090823944915566264811824_wp real ( wp ), parameter :: b147 = - . 2778578777108241826773273374900723250222301109862216853553157201018147214465526588169_wp real ( wp ), parameter :: b148 = - . 5997526313598403501296884799197753021563938240370770948150479630779446286262003432092_wp real ( wp ), parameter :: b149 = . 2024692338910704693500237585621903123505161701229471467587157451308903694383321235511_wp real ( wp ), parameter :: b1410 = . 543203698236384978060068465263444360146818996967866677504671881322498988341610487144 5e-2_wp real ( wp ), parameter :: b1411 = - . 107447247415504792010120691989438133712544466427220502431479893641873325892076956337 0e-1_wp real ( wp ), parameter :: b1412 = . 6951688484570234004700591858164146072357628221597117426434839740273190245052113679250_wp real ( wp ), parameter :: b1413 = - . 624665113095250339443154711675518050860016757570131827064555161802161479910207640856 2e-1_wp real ( wp ), parameter :: b151 = . 2616697163778127283312402097548997641973627614039327706102102491953717704187699219879_wp real ( wp ), parameter :: b152 = . 2648393837637998444017114637226410617549380471403260915138219956598851813773461557120_wp real ( wp ), parameter :: b156 = - . 1998011270205324791079663580830885049848273745422651189682301346802905866051733476638_wp real ( wp ), parameter :: b157 = - . 6510499873052827124921914489683813643155863882516440645794556633240216912803403931627_wp real ( wp ), parameter :: b1513 = . 1998011270205324791079663580830885049848273745422651189682301346802905866051733476638_wp real ( wp ), parameter :: b1514 = . 6510499873052827124921914489683813643155863882516440645794556633240216912803403931627_wp real ( wp ), parameter :: b161 = . 5233584004620047139632937023215170497515953383496781610502942213792083195573343614542_wp real ( wp ), parameter :: b163 = - . 5558812136754302060726143105309293455559184141943321053532734480099926250948077261183_wp real ( wp ), parameter :: b1615 = . 5558812136754302060726143105309293455559184141943321053532734480099926250948077261183_wp real ( wp ), parameter :: b171 = . 573207954320655910311426170510398365649521650486746231028599442807856804316065443979 5e-1_wp real ( wp ), parameter :: b172 = - . 5499710763899945608115841896290187887481592249811405834035066676393750158953834290913_wp real ( wp ), parameter :: b173 = - . 6499374174008749135116607420010890619711618624173024222960650740195874521599402439688_wp real ( wp ), parameter :: b176 = - 1.061667370401756207240019539023157074172524666307437022389776456477183230723296269940_wp real ( wp ), parameter :: b177 = - . 404015668980635829426968223421218330826256202391248636522064257787040249155571106248 0e-1_wp real ( wp ), parameter :: b178 = - . 1828302366407607254710272774065261039379052622607190097473388370699414811305446343873_wp real ( wp ), parameter :: b179 = - . 3336592706492786845666575661828162687906558601961826440714525336287466822150370633233_wp real ( wp ), parameter :: b1710 = . 3956485423760567568801345107166015519577734440834727480004748180136901286634710478955_wp real ( wp ), parameter :: b1711 = . 6950570494599735891002099282005158129027126868215679095299345058137097320818106877162_wp real ( wp ), parameter :: b1712 = . 2714873764573748588377263058539220945263829691804714618529052530298982146739754552950_wp real ( wp ), parameter :: b1713 = . 6071810560414041202873774349794680164722661545496003750296400378855628528787164400954_wp real ( wp ), parameter :: b1714 = . 5918636248229842840838104081530739675596239893196764223449596939309288102548549028752_wp real ( wp ), parameter :: b1715 = . 6499374174008749135116607420010890619711618624173024222960650740195874521599402439688_wp real ( wp ), parameter :: b1716 = . 5499710763899945608115841896290187887481592249811405834035066676393750158953834290913_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = - . 384615384615384615384615384615384615384615384615384615384615384615384615384615384615 4e-1_wp real ( wp ), parameter :: c3 = - . 909090909090909090909090909090909090909090909090909090909090909090909090909090909090 9e-1_wp real ( wp ), parameter :: c6 = - . 1348314606741573033707865168539325842696629213483146067415730337078651685393258426966_wp real ( wp ), parameter :: c7 = - . 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c9 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c10 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c11 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c12 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c13 = . 1348314606741573033707865168539325842696629213483146067415730337078651685393258426966_wp real ( wp ), parameter :: c14 = . 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c15 = . 909090909090909090909090909090909090909090909090909090909090909090909090909090909090 9e-1_wp real ( wp ), parameter :: c16 = . 384615384615384615384615384615384615384615384615384615384615384615384615384615384615 4e-1_wp real ( wp ), parameter :: c17 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + & b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b156 * f6 + b157 * f7 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b163 * f3 + b1615 * f15 ), f16 ) call me % f ( t + h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b176 * f6 + b177 * f7 + b178 * f8 + b179 * f9 + & b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c6 * f6 + c7 * f7 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 ) end associate end procedure rkh10 !***************************************************************************************** !***************************************************************************************** end submodule rklib_fixed_steps !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_fixed_steps.f90.html"},{"title":"rklib_fixed_properties.f90 – rklib","text":"This file depends on sourcefile~~rklib_fixed_properties.f90~~EfferentGraph sourcefile~rklib_fixed_properties.f90 rklib_fixed_properties.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_fixed_properties.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_fixed_properties Source Code rklib_fixed_properties.f90 Source Code !***************************************************************************************** !> ! Procedures specifying the properties of the various fixed-step RK methods. submodule ( rklib_module ) rklib_fixed_properties implicit none contains !***************************************************************************************** module procedure euler_properties !! Returns the properties of the [[euler]] method p % short_name = 'euler' p % long_name = 'Euler' p % order = 1 p % number_of_stages = 1 p % number_of_registers = 1 p % cfl = 1.0_wp end procedure euler_properties module procedure midpoint_properties !! Returns the properties of the [[midpoint]] method p % short_name = 'midpoint' p % long_name = 'Midpoint' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 2 end procedure midpoint_properties module procedure heun_properties !! Returns the properties of the [[heun]] method p % short_name = 'heun' p % long_name = 'Heun' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 2 end procedure heun_properties module procedure rkssp22_properties !! Returns the properties of the [[rkssp22]] method p % short_name = 'rkssp22' p % long_name = '2-stage, 2nd order TVD Runge-Kutta Shu-Osher' p % order = 2 p % number_of_stages = 2 p % number_of_registers = 1 p % strong_stability_preserving = . true . p % cfl = 1.0_wp end procedure rkssp22_properties module procedure rk3_properties !! Returns the properties of the [[rk3]] method p % short_name = 'rk3' p % long_name = '3th order Runge-Kutta' p % order = 3 p % number_of_stages = 3 p % number_of_registers = 3 end procedure rk3_properties module procedure rkssp33_properties !! Returns the properties of the [[rkssp33]] method p % short_name = 'rkssp33' p % long_name = '3-stage, 3rd order TVD Runge-Kutta Shu-Osher' p % order = 3 p % number_of_stages = 3 p % number_of_registers = 1 p % strong_stability_preserving = . true . p % cfl = 1.0_wp end procedure rkssp33_properties module procedure rkssp53_properties !! Returns the properties of the [[rkssp53]] method p % short_name = 'rkssp53' p % long_name = '5-stage, 3rd order SSP Runge-Kutta Spiteri-Ruuth' p % order = 3 p % number_of_stages = 5 p % number_of_registers = 2 p % strong_stability_preserving = . true . p % cfl = 2.65_wp end procedure rkssp53_properties module procedure rk4_properties !! Returns the properties of the [[rk4]] method p % short_name = 'rk4' p % long_name = 'Classic 4th order Runge-Kutta' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rk4_properties module procedure rks4_properties !! Returns the properties of the [[rks4]] method p % short_name = 'rks4' p % long_name = '4th order Runge-Kutta Shanks' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rks4_properties module procedure rkr4_properties !! Returns the properties of the [[rkr4]] method p % short_name = 'rkr4' p % long_name = '4th order Runge-Kutta Ralston' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 4 end procedure rkr4_properties module procedure rkls44_properties !! Returns the properties of the [[rkls44]] method p % short_name = 'rkls44' p % long_name = '4-stage, 4th order low storage non-TVD Runge-Kutta Jiang-Shu' p % order = 4 p % number_of_stages = 4 p % number_of_registers = 2 p % low_storage = . true . end procedure rkls44_properties module procedure rkls54_properties !! Returns the properties of the [[rkls54]] method p % short_name = 'rkls54' p % long_name = '5-stage, 4th order low storage Runge-Kutta Carpenter-Kennedy' p % order = 4 p % number_of_stages = 5 p % number_of_registers = 2 p % low_storage = . true . p % cfl = 0.32_wp end procedure rkls54_properties module procedure rkssp54_properties !! Returns the properties of the [[rkssp54]] method p % short_name = 'rkssp54' p % long_name = '5-stage, 4th order SSP Runge-Kutta Spiteri-Ruuth' p % order = 4 p % number_of_stages = 5 p % number_of_registers = 4 p % strong_stability_preserving = . true . p % cfl = 1.51_wp end procedure rkssp54_properties module procedure rks5_properties !! Returns the properties of the [[rks5]] method p % short_name = 'rks5' p % long_name = '5th order Runge-Kutta Shanks' p % order = 5 p % number_of_stages = 5 p % number_of_registers = 5 end procedure rks5_properties module procedure rk5_properties !! Returns the properties of the [[rk5]] method p % short_name = 'rk5' p % long_name = '5th order Runge-Kutta' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rk5_properties module procedure rkc5_properties !! Returns the properties of the [[rkc5]] method p % short_name = 'rkc5' p % long_name = '5th order Runge-Kutta Cassity' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkc5_properties module procedure rkl5_properties !! Returns the properties of the [[rkl5]] method p % short_name = 'rkl5' p % long_name = '5th order Runge-Kutta Lawson' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkl5_properties module procedure rklk5a_properties !! Returns the properties of the [[rklk5a]] method p % short_name = 'rklk5a' p % long_name = '5th order Runge-Kutta Luther-Konen 1' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rklk5a_properties module procedure rklk5b_properties !! Returns the properties of the [[rklk5b]] method p % short_name = 'rklk5b' p % long_name = '5th order Runge-Kutta Luther-Konen 2' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rklk5b_properties module procedure rkb6_properties !! Returns the properties of the [[rkb6]] method p % short_name = 'rkb6' p % long_name = '6th order Runge-Kutta Butcher' p % order = 6 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rkb6_properties module procedure rk7_properties !! Returns the properties of the [[rk7]] method p % short_name = 'rk7' p % long_name = '7th order Runge-Kutta Shanks' p % order = 7 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rk7_properties module procedure rk8_10_properties !! Returns the properties of the [[rk8_10]] method p % short_name = 'rk8_10' p % long_name = '10-stage, 8th order Runge-Kutta Shanks' p % order = 8 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rk8_10_properties module procedure rkcv8_properties !! Returns the properties of the [[rkcv8]] method p % short_name = 'rkcv8' p % long_name = '11-stage, 8th order Runge-Kutta Cooper-Verner' p % order = 8 p % number_of_stages = 11 p % number_of_registers = 11 end procedure rkcv8_properties module procedure rk8_12_properties !! Returns the properties of the [[rk8_12]] method p % short_name = 'rk8_12' p % long_name = '12-stage, 8th order Runge-Kutta Shanks' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rk8_12_properties module procedure rkz10_properties !! Returns the properties of the [[rkz10]] method p % short_name = 'rkz10' p % long_name = '10th order Runge-Kutta Zhang' p % order = 10 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkz10_properties module procedure rko10_properties !! Returns the properties of the [[rko10]] method p % short_name = 'rko10' p % long_name = '10th order Runge-Kutta Ono' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rko10_properties module procedure rkh10_properties !! Returns the properties of the [[rkh10]] method p % short_name = 'rkh10' p % long_name = '10th order Runge-Kutta Hairer' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkh10_properties !***************************************************************************************** end submodule rklib_fixed_properties !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_fixed_properties.f90.html"},{"title":"rklib_variable_properties.f90 – rklib","text":"This file depends on sourcefile~~rklib_variable_properties.f90~~EfferentGraph sourcefile~rklib_variable_properties.f90 rklib_variable_properties.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_variable_properties.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_variable_properties Source Code rklib_variable_properties.f90 Source Code !***************************************************************************************** !> ! Procedures specifying the properties of the various variable-step RK methods. submodule ( rklib_module ) rklib_variable_properties implicit none contains !***************************************************************************************** module procedure rkbs32_properties !! Returns the properties of the [[rkbs32]] method p % short_name = 'rkbs32' p % long_name = 'Bogacki & Shampine 3(2)' p % order = 3 p % number_of_stages = 4 p % number_of_registers = 4 p % fsal = . true . end procedure rkbs32_properties module procedure rkssp43_properties !! Returns the properties of the [[rkssp43]] method p % short_name = 'rkssp43' p % long_name = '4-stage, 3rd order SSP' p % order = 3 p % number_of_stages = 4 p % number_of_registers = 2 p % low_storage = . true . p % strong_stability_preserving = . true . p % cfl = 2.0_wp end procedure rkssp43_properties module procedure rkf45_properties !! Returns the properties of the [[rkf45]] method p % short_name = 'rkf45' p % long_name = 'Fehlberg 4(5)' p % order = 4 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkf45_properties module procedure rkck54_properties !! Returns the properties of the [[rkck54]] method p % short_name = 'rkck54' p % long_name = 'Cash & Karp 5(4)' p % order = 5 p % number_of_stages = 6 p % number_of_registers = 6 end procedure rkck54_properties module procedure rkdp54_properties !! Returns the properties of the [[rkdp54]] method p % short_name = 'rkdp54' p % long_name = 'Dormand-Prince 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkdp54_properties module procedure rkt54_properties !! Returns the properties of the [[rkt54]] method p % short_name = 'rkt54' p % long_name = 'Tsitouras 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkt54_properties module procedure rks54_properties !! Returns the properties of the [[rks54]] method p % short_name = 'rks54' p % long_name = 'Stepanov 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rks54_properties module procedure rkpp54_properties !! Returns the properties of the [[rkpp54]] method p % short_name = 'rkpp54' p % long_name = 'Papakostas-PapaGeorgiou 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkpp54_properties module procedure rkpp54b_properties !! Returns the properties of the [[rkpp54b]] method p % short_name = 'rkpp54b' p % long_name = 'Papakostas-PapaGeorgiou 5(4) b' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 p % fsal = . true . end procedure rkpp54b_properties module procedure rkbs54_properties !! Returns the properties of the [[rkbs54]] method p % short_name = 'rkbs54' p % long_name = 'Bogacki & Shampine 5(4)' p % order = 5 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkbs54_properties module procedure rkss54_properties !! Returns the properties of the [[rkss54]] method p % short_name = 'rkss54' p % long_name = 'Sharp & Smart 5(4)' p % order = 5 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rkss54_properties module procedure rkdp65_properties !! Returns the properties of the [[rkdp65]] method p % short_name = 'rkdp65' p % long_name = 'Dormand-Prince 6(5)' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkdp65_properties module procedure rkc65_properties !! Returns the properties of the [[rkc65]] method p % short_name = 'rkc65' p % long_name = 'Calvo 6(5)' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rkc65_properties module procedure rktp64_properties !! Returns the properties of the [[rktp64]] method p % short_name = 'rktp64' p % long_name = 'Tsitouras & Papakostas NEW6(4)' p % order = 6 p % number_of_stages = 7 p % number_of_registers = 7 end procedure rktp64_properties module procedure rkv65e_properties !! Returns the properties of the [[rkv65e]] method p % short_name = 'rkv65e' p % long_name = 'Verner efficient (9,6(5))' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rkv65e_properties module procedure rkv65r_properties !! Returns the properties of the [[rkv65r]] method p % short_name = 'rkv65r' p % long_name = 'Verner robust (9,6(5))' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rkv65r_properties module procedure rkv65_properties !! Returns the properties of the [[rkv65]] method p % short_name = 'rkv65' p % long_name = 'Verner 6(5)' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure rkv65_properties module procedure dverk65_properties !! Returns the properties of the [[dverk65]] method p % short_name = 'dverk65' p % long_name = 'Verner 6(5) \"DVERK\"' p % order = 6 p % number_of_stages = 8 p % number_of_registers = 8 end procedure dverk65_properties module procedure rktf65_properties !! Returns the properties of the [[rktf65]] method p % short_name = 'rktf65' p % long_name = 'Tsitouras & Famelis 6(5)' p % order = 6 p % number_of_stages = 9 p % number_of_registers = 9 p % fsal = . true . end procedure rktf65_properties module procedure rktp75_properties !! Returns the properties of the [[rktp75]] method p % short_name = 'rktp75' p % long_name = 'Tsitouras & Papakostas NEW7(5)' p % order = 7 p % number_of_stages = 9 p % number_of_registers = 9 end procedure rktp75_properties module procedure rktmy7_properties !! Returns the properties of the [[rktmy7]] method p % short_name = 'rktmy7' p % long_name = '7th order Tanaka-Muramatsu-Yamashita' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rktmy7_properties module procedure rktmy7s_properties !! Returns the properties of the [[rktmy7s]] method p % short_name = 'rktmy7s' p % long_name = '7th order Stable Tanaka-Muramatsu-Yamashita' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rktmy7s_properties module procedure rkv76e_properties !! Returns the properties of the [[rkv76e]] method p % short_name = 'rkv76e' p % long_name = 'Verner efficient (10:7(6))' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rkv76e_properties module procedure rkv76r_properties !! Returns the properties of the [[rkv76r]] method p % short_name = 'rkv76r' p % long_name = 'Verner robust (10:7(6))' p % order = 7 p % number_of_stages = 10 p % number_of_registers = 10 end procedure rkv76r_properties module procedure rkss76_properties !! Returns the properties of the [[rkss76]] method p % short_name = 'rkss76' p % long_name = 'Sharp & Smart 7(6)' p % order = 7 p % number_of_stages = 11 p % number_of_registers = 11 end procedure rkss76_properties module procedure rkf78_properties !! Returns the properties of the [[rkf78]] method p % short_name = 'rkf78' p % long_name = 'Fehlberg 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkf78_properties module procedure rkv78_properties !! Returns the properties of the [[rkv78]] method p % short_name = 'rkv78' p % long_name = 'Verner 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv78_properties module procedure dverk78_properties !! Returns the properties of the [[dverk78]] method p % short_name = 'dverk78' p % long_name = 'Verner \"Maple\" 7(8)' p % order = 7 p % number_of_stages = 13 p % number_of_registers = 13 end procedure dverk78_properties module procedure rkdp85_properties !! Returns the properties of the [[rkdp85]] method p % short_name = 'rkdp85' p % long_name = 'Dormand-Prince 8(5)' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rkdp85_properties module procedure rktp86_properties !! Returns the properties of the [[rktp86]] method p % short_name = 'rktp86' p % long_name = 'Tsitouras & Papakostas NEW8(6)' p % order = 8 p % number_of_stages = 12 p % number_of_registers = 12 end procedure rktp86_properties module procedure rkdp87_properties !! Returns the properties of the [[rkdp87]] method p % short_name = 'rkdp87' p % long_name = 'Dormand & Prince RK8(7)13M' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkdp87_properties module procedure rkv87e_properties !! Returns the properties of the [[rkv87e]] method p % short_name = 'rkv87e' p % long_name = 'Verner efficient (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv87e_properties module procedure rkv87r_properties !! Returns the properties of the [[rkv87r]] method p % short_name = 'rkv87r' p % long_name = 'Verner robust (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkv87r_properties module procedure rkev87_properties !! Returns the properties of the [[rkev87]] method p % short_name = 'rkev87' p % long_name = 'Enright-Verner (8)7' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkev87_properties module procedure rkk87_properties !! Returns the properties of the [[rkk87]] method p % short_name = 'rkk87' p % long_name = 'Kovalnogov-Fedorov-Karpukhina-Simos-Tsitouras 8(7)' p % order = 8 p % number_of_stages = 13 p % number_of_registers = 13 end procedure rkk87_properties module procedure rkf89_properties !! Returns the properties of the [[rkf89]] method p % short_name = 'rkf89' p % long_name = 'Fehlberg 8(9)' p % order = 8 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkf89_properties module procedure rkv89_properties !! Returns the properties of the [[rkv89]] method p % short_name = 'rkv89' p % long_name = 'Verner 8(9)' p % order = 8 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv89_properties module procedure rkt98a_properties !! Returns the properties of the [[rkt98a]] method p % short_name = 'rkt98a' p % long_name = 'Tsitouras 9(8) A' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkt98a_properties module procedure rkv98e_properties !! Returns the properties of the [[rkv98e]] method p % short_name = 'rkv98e' p % long_name = 'Verner efficient (16:9(8))' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv98e_properties module procedure rkv98r_properties !! Returns the properties of the [[rkv98r]] method p % short_name = 'rkv98r' p % long_name = 'Verner robust (16:9(8))' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rkv98r_properties module procedure rks98_properties !! Returns the properties of the [[rks98]] method p % short_name = 'rks98' p % long_name = 'Sharp 9(8)' p % order = 9 p % number_of_stages = 16 p % number_of_registers = 16 end procedure rks98_properties module procedure rkf108_properties !! Returns the properties of the [[rkf108]] method p % short_name = 'rkf108' p % long_name = 'Feagin 8(10)' p % order = 10 p % number_of_stages = 17 p % number_of_registers = 17 end procedure rkf108_properties module procedure rkc108_properties !! Returns the properties of the [[rkc108]] method p % short_name = 'rkc108' p % long_name = 'Curtis 10(8)' p % order = 10 p % number_of_stages = 21 p % number_of_registers = 21 end procedure rkc108_properties module procedure rkb109_properties !! Returns the properties of the [[rkb109]] method p % short_name = 'rkb109' p % long_name = 'Baker 10(9)' p % order = 10 p % number_of_stages = 21 p % number_of_registers = 21 end procedure rkb109_properties module procedure rks1110a_properties !! Returns the properties of the [[rks1110a]] method p % short_name = 'rks1110a' p % long_name = 'Stone 11(10)' p % order = 11 p % number_of_stages = 26 p % number_of_registers = 26 end procedure rks1110a_properties module procedure rkf1210_properties !! Returns the properties of the [[rkf1210]] method p % short_name = 'rkf1210' p % long_name = 'Feagin 12(10)' p % order = 12 p % number_of_stages = 25 p % number_of_registers = 25 end procedure rkf1210_properties module procedure rko129_properties !! Returns the properties of the [[rko129]] method p % short_name = 'rko129' p % long_name = 'Ono 12(9)' p % order = 12 p % number_of_stages = 29 p % number_of_registers = 29 end procedure rko129_properties module procedure rkf1412_properties !! Returns the properties of the [[rkf1412]] method p % short_name = 'rkf1412' p % long_name = 'Feagin 14(12)' p % order = 14 p % number_of_stages = 35 p % number_of_registers = 35 end procedure rkf1412_properties !***************************************************************************************** end submodule rklib_variable_properties !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_variable_properties.f90.html"},{"title":"rklib_variable_steps.f90 – rklib","text":"This file depends on sourcefile~~rklib_variable_steps.f90~~EfferentGraph sourcefile~rklib_variable_steps.f90 rklib_variable_steps.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_variable_steps.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Submodules rklib_variable_steps Source Code rklib_variable_steps.f90 Source Code !***************************************************************************************** !> ! Variable-step RK formulas. submodule ( rklib_module ) rklib_variable_steps implicit none contains !***************************************************************************************** !***************************************************************************************** !> ! Bogacki-Shampine 3(2) method ! !### Reference ! * Bogacki, P and Shampine, L. F. (1989), ! \"A 3(2) pair of Runge-Kutta formulas\", ! Applied Mathematics Letters, 2 (4): 321-325 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkbs32 real ( wp ), parameter :: a2 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 4.0_wp ! real(wp),parameter :: b41 = 2.0_wp / 9.0_wp ! FSAL ! real(wp),parameter :: b42 = 1.0_wp / 3.0_wp ! real(wp),parameter :: b43 = 4.0_wp / 9.0_wp real ( wp ), parameter :: c1 = 2.0_wp / 9.0_wp ! 3th order real ( wp ), parameter :: c2 = 1.0_wp / 3.0_wp real ( wp ), parameter :: c3 = 4.0_wp / 9.0_wp real ( wp ), parameter :: d1 = 7.0_wp / 2 4.0_wp ! 2nd order real ( wp ), parameter :: d2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: d3 = 1.0_wp / 3.0_wp real ( wp ), parameter :: d4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = - d4 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 ) call me % set_fsal_cache ( t + h , xf , f4 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 ) end associate end procedure rkbs32 !***************************************************************************************** !***************************************************************************************** !> ! 4-stage, 3rd order SSP Runge-Kutta method. ! ! @note ! On the current performance tests, this method shows 3rd order convergence, but its ! relative error is one order of magnitude higher than that obtained with other 3rd order ! methods. An implementation error cannot be excluded. ! !### References ! ! * Main method: Kraaijevanger, Johannes Franciscus Bernardus Maria. \"Contractivity of ! runge-kutta methods.\" BIT Numerical Mathematics 31.3 (1991): 482-528. ! [DOI: 10.1007/BF01933264](https://doi.org/10.1007/BF01933264). ! ! * Embedded method: Conde, Sidafa, Imre Fekete, and John N. Shadid. \"Embedded error ! estimation and adaptive step-size control for optimal explicit strong stability preserving ! Runge--Kutta methods.\" arXiv preprint arXiv:1806.08693 (2018). ! [arXiv: 1806.08693](https://arXiv.org/abs/1806.08693) ! ! * Implementation: Ranocha, Hendrik, et al. \"Optimized Runge-Kutta methods with automatic ! step size control for compressible computational fluid dynamics.\" Communications on Applied ! Mathematics and Computation 4.4 (2022): 1191-1228. ! [arXiv:2104.06836](https://arxiv.org/abs/2104.06836) ! module procedure rkssp43 associate ( xtilde => me % funcs (:, 1 ), & fs => me % funcs (:, 2 ), & half_h => h / 2.0_wp ) call me % f ( t , x , fs ) xf = x + half_h * fs call me % f ( t + half_h , xf , fs ) xf = xf + half_h * fs call me % f ( t + h , xf , fs ) xf = xf + half_h * fs xtilde = ( x + 2.0_wp * xf ) / 3.0_wp xf = ( 2.0_wp * x + xf ) / 3.0_wp call me % f ( t + half_h , xf , fs ) xf = xf + half_h * fs xerr = ( xtilde - xf ) / 2.0_wp end associate end procedure rkssp43 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg's 4(5) method. ! ! This is Table III, RK4(5), Formula 2 in the reference. ! !### References ! * E. Fehlberg, \"Low-order classical Runge-Kutta formulas with stepsize control and ! their application to some heat transfer problems\", NASA Technical Report R-315, ! July 1, 1969. module procedure rkf45 real ( wp ), parameter :: a2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 8.0_wp real ( wp ), parameter :: a4 = 1 2.0_wp / 1 3.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 3 2.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 3 2.0_wp real ( wp ), parameter :: b41 = 193 2.0_wp / 219 7.0_wp real ( wp ), parameter :: b42 = - 720 0.0_wp / 219 7.0_wp real ( wp ), parameter :: b43 = 729 6.0_wp / 219 7.0_wp real ( wp ), parameter :: b51 = 43 9.0_wp / 21 6.0_wp real ( wp ), parameter :: b52 = - 8.0_wp real ( wp ), parameter :: b53 = 368 0.0_wp / 51 3.0_wp real ( wp ), parameter :: b54 = - 84 5.0_wp / 410 4.0_wp real ( wp ), parameter :: b61 = - 8.0_wp / 2 7.0_wp real ( wp ), parameter :: b62 = 2.0_wp real ( wp ), parameter :: b63 = - 354 4.0_wp / 256 5.0_wp real ( wp ), parameter :: b64 = 185 9.0_wp / 410 4.0_wp real ( wp ), parameter :: b65 = - 1 1.0_wp / 4 0.0_wp real ( wp ), parameter :: c1 = 1 6.0_wp / 13 5.0_wp ! 5th order real ( wp ), parameter :: c3 = 665 6.0_wp / 1282 5.0_wp real ( wp ), parameter :: c4 = 2856 1.0_wp / 5643 0.0_wp real ( wp ), parameter :: c5 = - 9.0_wp / 5 0.0_wp real ( wp ), parameter :: c6 = 2.0_wp / 5 5.0_wp real ( wp ), parameter :: d1 = 2 5.0_wp / 21 6.0_wp ! 4th order real ( wp ), parameter :: d3 = 140 8.0_wp / 256 5.0_wp real ( wp ), parameter :: d4 = 219 7.0_wp / 410 4.0_wp real ( wp ), parameter :: d5 = - 1.0_wp / 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( d1 * f1 + d3 * f3 + d4 * f4 + d5 * f5 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 ) end associate end procedure rkf45 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Cash-Karp. ! !### Reference ! * J. R. Cash, A. H. Karp. \"A variable order Runge-Kutta method ! for initial value problems with rapidly varying right-hand sides\", ! ACM Transactions on Mathematical Software 16: 201-222, 1990 module procedure rkck54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 7.0_wp / 8.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: b42 = - 9.0_wp / 1 0.0_wp real ( wp ), parameter :: b43 = 6.0_wp / 5.0_wp real ( wp ), parameter :: b51 = - 1 1.0_wp / 5 4.0_wp real ( wp ), parameter :: b52 = 5.0_wp / 2.0_wp real ( wp ), parameter :: b53 = - 7 0.0_wp / 2 7.0_wp real ( wp ), parameter :: b54 = 3 5.0_wp / 2 7.0_wp real ( wp ), parameter :: b61 = 163 1.0_wp / 5529 6.0_wp real ( wp ), parameter :: b62 = 17 5.0_wp / 51 2.0_wp real ( wp ), parameter :: b63 = 57 5.0_wp / 1382 4.0_wp real ( wp ), parameter :: b64 = 4427 5.0_wp / 11059 2.0_wp real ( wp ), parameter :: b65 = 25 3.0_wp / 409 6.0_wp real ( wp ), parameter :: c1 = 3 7.0_wp / 37 8.0_wp ! 5th order real ( wp ), parameter :: c3 = 25 0.0_wp / 62 1.0_wp real ( wp ), parameter :: c4 = 12 5.0_wp / 59 4.0_wp real ( wp ), parameter :: c6 = 51 2.0_wp / 177 1.0_wp real ( wp ), parameter :: d1 = 282 5.0_wp / 2764 8.0_wp ! 4th order real ( wp ), parameter :: d3 = 1857 5.0_wp / 4838 4.0_wp real ( wp ), parameter :: d4 = 1352 5.0_wp / 5529 6.0_wp real ( wp ), parameter :: d5 = 27 7.0_wp / 1433 6.0_wp real ( wp ), parameter :: d6 = 1.0_wp / 4.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c6 * f6 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 ) end associate end procedure rkck54 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 5(4) method (RKDP or DOPRI) ! !### Reference ! * Dormand, J. R.; Prince, P. J. (1980), \"A family of embedded Runge-Kutta formulae\", ! Journal of Computational and Applied Mathematics, 6 (1): 19-26 ! * https://en.wikipedia.org/wiki/Dormand-Prince_method ! !@note This is a first-same-as-last (FSAL) step. module procedure rkdp54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a4 = 4.0_wp / 5.0_wp real ( wp ), parameter :: a5 = 8.0_wp / 9.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b32 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b41 = 4 4.0_wp / 4 5.0_wp real ( wp ), parameter :: b42 = - 5 6.0_wp / 1 5.0_wp real ( wp ), parameter :: b43 = 3 2.0_wp / 9.0_wp real ( wp ), parameter :: b51 = 1937 2.0_wp / 656 1.0_wp real ( wp ), parameter :: b52 = - 2536 0.0_wp / 218 7.0_wp real ( wp ), parameter :: b53 = 6444 8.0_wp / 656 1.0_wp real ( wp ), parameter :: b54 = - 21 2.0_wp / 72 9.0_wp real ( wp ), parameter :: b61 = 901 7.0_wp / 316 8.0_wp real ( wp ), parameter :: b62 = - 35 5.0_wp / 3 3.0_wp real ( wp ), parameter :: b63 = 4673 2.0_wp / 524 7.0_wp real ( wp ), parameter :: b64 = 4 9.0_wp / 17 6.0_wp real ( wp ), parameter :: b65 = - 510 3.0_wp / 1865 6.0_wp real ( wp ), parameter :: b71 = 3 5.0_wp / 38 4.0_wp real ( wp ), parameter :: b73 = 50 0.0_wp / 111 3.0_wp real ( wp ), parameter :: b74 = 12 5.0_wp / 19 2.0_wp real ( wp ), parameter :: b75 = - 218 7.0_wp / 678 4.0_wp real ( wp ), parameter :: b76 = 1 1.0_wp / 8 4.0_wp real ( wp ), parameter :: c1 = b71 ! FSAL real ( wp ), parameter :: c3 = b73 real ( wp ), parameter :: c4 = b74 real ( wp ), parameter :: c5 = b75 real ( wp ), parameter :: c6 = b76 real ( wp ), parameter :: d1 = 517 9.0_wp / 5760 0.0_wp real ( wp ), parameter :: d3 = 757 1.0_wp / 1669 5.0_wp real ( wp ), parameter :: d4 = 39 3.0_wp / 64 0.0_wp real ( wp ), parameter :: d5 = - 9209 7.0_wp / 33920 0.0_wp real ( wp ), parameter :: d6 = 18 7.0_wp / 210 0.0_wp real ( wp ), parameter :: d7 = 1.0_wp / 4 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & tf => t + h ) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( tf , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( tf , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkdp54 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras 5(4) method ! !### Reference ! * Ch. Tsitouras, \"Runge-Kutta pairs of order 5(4) satisfying only the ! first column simplifying assumption\", Computers & Mathematics with ! Applications, Vol. 62, No. 2, pp. 770 - 775, 2011. ! * [Higher-precision coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5n_1.pdf) module procedure rkt54 real ( wp ), parameter :: a2 = 0.161_wp real ( wp ), parameter :: a3 = 0.327_wp real ( wp ), parameter :: a4 = 0.9_wp real ( wp ), parameter :: a5 = 0.9800255409045096857298102862870245954942137979563024768854764293221195950761080302604_wp real ( wp ), parameter :: a6 = 1.0_wp real ( wp ), parameter :: b32 = 0.3354806554923569885444268742502307746751211773934303915373692342452941929761641411569_wp real ( wp ), parameter :: b42 = - 6.359448489975074843148159912383825625952700647415626703305928850207288721235210244366_wp real ( wp ), parameter :: b43 = 4.362295432869581411017727318190886861027813359713760212991062156752264926097707165077_wp real ( wp ), parameter :: b52 = - 1 1.74888356406282787774717033978577296188744178259862899288666928009020615663593781589_wp real ( wp ), parameter :: b53 = 7.495539342889836208304604784564358155658679161518186721010132816213648793440552049753_wp real ( wp ), parameter :: b54 = - 0.9249506636175524925650207933207191611349983406029535244034750452930469056411389539635e-1_wp real ( wp ), parameter :: b62 = - 1 2.92096931784710929170611868178335939541780751955743459166312250439928519268343184452_wp real ( wp ), parameter :: b63 = 8.159367898576158643180400794539253485181918321135053305748355423955009222648673734986_wp real ( wp ), parameter :: b64 = - 0.7158497328140099722453054252582973869127213147363544882721139659546372402303777878835e-1_wp real ( wp ), parameter :: b65 = - 0.2826905039406838290900305721271224146717633626879770007617876201276764571291579142206e-1_wp real ( wp ), parameter :: b21 = a2 real ( wp ), parameter :: b31 = a3 - ( b32 ) real ( wp ), parameter :: b41 = a4 - ( b42 + b43 ) real ( wp ), parameter :: b51 = a5 - ( b52 + b53 + b54 ) real ( wp ), parameter :: b61 = a6 - ( b62 + b63 + b64 + b65 ) real ( wp ), parameter :: c1 = 0.9646076681806522951816731316512876333711995238157997181903319145764851595234062815396e-1_wp real ( wp ), parameter :: c2 = 0.1e-1_wp real ( wp ), parameter :: c3 = 0.4798896504144995747752495322905965199130404621990332488332634944254542060153074523509_wp real ( wp ), parameter :: c4 = 1.379008574103741893192274821856872770756462643091360525934940067397245698027561293331_wp real ( wp ), parameter :: c5 = - 3.290069515436080679901047585711363850115683290894936158531296799594813811049925401677_wp real ( wp ), parameter :: c6 = 2.324710524099773982415355918398765796109060233222962411944060046314465391054716027841_wp real ( wp ), parameter :: d1 = 0.9468075576583945807478876255758922856117527357724631226139574065785592789071067303271e-1_wp real ( wp ), parameter :: d2 = 0.9183565540343253096776363936645313759813746240984095238905939532922955247253608687270e-2_wp real ( wp ), parameter :: d3 = 0.4877705284247615707855642599631228241516691959761363774365216240304071651579571959813_wp real ( wp ), parameter :: d4 = 1.234297566930478985655109673884237654035539930748192848315425833500484878378061439761_wp real ( wp ), parameter :: d5 = - 2.707712349983525454881109975059321670689605166938197378763992255714444407154902012702_wp real ( wp ), parameter :: d6 = 1.866628418170587035753719399566211498666255505244122593996591602841258328965767580089_wp real ( wp ), parameter :: d7 = 1.0_wp / 6 6.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & tf => t + h ) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( tf , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( tf , xf , f7 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkt54 !***************************************************************************************** !***************************************************************************************** !> ! Stepanov 5(4) method. ! !### References ! * Misha Stepanov, Calcolo volume 59, Article number: 41 (2022), ! [Embedded (4,5) pairs of explicit 7-stage Runge-Kutta methods with FSAL property](https://link.springer.com/article/10.1007/s10092-022-00486-1). ! [arxiv](https://arxiv.org/pdf/2108.12590.pdf) (see Table 4) Note that there is also ! a 4th order continuously differential interpolant given. module procedure rks54 real ( wp ), parameter :: a2 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a3 = 2 1.0_wp / 6 5.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 3 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b31 = 2 1.0_wp / 33 8.0_wp real ( wp ), parameter :: b32 = 44 1.0_wp / 169 0.0_wp real ( wp ), parameter :: b41 = 63 9.0_wp / 39 2.0_wp real ( wp ), parameter :: b42 = - 72 9.0_wp / 14 0.0_wp real ( wp ), parameter :: b43 = 175 5.0_wp / 39 2.0_wp real ( wp ), parameter :: b51 = 487899 1.0_wp / 169344 0.0_wp real ( wp ), parameter :: b52 = - 1660 1.0_wp / 179 2.0_wp real ( wp ), parameter :: b53 = 21006 7.0_wp / 2822 4.0_wp real ( wp ), parameter :: b54 = - 146 9.0_wp / 1728 0.0_wp real ( wp ), parameter :: b61 = 1375991 9.0_wp / 423095 4.0_wp real ( wp ), parameter :: b62 = - 299 5.0_wp / 28 7.0_wp real ( wp ), parameter :: b63 = 50731209 1.0_wp / 6129459 0.0_wp real ( wp ), parameter :: b64 = - 2 2.0_wp / 40 5.0_wp real ( wp ), parameter :: b65 = - 704 0.0_wp / 18068 7.0_wp real ( wp ), parameter :: c1 = 144 1.0_wp / 1474 2.0_wp real ( wp ), parameter :: c3 = 11424 4.0_wp / 23492 7.0_wp real ( wp ), parameter :: c4 = 11 8.0_wp / 8 1.0_wp real ( wp ), parameter :: c5 = - 1280 0.0_wp / 440 7.0_wp real ( wp ), parameter :: c6 = 4 1.0_wp / 2 2.0_wp real ( wp ), parameter :: e1 = - 1.0_wp / 27 3.0_wp real ( wp ), parameter :: e3 = 219 7.0_wp / 17402 0.0_wp real ( wp ), parameter :: e4 = - 4.0_wp / 1 5.0_wp real ( wp ), parameter :: e5 = 128 0.0_wp / 146 9.0_wp real ( wp ), parameter :: e6 = - 3374 3.0_wp / 5271 2.0_wp real ( wp ), parameter :: e7 = 12 7.0_wp / 479 2.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rks54 !***************************************************************************************** !***************************************************************************************** !> ! Papakostas-PapaGeorgiou 5(4) method (more stable, higher error) ! !### Reference ! * S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\", ! Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkpp54 real ( wp ), parameter :: a2 = 2.03174603174603174603174603174603174603174603174603174603174603174603174603174603175e-1_wp real ( wp ), parameter :: a3 = 3.01837270341207349081364829396325459317585301837270341207349081364829396325459317585e-1_wp real ( wp ), parameter :: a4 = 8.14973262032085561497326203208556149732620320855614973262032085561497326203208556150e-1_wp real ( wp ), parameter :: a5 = 8.92857142857142857142857142857142857142857142857142857142857142857142857142857142857e-1_wp real ( wp ), parameter :: b21 = 2.03174603174603174603174603174603174603174603174603174603174603174603174603174603175e-1_wp real ( wp ), parameter :: b31 = 7.76317438051542769752206171079008824684316035298737264141194949056564779796226259119e-2_wp real ( wp ), parameter :: b32 = 2.24205526536053072106144212288424576849153698307396614793229586459172918345836691673e-1_wp real ( wp ), parameter :: b41 = 9.97054225910649851955403847106996156261144080556828071531226332913609633807524002826e-1_wp real ( wp ), parameter :: b42 = - 3.9229583098359766207115693643000730264502583412156151006542354260709699970151262085e0_wp real ( wp ), parameter :: b43 = 3.74087734595741233025349172040163301992173458151440200238504117871885768941081076180e0_wp real ( wp ), parameter :: b51 = 2.41107195213820140711520163970784555943075679078314370129890823084996830515582884769e0_wp real ( wp ), parameter :: b52 = - 9.6949301103878662103154820500485383234086722205716227648448127788897312407254087039e0_wp real ( wp ), parameter :: b53 = 8.37096577602619810632388905477462929171641908259741309319801335095185921382851168188e0_wp real ( wp ), parameter :: b54 = - 1.9425047491939044598075150157679367059564650995179117250925166005495342111607468280e-1_wp real ( wp ), parameter :: b61 = 2.71680576250618168562042732618844645610969561203458029063121928183564071601176708510e0_wp real ( wp ), parameter :: b62 = - 1.0546836035293105493140447781471570084309037601955971025884876060757459965008137190e1_wp real ( wp ), parameter :: b63 = 8.82438454669452608734254952418112316791646628404483378649096846259826474086840654822e0_wp real ( wp ), parameter :: b64 = 3.30231934937991900184188201559235426225444020547394478857972406538849522552348656011e-1_wp real ( wp ), parameter :: b65 = - 3.2458620884559418000671727045723496594256831467083753009528409021529501442438509930e-1_wp ! real(wp),parameter :: b71 = 9.15102514359618091216858762219939898816995701624253490052873825554414393852942295257e-2_wp ! FSAL ! real(wp),parameter :: b72 = 0 ! real(wp),parameter :: b73 = 4.53088687963682563226735078441923499983686103419218207034508391590507417156754767246e-1_wp ! real(wp),parameter :: b74 = 7.70212354683768742558003248195356972937967314339813992394948819785937766391608532599e-1_wp ! real(wp),parameter :: b75 = -4.6993115056469338687729550442725993708636301781314244468307254289871602785250570955e-1_wp ! real(wp),parameter :: b76 = 1.55119856481280271970871301567985474283010029891684896248327948966829404918848180181e-1_wp real ( wp ), parameter :: c1 = 9.15102514359618091216858762219939898816995701624253490052873825554414393852942295257e-2_wp real ( wp ), parameter :: c3 = 4.53088687963682563226735078441923499983686103419218207034508391590507417156754767246e-1_wp real ( wp ), parameter :: c4 = 7.70212354683768742558003248195356972937967314339813992394948819785937766391608532599e-1_wp real ( wp ), parameter :: c5 = - 4.6993115056469338687729550442725993708636301781314244468307254289871602785250570955e-1_wp real ( wp ), parameter :: c6 = 1.55119856481280271970871301567985474283010029891684896248327948966829404918848180181e-1_wp real ( wp ), parameter :: d1 = 9.00540754825040114941655607289341515504490822369589853929344566160995864634775952099e-2_wp real ( wp ), parameter :: d3 = 4.58093041355081442291135932317120322249435302966675363526235643007610910215270397680e-1_wp real ( wp ), parameter :: d4 = 7.17141736822002520962978129215068133609337518199443217706780208321061003994969882396e-1_wp real ( wp ), parameter :: d5 = - 3.9730095904319871050513227050199810426175540655366523944169265633781699285936171784e-1_wp real ( wp ), parameter :: d6 = 1.08202581574086926233043124431351687328723979341063863291932824583521682661834318740e-1_wp real ( wp ), parameter :: d7 = 2.38095238095238095238095238095238095238095238095238095238095238095238095238095238095e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkpp54 !***************************************************************************************** !***************************************************************************************** !> ! Papakostas-PapaGeorgiou 5(4) method (less stable, lower error). ! !### Reference ! * S.N. Papakostas and G. PapaGeorgiou, \"A Family of Fifth-order Runge-Kutta Pairs\", ! Mathematics of Computation, Vol. 65, No. 215 (Jul., 1996), pp. 1165-1181 ! !@note This is a first-same-as-last (FSAL) step. module procedure rkpp54b real ( wp ), parameter :: a2 = 2.201257861635220125786163522012578616352201257861635220125786163522012578616352201257e-1_wp real ( wp ), parameter :: a3 = 3.206106870229007633587786259541984732824427480916030534351145038167938931297709923664e-1_wp real ( wp ), parameter :: a4 = 9.160839160839160839160839160839160839160839160839160839160839160839160839160839160839e-1_wp real ( wp ), parameter :: a5 = 9.545454545454545454545454545454545454545454545454545454545454545454545454545454545454e-1_wp real ( wp ), parameter :: b21 = 2.201257861635220125786163522012578616352201257861635220125786163522012578616352201257e-1_wp real ( wp ), parameter :: b31 = 8.712778975584173416467571819824019579278596818367228017015325447235009614824310937591e-2_wp real ( wp ), parameter :: b32 = 2.334828972670590291941029077559582774896567799079307732649612493444437969815278829905e-1_wp real ( wp ), parameter :: b41 = 1.229131120244552267075198689039393789189448076016053493121879281174531378872492304514e0_wp real ( wp ), parameter :: b42 = - 5.174619722997219626464507457640199024688660926548912688647080129723360618339765067163e0_wp real ( wp ), parameter :: b43 = 4.861572518836583443305392684684721319415296766616775279441284764632745323383356678732e0_wp real ( wp ), parameter :: b51 = 1.635985585148686070813241441537203183216255340359063210526474302100593166648405715598e0_wp real ( wp ), parameter :: b52 = - 6.911673476406501672554353133581688231701838702998878887272831441157207088140814883585e0_wp real ( wp ), parameter :: b53 = 6.264598153851822604079697377077162805912462110097874626859336947971237445955455470077e0_wp real ( wp ), parameter :: b54 = - 3.436480804855245688404023048722321197233329291260440465843435436916897900850084754553e-2_wp real ( wp ), parameter :: b61 = 2.080199455181079060589945391266072650640389894799843423576531143602673095720452243744e0_wp real ( wp ), parameter :: b62 = - 8.741042793278798222268721650787838365080091632936417117311519288907488660315135346032e0_wp real ( wp ), parameter :: b63 = 7.705947570635899833548328481096646034173724896740120966754373004394344077008935321798e0_wp real ( wp ), parameter :: b64 = 8.908088473605147947645976479787347297467362259887092033560387203210318720083482332807e-2_wp real ( wp ), parameter :: b65 = - 1.341851172742321513460119863727537927086967812024181933549887311216316996150870428391e-1_wp ! real(wp),parameter :: b71 = 9.660368812495311950055679608569466802836486587849728525846301200717776508398100546410e-2_wp ! FSAL ! real(wp),parameter :: b72 = 0 ! real(wp),parameter :: b73 = 4.847050840514515173851124515232483753229089551347247274647212546244695209679216658037e-1_wp ! real(wp),parameter :: b74 = 2.985721504066570633782817413202582623066368759430782759246016403146502612390979295903e0_wp ! real(wp),parameter :: b75 = -3.882058366130615720106688908002536902372698760219285670845605164160172370352994326721e0_wp ! real(wp),parameter :: b76 = 1.315028089887640449438202247191011235955056179775280898876404494382022471910112359550e0_wp real ( wp ), parameter :: c1 = 9.660368812495311950055679608569466802836486587849728525846301200717776508398100546410e-2_wp real ( wp ), parameter :: c3 = 4.847050840514515173851124515232483753229089551347247274647212546244695209679216658037e-1_wp real ( wp ), parameter :: c4 = 2.985721504066570633782817413202582623066368759430782759246016403146502612390979295903e0_wp real ( wp ), parameter :: c5 = - 3.882058366130615720106688908002536902372698760219285670845605164160172370352994326721e0_wp real ( wp ), parameter :: c6 = 1.315028089887640449438202247191011235955056179775280898876404494382022471910112359550e0_wp real ( wp ), parameter :: d1 = 9.532926220038256951865552620720509864047974971891244940167035171716827175894410248606e-2_wp real ( wp ), parameter :: d3 = 4.890503958633595206242721536021852509608016393506331933941960604717211861520491115111e-1_wp real ( wp ), parameter :: d4 = 2.782787369422591128285131424607412688536477162495912788909265685055380447336451073683e0_wp real ( wp ), parameter :: d5 = - 3.544320847545574336397313295146726421831558091536665262636276708453748484122524958198e0_wp real ( wp ), parameter :: d6 = 1.168225248630669689397825619301351955122370968542635402359716039780907150303652099088e0_wp real ( wp ), parameter :: d7 = 8.928571428571428571428571428571428571428571428571428571428571428571428571428571428571e-3_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 ) call me % set_fsal_cache ( t + h , xf , f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkpp54b !***************************************************************************************** !***************************************************************************************** !> ! Bogacki & Shampine 5(4) ! !### Reference ! * P. Bogacki & L.F. Shampine, \"An efficient Runge-Kutta (4,5) pair\" ! Computers & Mathematics with Applications, ! Volume 32, Issue 6, September 1996, Pages 15-28 ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK5/RKcoeff5p_1.pdf) ! * This pair is in [rksuite](https://github.com/jacobwilliams/rksuite) (`METHD = 2`) module procedure rkbs54 real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b32 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: b41 = 18 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 16 2.0_wp / 34 3.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 6 8.0_wp / 29 7.0_wp real ( wp ), parameter :: b52 = - 4.0_wp / 1 1.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp / 14 3.0_wp real ( wp ), parameter :: b54 = 196 0.0_wp / 386 1.0_wp real ( wp ), parameter :: b61 = 59 7.0_wp / 2252 8.0_wp real ( wp ), parameter :: b62 = 8 1.0_wp / 35 2.0_wp real ( wp ), parameter :: b63 = 6309 9.0_wp / 58572 8.0_wp real ( wp ), parameter :: b64 = 5865 3.0_wp / 36608 0.0_wp real ( wp ), parameter :: b65 = 461 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b71 = 17419 7.0_wp / 95924 4.0_wp real ( wp ), parameter :: b72 = - 3094 2.0_wp / 7993 7.0_wp real ( wp ), parameter :: b73 = 815213 7.0_wp / 1974443 9.0_wp real ( wp ), parameter :: b74 = 66610 6.0_wp / 103918 1.0_wp real ( wp ), parameter :: b75 = - 2942 1.0_wp / 2906 8.0_wp real ( wp ), parameter :: b76 = 48204 8.0_wp / 41421 9.0_wp real ( wp ), parameter :: b81 = 58 7.0_wp / 806 4.0_wp real ( wp ), parameter :: b83 = 444033 9.0_wp / 1549184 0.0_wp real ( wp ), parameter :: b84 = 2435 3.0_wp / 12480 0.0_wp real ( wp ), parameter :: b85 = 38 7.0_wp / 4480 0.0_wp real ( wp ), parameter :: b86 = 215 2.0_wp / 598 5.0_wp real ( wp ), parameter :: b87 = 726 7.0_wp / 9408 0.0_wp real ( wp ), parameter :: c1 = 58 7.0_wp / 806 4.0_wp real ( wp ), parameter :: c3 = 444033 9.0_wp / 1549184 0.0_wp real ( wp ), parameter :: c4 = 2435 3.0_wp / 12480 0.0_wp real ( wp ), parameter :: c5 = 38 7.0_wp / 4480 0.0_wp real ( wp ), parameter :: c6 = 215 2.0_wp / 598 5.0_wp real ( wp ), parameter :: c7 = 726 7.0_wp / 9408 0.0_wp ! real(wp),parameter :: d1 = 6059 / 80640 ! real(wp),parameter :: d2 = 0 ! real(wp),parameter :: d3 = 8559189 / 30983680 ! real(wp),parameter :: d4 = 26411 / 124800 ! real(wp),parameter :: d5 = -927 / 89600 ! real(wp),parameter :: d6 = 443 / 1197 ! real(wp),parameter :: d7 = 7267 / 94080 real ( wp ), parameter :: d1 = 247 9.0_wp / 3499 2.0_wp real ( wp ), parameter :: d3 = 12 3.0_wp / 41 6.0_wp real ( wp ), parameter :: d4 = 61294 1.0_wp / 341172 0.0_wp real ( wp ), parameter :: d5 = 4 3.0_wp / 144 0.0_wp real ( wp ), parameter :: d6 = 227 2.0_wp / 656 1.0_wp real ( wp ), parameter :: d7 = 7993 7.0_wp / 111391 2.0_wp real ( wp ), parameter :: d8 = 329 3.0_wp / 55695 6.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkbs54 !***************************************************************************************** !***************************************************************************************** !> ! Sharp & Smart 5(4) method. ! !### Reference ! * P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\", ! Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. module procedure rkss54 real ( wp ), parameter :: a2 = 1 6.0_wp / 10 5.0_wp real ( wp ), parameter :: a3 = 8.0_wp / 3 5.0_wp real ( wp ), parameter :: a4 = 9.0_wp / 2 0.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 7.0_wp / 9.0_wp real ( wp ), parameter :: b21 = 1 6.0_wp / 10 5.0_wp real ( wp ), parameter :: b31 = 2.0_wp / 3 5.0_wp real ( wp ), parameter :: b32 = 6.0_wp / 3 5.0_wp real ( wp ), parameter :: b41 = 879 3.0_wp / 4096 0.0_wp real ( wp ), parameter :: b42 = - 510 3.0_wp / 819 2.0_wp real ( wp ), parameter :: b43 = 1757 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b51 = 34 7.0_wp / 145 8.0_wp real ( wp ), parameter :: b52 = - 7.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 339 5.0_wp / 1004 4.0_wp real ( wp ), parameter :: b54 = 4979 2.0_wp / 11299 5.0_wp real ( wp ), parameter :: b61 = - 122322410995 9.0_wp / 919977121440 0.0_wp real ( wp ), parameter :: b62 = 123478770 1.0_wp / 252394272 0.0_wp real ( wp ), parameter :: b63 = 56899410192 1.0_wp / 316881008496 0.0_wp real ( wp ), parameter :: b64 = - 10520968388 8.0_wp / 89122783639 5.0_wp real ( wp ), parameter :: b65 = 9.0_wp / 2 5.0_wp real ( wp ), parameter :: b71 = 246250486287 7.0_wp / 830603198880 0.0_wp real ( wp ), parameter :: b72 = - 12399 1.0_wp / 28704 0.0_wp real ( wp ), parameter :: b73 = 10652257849 1.0_wp / 40870951056 0.0_wp real ( wp ), parameter :: b74 = 59061649883 2.0_wp / 80464684891 5.0_wp real ( wp ), parameter :: b75 = - 31913872 6.0_wp / 53408127 5.0_wp real ( wp ), parameter :: b76 = 5275 8.0_wp / 7144 9.0_wp real ( wp ), parameter :: c1 = 109 3.0_wp / 1512 0.0_wp real ( wp ), parameter :: c3 = 6002 5.0_wp / 19099 2.0_wp real ( wp ), parameter :: c4 = 320 0.0_wp / 2070 9.0_wp real ( wp ), parameter :: c5 = 161 1.0_wp / 1196 0.0_wp real ( wp ), parameter :: c6 = 71223 3.0_wp / 285796 0.0_wp real ( wp ), parameter :: c7 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: d1 = 8401821 1.0_wp / 99136800 0.0_wp real ( wp ), parameter :: d3 = 9209897 9.0_wp / 35779168 0.0_wp real ( wp ), parameter :: d4 = 1760694 4.0_wp / 6789100 5.0_wp real ( wp ), parameter :: d5 = 314210 1.0_wp / 23525320 0.0_wp real ( wp ), parameter :: d6 = 2200459680 9.0_wp / 7027009150 0.0_wp real ( wp ), parameter :: d7 = 9.0_wp / 12 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rkss54 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 6(5) method. ! This is `RK6(5)8M` from the reference. ! !### Reference ! * P.J. Prince, J.R. Dormand, \"High order embedded Runge-Kutta formulae\", ! Journal of Computational and Applied Mathematics, ! Volume 7, Issue 1, March 1981, Pages 67-75. module procedure rkdp65 real ( wp ), parameter :: a2 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: b31 = - 2.0_wp / 8 1.0_wp real ( wp ), parameter :: b32 = 2 0.0_wp / 8 1.0_wp real ( wp ), parameter :: b41 = 61 5.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 27 0.0_wp / 34 3.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 324 3.0_wp / 550 0.0_wp real ( wp ), parameter :: b52 = - 5 4.0_wp / 5 5.0_wp real ( wp ), parameter :: b53 = 5094 9.0_wp / 7150 0.0_wp real ( wp ), parameter :: b54 = 499 8.0_wp / 1787 5.0_wp real ( wp ), parameter :: b61 = - 2649 2.0_wp / 3712 5.0_wp real ( wp ), parameter :: b62 = 7 2.0_wp / 5 5.0_wp real ( wp ), parameter :: b63 = 280 8.0_wp / 2337 5.0_wp real ( wp ), parameter :: b64 = - 2420 6.0_wp / 3712 5.0_wp real ( wp ), parameter :: b65 = 33 8.0_wp / 45 9.0_wp real ( wp ), parameter :: b71 = 556 1.0_wp / 237 6.0_wp real ( wp ), parameter :: b72 = - 3 5.0_wp / 1 1.0_wp real ( wp ), parameter :: b73 = - 2411 7.0_wp / 3160 3.0_wp real ( wp ), parameter :: b74 = 89998 3.0_wp / 20077 2.0_wp real ( wp ), parameter :: b75 = - 522 5.0_wp / 183 6.0_wp real ( wp ), parameter :: b76 = 392 5.0_wp / 405 6.0_wp real ( wp ), parameter :: b81 = 46546 7.0_wp / 26611 2.0_wp real ( wp ), parameter :: b82 = - 294 5.0_wp / 123 2.0_wp real ( wp ), parameter :: b83 = - 561020 1.0_wp / 1415814 4.0_wp real ( wp ), parameter :: b84 = 1051357 3.0_wp / 321235 2.0_wp real ( wp ), parameter :: b85 = - 42432 5.0_wp / 20563 2.0_wp real ( wp ), parameter :: b86 = 37622 5.0_wp / 45427 2.0_wp real ( wp ), parameter :: c1 = 6 1.0_wp / 86 4.0_wp real ( wp ), parameter :: c3 = 9841 5.0_wp / 32177 6.0_wp real ( wp ), parameter :: c4 = 1680 7.0_wp / 14601 6.0_wp real ( wp ), parameter :: c5 = 137 5.0_wp / 734 4.0_wp real ( wp ), parameter :: c6 = 137 5.0_wp / 540 8.0_wp real ( wp ), parameter :: c7 = - 3 7.0_wp / 112 0.0_wp real ( wp ), parameter :: c8 = 1.0_wp / 1 0.0_wp real ( wp ), parameter :: d1 = 82 1.0_wp / 1080 0.0_wp real ( wp ), parameter :: d3 = 1968 3.0_wp / 7182 5.0_wp real ( wp ), parameter :: d4 = 17527 3.0_wp / 91260 0.0_wp real ( wp ), parameter :: d5 = 39 5.0_wp / 367 2.0_wp real ( wp ), parameter :: d6 = 78 5.0_wp / 270 4.0_wp real ( wp ), parameter :: d7 = 3.0_wp / 5 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkdp65 !***************************************************************************************** !***************************************************************************************** !> ! Calvo 6(5) method. ! !### Reference ! * M. Calvo, J.I. Montijano, L. Randez, ! \"A new embedded pair of Runge-Kutta formulas of orders 5 and 6\", ! Computers & Mathematics with Applications, Volume 20, Issue 1, 1990, Pages 15-24 module procedure rkc65 real ( wp ), parameter :: a2 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 5.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 1 0.0_wp real ( wp ), parameter :: a5 = 1 4.0_wp / 2 5.0_wp real ( wp ), parameter :: a6 = 1 9.0_wp / 2 5.0_wp real ( wp ), parameter :: a7 = 3522660 7.0_wp / 3568827 9.0_wp real ( wp ), parameter :: b21 = 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: b32 = 3.0_wp / 2 0.0_wp real ( wp ), parameter :: b41 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: b43 = 9.0_wp / 4 0.0_wp real ( wp ), parameter :: b51 = 8672701 5.0_wp / 19685155 3.0_wp real ( wp ), parameter :: b52 = - 6012907 3.0_wp / 5262471 2.0_wp real ( wp ), parameter :: b53 = 95743643 4.0_wp / 137835237 7.0_wp real ( wp ), parameter :: b54 = 8388683 2.0_wp / 14784244 1.0_wp real ( wp ), parameter :: b61 = - 8686084 9.0_wp / 4562896 7.0_wp real ( wp ), parameter :: b62 = 11102288 5.0_wp / 2571648 7.0_wp real ( wp ), parameter :: b63 = 10804668 2.0_wp / 10116766 9.0_wp real ( wp ), parameter :: b64 = - 14175674 6.0_wp / 3600546 1.0_wp real ( wp ), parameter :: b65 = 7313986 2.0_wp / 6017063 3.0_wp real ( wp ), parameter :: b71 = 7775959 1.0_wp / 1609646 7.0_wp real ( wp ), parameter :: b72 = - 4925280 9.0_wp / 645255 5.0_wp real ( wp ), parameter :: b73 = - 38168011 1.0_wp / 5157298 4.0_wp real ( wp ), parameter :: b74 = 87926957 9.0_wp / 6678883 1.0_wp real ( wp ), parameter :: b75 = - 9045312 1.0_wp / 3372216 2.0_wp real ( wp ), parameter :: b76 = 11117955 2.0_wp / 15715582 7.0_wp real ( wp ), parameter :: b81 = 23756426 3.0_wp / 3928029 5.0_wp real ( wp ), parameter :: b82 = - 10052323 9.0_wp / 1067794 0.0_wp real ( wp ), parameter :: b83 = - 26557484 6.0_wp / 2733024 7.0_wp real ( wp ), parameter :: b84 = 31797841 1.0_wp / 1898871 3.0_wp real ( wp ), parameter :: b85 = - 12449438 5.0_wp / 3545362 7.0_wp real ( wp ), parameter :: b86 = 8682244 4.0_wp / 10013863 5.0_wp real ( wp ), parameter :: b87 = - 1287352 3.0_wp / 72423262 5.0_wp real ( wp ), parameter :: b91 = 1757234 9.0_wp / 28926252 3.0_wp real ( wp ), parameter :: b93 = 5751301 1.0_wp / 20186425 0.0_wp real ( wp ), parameter :: b94 = 1558730 6.0_wp / 35450157 1.0_wp real ( wp ), parameter :: b95 = 7178302 1.0_wp / 23498286 5.0_wp real ( wp ), parameter :: b96 = 2967200 0.0_wp / 18048016 7.0_wp real ( wp ), parameter :: b97 = 6556762 1.0_wp / 12706095 2.0_wp real ( wp ), parameter :: b98 = - 7907457 0.0_wp / 21055759 7.0_wp real ( wp ), parameter :: c1 = 1757234 9.0_wp / 28926252 3.0_wp real ( wp ), parameter :: c3 = 5751301 1.0_wp / 20186425 0.0_wp real ( wp ), parameter :: c4 = 1558730 6.0_wp / 35450157 1.0_wp real ( wp ), parameter :: c5 = 7178302 1.0_wp / 23498286 5.0_wp real ( wp ), parameter :: c6 = 2967200 0.0_wp / 18048016 7.0_wp real ( wp ), parameter :: c7 = 6556762 1.0_wp / 12706095 2.0_wp real ( wp ), parameter :: c8 = - 7907457 0.0_wp / 21055759 7.0_wp real ( wp ), parameter :: d1 = 1523166 5.0_wp / 51083033 4.0_wp real ( wp ), parameter :: d3 = 5945299 1.0_wp / 11605044 8.0_wp real ( wp ), parameter :: d4 = - 2839851 7.0_wp / 12243773 8.0_wp real ( wp ), parameter :: d5 = 5667382 4.0_wp / 13701055 9.0_wp real ( wp ), parameter :: d6 = 6800384 9.0_wp / 42667358 3.0_wp real ( wp ), parameter :: d7 = 709763 1.0_wp / 3756402 1.0_wp real ( wp ), parameter :: d8 = - 7122642 9.0_wp / 58309374 2.0_wp real ( wp ), parameter :: d9 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkc65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (9,6(5)) pair. ! !### Reference ! * J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\", ! Annals of Num. Math 1 1994, 225-244. ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Rational coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Efficient.00000144617.081204.RATOnWeb) ! * [Floating point coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Efficient.00000144617.081204.CoeffsOnlyFLOAT) ! !@note This is a first-same-as-last (FSAL) step. module procedure rkv65e real ( wp ), parameter :: a2 = 3.0_wp / 5 0.0_wp real ( wp ), parameter :: a3 = 143 9.0_wp / 1500 0.0_wp real ( wp ), parameter :: a4 = 143 9.0_wp / 1000 0.0_wp real ( wp ), parameter :: a5 = 497 3.0_wp / 1000 0.0_wp real ( wp ), parameter :: a6 = 38 9.0_wp / 40 0.0_wp real ( wp ), parameter :: a7 = 199 9.0_wp / 200 0.0_wp real ( wp ), parameter :: b21 = . 6e-1_wp real ( wp ), parameter :: b31 = . 192399629629629629629629629629629629629 6e-1_wp real ( wp ), parameter :: b32 = . 766933703703703703703703703703703703703 7e-1_wp real ( wp ), parameter :: b41 = . 3597 5e-1_wp real ( wp ), parameter :: b43 = . 107925_wp real ( wp ), parameter :: b51 = 1.318683415233148260919747276431735612861_wp real ( wp ), parameter :: b53 = - 5.042058063628562225427761634715637693344_wp real ( wp ), parameter :: b54 = 4.220674648395413964508014358283902080483_wp real ( wp ), parameter :: b61 = - 4 1.87259166432751461803757780644346812905_wp real ( wp ), parameter :: b63 = 15 9.4325621631374917700365669070346830453_wp real ( wp ), parameter :: b64 = - 12 2.1192135650100309202516203389242140663_wp real ( wp ), parameter :: b65 = 5.531743066200053768252631238332999150076_wp real ( wp ), parameter :: b71 = - 5 4.43015693531650433250642051294142461271_wp real ( wp ), parameter :: b73 = 20 7.0672513650184644273657173866509835987_wp real ( wp ), parameter :: b74 = - 15 8.6108137845899991828742424365058599469_wp real ( wp ), parameter :: b75 = 6.991816585950242321992597280791793907096_wp real ( wp ), parameter :: b76 = - . 185972310622032339776517179954929462369 2e-1_wp real ( wp ), parameter :: b81 = - 5 4.66374178728197680241215648050386959351_wp real ( wp ), parameter :: b83 = 20 7.9528062553893734515824816699834244238_wp real ( wp ), parameter :: b84 = - 15 9.2889574744995071508959805871426654216_wp real ( wp ), parameter :: b85 = 7.018743740796944434698170760964252490817_wp real ( wp ), parameter :: b86 = - . 183387859050457230647278200514173826836 1e-1_wp real ( wp ), parameter :: b87 = - . 511948499788209907787543249724516839584 0e-3_wp ! real(wp),parameter :: b91 = .3438957868357036009278820124728322386520e-1_wp ! FSAL ! real(wp),parameter :: b94 = .2582624555633503404659558098586120858767_wp ! real(wp),parameter :: b95 = .4209371189673537150642551514069801967032_wp ! real(wp),parameter :: b96 = 4.405396469669310170148836816197095664891_wp ! real(wp),parameter :: b97 = -176.4831190242986576151740942499002125029_wp ! real(wp),parameter :: b98 = 172.3641334014150730294022582711902413315_wp real ( wp ), parameter :: c1 = . 343895786835703600927882012472832238652 0e-1_wp real ( wp ), parameter :: c4 = . 2582624555633503404659558098586120858767_wp real ( wp ), parameter :: c5 = . 4209371189673537150642551514069801967032_wp real ( wp ), parameter :: c6 = 4.405396469669310170148836816197095664891_wp real ( wp ), parameter :: c7 = - 17 6.4831190242986576151740942499002125029_wp real ( wp ), parameter :: c8 = 17 2.3641334014150730294022582711902413315_wp real ( wp ), parameter :: d1 = . 490996764838248973090685492797122583647 9e-1_wp real ( wp ), parameter :: d4 = . 2251112229516524153401395320539875329485_wp real ( wp ), parameter :: d5 = . 4694682253029562039431948525047387412553_wp real ( wp ), parameter :: d6 = . 8065792249988867707634161808995217981443_wp real ( wp ), parameter :: d8 = - . 6071194891777959797672951465256217122488_wp real ( wp ), parameter :: d9 = . 568611394404756924114760317876613815359 4e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkv65e !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Famelis Runge-Kutta 6(5) method. ! !### Reference ! * Ch. Tsitouras and I. Th. Famelis, ! [Phase-Fitted modified Runge-Kutta pairs of orders 6(5)](https://www.researchgate.net/publication/251740152_Phase-Fitted_modified_Runge-Kutta_pairs_of_orders_65), ! ICNAAM 2006, Crete, 2006. ! * [More precise rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK6/RKcoeff6g_5.pdf) ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. ! !@note This is a first-same-as-last (FSAL) step. module procedure rktf65 real ( wp ), parameter :: a2 = 9.28961748633879781420765027322404371584699453551912568306010928961748633879781420765e-2_wp real ( wp ), parameter :: a3 = 1.44578313253012048192771084337349397590361445783132530120481927710843373493975903614e-1_wp real ( wp ), parameter :: a4 = 2.16867469879518072289156626506024096385542168674698795180722891566265060240963855422e-1_wp real ( wp ), parameter :: a5 = 5.68000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 7.11864406779661016949152542372881355932203389830508474576271186440677966101694915254e-1_wp real ( wp ), parameter :: a7 = 9.95000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 9.28961748633879781420765027322404371584699453551912568306010928961748633879781420765e-2_wp real ( wp ), parameter :: b31 = 3.20715889781663863106572284887245651635599805316233039884555941697335052470690700435e-2_wp real ( wp ), parameter :: b32 = 1.12506724274845661882113855848624832426801465251509226132026333541109868246906833571e-1_wp real ( wp ), parameter :: b41 = 5.42168674698795180722891566265060240963855421686746987951807228915662650602409638554e-2_wp real ( wp ), parameter :: b43 = 1.62650602409638554216867469879518072289156626506024096385542168674698795180722891566e-1_wp real ( wp ), parameter :: b51 = 6.56598126617283950617283950617283950617283950617283950617283950617283950617283950617e-1_wp real ( wp ), parameter :: b53 = - 2.4972770465185185185185185185185185185185185185185185185185185185185185185185185185e0_wp real ( wp ), parameter :: b54 = 2.40867891990123456790123456790123456790123456790123456790123456790123456790123456790e0_wp real ( wp ), parameter :: b61 = - 1.7212338830272756350112289300338046256920059840520750991645177506321959252208613366e0_wp real ( wp ), parameter :: b63 = 7.22310751192021126636920155870658124799459070542113115974697356535677039490201029989e0_wp real ( wp ), parameter :: b64 = - 5.4959191727393518000813340726320306436524484390690989489777480799761402436788850115e0_wp real ( wp ), parameter :: b65 = 7.05909950626077185672513986332135377282067107530551362971563451692243740099430963481e-1_wp real ( wp ), parameter :: b71 = 4.12867189716161527469018071566157538750756968750429124243842122794843113666860197270e0_wp real ( wp ), parameter :: b73 = - 1.6914025304289438220281346004343739703895247887189472122417356767305063273262951589e1_wp real ( wp ), parameter :: b74 = 1.43289813217405868844323023574174855877382144987680899683823277400972814702596244738e1_wp real ( wp ), parameter :: b75 = - 1.5533550903735309941352947451105003919180320410408681830389632181656533578398372284e0_wp real ( wp ), parameter :: b76 = 1.00472717576076705529415767637517912056749574195795909463557101742500402417456237099e0_wp real ( wp ), parameter :: b81 = 4.46860784284429599022330889710676757001193443328341367781153268526799285074027050787e0_wp real ( wp ), parameter :: b83 = - 1.8345441869429650066499014099391358577583747335752433112108627235199546393109090809e1_wp real ( wp ), parameter :: b84 = 1.55237707233543199854527260736987323920859616527670939779256214402670438227794675418e1_wp real ( wp ), parameter :: b85 = - 1.7228800213316940986071454499455146268823602061289992205388429896934101951354882736e0_wp real ( wp ), parameter :: b86 = 1.08151571740214517180934640319081789154027660669157008569533046194596896725782768317e0_wp real ( wp ), parameter :: b87 = - 5.5723928394169823792218246594446491720651508606454087850143625880490525329866504633e-3_wp ! real(wp),parameter :: b91 = 6.42309093721083246173486105540744934898802830008152394733186013531402447815498986849e-2_wp ! FSAL ! real(wp),parameter :: b94 = 3.32861824699421109595374929094856793240150741775741341700388991831307262888094726546e-1_wp ! real(wp),parameter :: b95 = 2.67859229165778080498089104036336501876704241846808785499560813816788199727204331902e-1_wp ! real(wp),parameter :: b96 = 1.79863899670938711343662526258687438581919457377762276997401953795124106054682426881e-1_wp ! real(wp),parameter :: b97 = 1.51075784805762160255845148219838318965956604578826959670696217369891977986727762107e0_wp ! real(wp),parameter :: b98 = -1.3555737109658678286129266521423384168482207697893972403776325344952795933188090051e0_wp real ( wp ), parameter :: c1 = 6.42309093721083246173486105540744934898802830008152394733186013531402447815498986849e-2_wp real ( wp ), parameter :: c4 = 3.32861824699421109595374929094856793240150741775741341700388991831307262888094726546e-1_wp real ( wp ), parameter :: c5 = 2.67859229165778080498089104036336501876704241846808785499560813816788199727204331902e-1_wp real ( wp ), parameter :: c6 = 1.79863899670938711343662526258687438581919457377762276997401953795124106054682426881e-1_wp real ( wp ), parameter :: c7 = 1.51075784805762160255845148219838318965956604578826959670696217369891977986727762107e0_wp real ( wp ), parameter :: c8 = - 1.3555737109658678286129266521423384168482207697893972403776325344952795933188090051e0_wp real ( wp ), parameter :: d1 = 6.22980954171238844288765383876964441563622264193747564518688416336360055072506207144e-2_wp real ( wp ), parameter :: d4 = 3.40203519635783669970356076069438053031579043631460538976870898652474922063170157204e-1_wp real ( wp ), parameter :: d5 = 2.35997541364108988248916956975923713134336326558729708330181566604979639253608698633e-1_wp real ( wp ), parameter :: d6 = 2.20640276396042514942275961685396046511990069015617783025687162561106239011510198458e-1_wp real ( wp ), parameter :: d7 = 1.15044133952868915480448599961883762022583301353216360785466101429534020477553812807e0_wp real ( wp ), parameter :: d8 = - 1.0029141056750815457282448660706252103934340124906797279726028170808703439444111364e0_wp real ( wp ), parameter :: d9 = - 6.6666666666666666666666666666666666666666666666666666666666666666666666666666666667e-3_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rktf65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (9,6(5)) pair. ! !### Reference ! * J.H. Verner, \"Strategies for deriving new explicit Runge-Kutta pairs\", ! Annals of Num. Math 1 1994, 225-244. ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Rational coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Robust.00010102836.081204.CoeffsOnlyRAT) ! * [Floating point coefficients](https://www.sfu.ca/~jverner/RKV65.IIIXb.Robust.00010102836.081204.CoeffsOnlyFLOAT) ! !@note This is a first-same-as-last (FSAL) step. module procedure rkv65r real ( wp ), parameter :: a2 = . 18_wp real ( wp ), parameter :: a3 = . 1666666666666666666666666666666666666667_wp real ( wp ), parameter :: a4 = . 25_wp real ( wp ), parameter :: a5 = . 53_wp real ( wp ), parameter :: a6 = . 6_wp real ( wp ), parameter :: a7 = . 8_wp real ( wp ), parameter :: b21 = . 18_wp real ( wp ), parameter :: b31 = . 895061728395061728395061728395061728395 1e-1_wp real ( wp ), parameter :: b32 = . 771604938271604938271604938271604938271 6e-1_wp real ( wp ), parameter :: b41 = . 62 5e-1_wp real ( wp ), parameter :: b43 = . 1875_wp real ( wp ), parameter :: b51 = . 316516_wp real ( wp ), parameter :: b53 = - 1.044948_wp real ( wp ), parameter :: b54 = 1.258432_wp real ( wp ), parameter :: b61 = . 2723261273648562625722506556667430550251_wp real ( wp ), parameter :: b63 = - . 8251336032388663967611336032388663967611_wp real ( wp ), parameter :: b64 = 1.048091767881241565452091767881241565452_wp real ( wp ), parameter :: b65 = . 1047157079927685687367911796908817762840_wp real ( wp ), parameter :: b71 = - . 1669941859971651431432960727896179733320_wp real ( wp ), parameter :: b73 = . 6317085020242914979757085020242914979757_wp real ( wp ), parameter :: b74 = . 1746104455277387608214675883848816179643_wp real ( wp ), parameter :: b75 = - 1.066535645908606612252519473401868067778_wp real ( wp ), parameter :: b76 = 1.227210884353741496598639455782312925170_wp real ( wp ), parameter :: b81 = . 3642375168690958164642375168690958164642_wp real ( wp ), parameter :: b83 = - . 2040485829959514170040485829959514170040_wp real ( wp ), parameter :: b84 = - . 3488373781606864313631230924464007170774_wp real ( wp ), parameter :: b85 = 3.261932303285686744333360874714258172905_wp real ( wp ), parameter :: b86 = - 2.755102040816326530612244897959183673469_wp real ( wp ), parameter :: b87 = . 6818181818181818181818181818181818181818_wp ! real(wp),parameter :: b91 = .7638888888888888888888888888888888888889e-1_wp ! FSAL ! real(wp),parameter :: b92 = 0 ! real(wp),parameter :: b93 = 0 ! real(wp),parameter :: b94 = .3694083694083694083694083694083694083694_wp ! real(wp),parameter :: b95 = 0 ! real(wp),parameter :: b96 = .2480158730158730158730158730158730158730_wp ! real(wp),parameter :: b97 = .2367424242424242424242424242424242424242_wp ! real(wp),parameter :: b98 = .6944444444444444444444444444444444444444e-1_wp real ( wp ), parameter :: c1 = . 763888888888888888888888888888888888888 9e-1_wp real ( wp ), parameter :: c4 = . 3694083694083694083694083694083694083694_wp real ( wp ), parameter :: c6 = . 2480158730158730158730158730158730158730_wp real ( wp ), parameter :: c7 = . 2367424242424242424242424242424242424242_wp real ( wp ), parameter :: c8 = . 694444444444444444444444444444444444444 4e-1_wp real ( wp ), parameter :: d1 = . 587002096436058700209643605870020964360 6e-1_wp real ( wp ), parameter :: d4 = . 4807256235827664399092970521541950113379_wp real ( wp ), parameter :: d5 = - . 8534124207691908557883209486122831308356_wp real ( wp ), parameter :: d6 = 1.204648526077097505668934240362811791383_wp real ( wp ), parameter :: d8 = - . 592423730721603062028593943487560508837 1e-1_wp real ( wp ), parameter :: d9 = . 1685804345378813463919846898570302825622_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = - d9 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) ! check the cached function eval of the last step: call me % check_fsal_cache ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) ! last point is cached for the next step: xf = x + h * ( c1 * f1 + c4 * f4 + c6 * f6 + c7 * f7 + c8 * f8 ) call me % set_fsal_cache ( t + h , xf , f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 ) end associate end procedure rkv65r !***************************************************************************************** !***************************************************************************************** !> ! Verner 6(5) method. ! !### References ! * A Contrast of a New RK56 pair with DP56, by Jim Verner, ! Department of Mathematics. Simon Fraser University, Burnaby, Canada, 2006. ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK6/RKcoeff6e_3.pdf) module procedure rkv65 real ( wp ), parameter :: a2 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a6 = 3.0_wp / 4.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 7.0_wp real ( wp ), parameter :: b31 = 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b32 = 1 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b41 = 29 1.0_wp / 137 2.0_wp real ( wp ), parameter :: b42 = - 2 7.0_wp / 4 9.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 8 6.0_wp / 29 7.0_wp real ( wp ), parameter :: b52 = - 1 4.0_wp / 3 3.0_wp real ( wp ), parameter :: b53 = 4 2.0_wp / 14 3.0_wp real ( wp ), parameter :: b54 = 196 0.0_wp / 386 1.0_wp real ( wp ), parameter :: b61 = - 26 7.0_wp / 2252 8.0_wp real ( wp ), parameter :: b62 = 18 9.0_wp / 70 4.0_wp real ( wp ), parameter :: b63 = 6309 9.0_wp / 58572 8.0_wp real ( wp ), parameter :: b64 = 5865 3.0_wp / 36608 0.0_wp real ( wp ), parameter :: b65 = 461 7.0_wp / 2048 0.0_wp real ( wp ), parameter :: b71 = 1094 9.0_wp / 691 2.0_wp real ( wp ), parameter :: b72 = - 6 9.0_wp / 3 2.0_wp real ( wp ), parameter :: b73 = - 9089 1.0_wp / 6809 6.0_wp real ( wp ), parameter :: b74 = 11293 1.0_wp / 2592 0.0_wp real ( wp ), parameter :: b75 = - 6986 1.0_wp / 1792 0.0_wp real ( wp ), parameter :: b76 = 2637 8.0_wp / 1077 3.0_wp real ( wp ), parameter :: b81 = 150 1.0_wp / 1900 8.0_wp real ( wp ), parameter :: b82 = - 2 1.0_wp / 8 8.0_wp real ( wp ), parameter :: b83 = 21951 9.0_wp / 34777 6.0_wp real ( wp ), parameter :: b84 = 16380 7.0_wp / 92664 0.0_wp real ( wp ), parameter :: b85 = - 41 7.0_wp / 64 0.0_wp real ( wp ), parameter :: b86 = 154 4.0_wp / 153 9.0_wp real ( wp ), parameter :: c1 = 7 9.0_wp / 108 0.0_wp real ( wp ), parameter :: c3 = 1968 3.0_wp / 6916 0.0_wp real ( wp ), parameter :: c4 = 1680 7.0_wp / 8424 0.0_wp real ( wp ), parameter :: c6 = 281 6.0_wp / 769 5.0_wp real ( wp ), parameter :: c7 = 1.0_wp / 10 0.0_wp real ( wp ), parameter :: c8 = 18 7.0_wp / 280 0.0_wp real ( wp ), parameter :: d1 = 76 3.0_wp / 1080 0.0_wp real ( wp ), parameter :: d3 = 5904 9.0_wp / 19760 0.0_wp real ( wp ), parameter :: d4 = 8883 7.0_wp / 52650 0.0_wp real ( wp ), parameter :: d5 = 24 3.0_wp / 400 0.0_wp real ( wp ), parameter :: d6 = 1235 2.0_wp / 3847 5.0_wp real ( wp ), parameter :: d8 = 2.0_wp / 2 5.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c6 * f6 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rkv65 !***************************************************************************************** !***************************************************************************************** !> ! Verner 6(5) 'DVERK' method. module procedure dverk65 real ( wp ), parameter :: a2 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a3 = 4.0_wp / 1 5.0_wp real ( wp ), parameter :: a4 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a5 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 1 5.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 4.0_wp / 7 5.0_wp real ( wp ), parameter :: b32 = 1 6.0_wp / 7 5.0_wp real ( wp ), parameter :: b41 = 5.0_wp / 6.0_wp real ( wp ), parameter :: b42 = - 8.0_wp / 3.0_wp real ( wp ), parameter :: b43 = 5.0_wp / 2.0_wp real ( wp ), parameter :: b51 = - 16 5.0_wp / 6 4.0_wp real ( wp ), parameter :: b52 = 5 5.0_wp / 6.0_wp real ( wp ), parameter :: b53 = - 42 5.0_wp / 6 4.0_wp real ( wp ), parameter :: b54 = 8 5.0_wp / 9 6.0_wp real ( wp ), parameter :: b61 = 1 2.0_wp / 5.0_wp real ( wp ), parameter :: b62 = - 8.0_wp real ( wp ), parameter :: b63 = 401 5.0_wp / 61 2.0_wp real ( wp ), parameter :: b64 = - 1 1.0_wp / 3 6.0_wp real ( wp ), parameter :: b65 = 8 8.0_wp / 25 5.0_wp real ( wp ), parameter :: b71 = - 826 3.0_wp / 1500 0.0_wp real ( wp ), parameter :: b72 = 12 4.0_wp / 7 5.0_wp real ( wp ), parameter :: b73 = - 64 3.0_wp / 68 0.0_wp real ( wp ), parameter :: b74 = - 8 1.0_wp / 25 0.0_wp real ( wp ), parameter :: b75 = 248 4.0_wp / 1062 5.0_wp real ( wp ), parameter :: b81 = 350 1.0_wp / 172 0.0_wp real ( wp ), parameter :: b82 = - 30 0.0_wp / 4 3.0_wp real ( wp ), parameter :: b83 = 29727 5.0_wp / 5263 2.0_wp real ( wp ), parameter :: b84 = - 31 9.0_wp / 232 2.0_wp real ( wp ), parameter :: b85 = 2406 8.0_wp / 8406 5.0_wp real ( wp ), parameter :: b87 = 385 0.0_wp / 2670 3.0_wp real ( wp ), parameter :: c1 = 3.0_wp / 4 0.0_wp real ( wp ), parameter :: c3 = 87 5.0_wp / 224 4.0_wp real ( wp ), parameter :: c4 = 2 3.0_wp / 7 2.0_wp real ( wp ), parameter :: c5 = 26 4.0_wp / 195 5.0_wp real ( wp ), parameter :: c7 = 12 5.0_wp / 1159 2.0_wp real ( wp ), parameter :: c8 = 4 3.0_wp / 61 6.0_wp real ( wp ), parameter :: d1 = 1 3.0_wp / 16 0.0_wp real ( wp ), parameter :: d3 = 237 5.0_wp / 598 4.0_wp real ( wp ), parameter :: d4 = 5.0_wp / 1 6.0_wp real ( wp ), parameter :: d5 = 1 2.0_wp / 8 5.0_wp real ( wp ), parameter :: d6 = 3.0_wp / 4 4.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = - d6 real ( wp ), parameter :: e7 = c7 real ( wp ), parameter :: e8 = c8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b87 * f7 ), f8 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c7 * f7 + c8 * f8 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure dverk65 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (10:7(6)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV76.IIa.Efficient.00001675585.081206.OnWeb) module procedure rkv76e real ( wp ), parameter :: a2 = . 5e-2_wp real ( wp ), parameter :: a3 = . 1088888888888888888888888888888888888889_wp real ( wp ), parameter :: a4 = . 1633333333333333333333333333333333333333_wp real ( wp ), parameter :: a5 = . 4555_wp real ( wp ), parameter :: a6 = . 6095094489978381317087004421486024949638_wp real ( wp ), parameter :: a7 = . 884_wp real ( wp ), parameter :: a8 = . 925_wp real ( wp ), parameter :: b21 = . 5e-2_wp real ( wp ), parameter :: b31 = - 1.076790123456790123456790123456790123457_wp real ( wp ), parameter :: b32 = 1.185679012345679012345679012345679012346_wp real ( wp ), parameter :: b41 = . 408333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b43 = . 1225_wp real ( wp ), parameter :: b51 = . 6389139236255726780508121615993336109954_wp real ( wp ), parameter :: b53 = - 2.455672638223656809662640566430653894211_wp real ( wp ), parameter :: b54 = 2.272258714598084131611828404831320283215_wp real ( wp ), parameter :: b61 = - 2.661577375018757131119259297861818119279_wp real ( wp ), parameter :: b63 = 1 0.80451388645613769565396655365532838482_wp real ( wp ), parameter :: b64 = - 8.353914657396199411968048547819291691541_wp real ( wp ), parameter :: b65 = . 8204875949566569791420417341743839209619_wp real ( wp ), parameter :: b71 = 6.067741434696770992718360183877276714679_wp real ( wp ), parameter :: b73 = - 2 4.71127363591108579734203485290746001803_wp real ( wp ), parameter :: b74 = 2 0.42751793078889394045773111748346612697_wp real ( wp ), parameter :: b75 = - 1.906157978816647150624096784352757010879_wp real ( wp ), parameter :: b76 = 1.006172249242068014790040335899474187268_wp real ( wp ), parameter :: b81 = 1 2.05467007625320299509109452892778311648_wp real ( wp ), parameter :: b83 = - 4 9.75478495046898932807257615331444758322_wp real ( wp ), parameter :: b84 = 4 1.14288863860467663259698416710157354209_wp real ( wp ), parameter :: b85 = - 4.461760149974004185641911603484815375051_wp real ( wp ), parameter :: b86 = 2.042334822239174959821717077708608543738_wp real ( wp ), parameter :: b87 = - 0.9834843665406107379530801693870224403537e-1_wp real ( wp ), parameter :: b91 = 1 0.13814652288180787641845141981689030769_wp real ( wp ), parameter :: b93 = - 4 2.64113603171750214622846006736635730625_wp real ( wp ), parameter :: b94 = 3 5.76384003992257007135021178023160054034_wp real ( wp ), parameter :: b95 = - 4.348022840392907653340370296908245943710_wp real ( wp ), parameter :: b96 = 2.009862268377035895441943593011827554771_wp real ( wp ), parameter :: b97 = . 3487490460338272405953822853053145879140_wp real ( wp ), parameter :: b98 = - . 2714390051048312842371587140910297407572_wp real ( wp ), parameter :: b101 = - 4 5.03007203429867712435322405073769635151_wp real ( wp ), parameter :: b103 = 18 7.3272437654588840752418206154201997384_wp real ( wp ), parameter :: b104 = - 15 4.0288236935018690596728621034510402582_wp real ( wp ), parameter :: b105 = 1 8.56465306347536233859492332958439136765_wp real ( wp ), parameter :: b106 = - 7.141809679295078854925420496823551192821_wp real ( wp ), parameter :: b107 = 1.308808578161378625114762706007696696508_wp real ( wp ), parameter :: c1 = . 471556184862722217043176510883817567956 9e-1_wp real ( wp ), parameter :: c4 = . 2575056429843415189596436101037687580986_wp real ( wp ), parameter :: c5 = . 2621665397741262047713863095764527711129_wp real ( wp ), parameter :: c6 = . 1521609265673855740323133199165117535523_wp real ( wp ), parameter :: c7 = . 4939969170032484246907175893227876844296_wp real ( wp ), parameter :: c8 = - . 2943031171403250441557244744092703429139_wp real ( wp ), parameter :: c9 = . 813174723249510999973459944013676189247 8e-1_wp real ( wp ), parameter :: d1 = . 446086066063411762873181759747919778143 2e-1_wp real ( wp ), parameter :: d4 = . 2671640378571372680509102260943837899738_wp real ( wp ), parameter :: d5 = . 2201018300177293019979715776650753096323_wp real ( wp ), parameter :: d6 = . 2188431703143156830983120833512893824578_wp real ( wp ), parameter :: d7 = . 2289871705411202883378173889763552365362_wp real ( wp ), parameter :: d10 = . 202951846633562822276705479381043035855 4e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rkv76e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (10:7(6)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV76.IIa.Robust.000027015646.081206.CoeffsOnlyFLOAT) module procedure rkv76r real ( wp ), parameter :: a2 = . 5e-2_wp real ( wp ), parameter :: a3 = . 1088888888888888888888888888888888888889_wp real ( wp ), parameter :: a4 = . 1633333333333333333333333333333333333333_wp real ( wp ), parameter :: a5 = . 455_wp real ( wp ), parameter :: a6 = . 6059617471462913245758145021744683294809_wp real ( wp ), parameter :: a7 = . 835_wp real ( wp ), parameter :: a8 = . 915_wp real ( wp ), parameter :: b21 = . 5e-2_wp real ( wp ), parameter :: b31 = - 1.076790123456790123456790123456790123457_wp real ( wp ), parameter :: b32 = 1.185679012345679012345679012345679012346_wp real ( wp ), parameter :: b41 = . 408333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b43 = . 1225_wp real ( wp ), parameter :: b51 = . 6360714285714285714285714285714285714286_wp real ( wp ), parameter :: b53 = - 2.444464285714285714285714285714285714286_wp real ( wp ), parameter :: b54 = 2.263392857142857142857142857142857142857_wp real ( wp ), parameter :: b61 = - 2.535121107934924522925638355466021548721_wp real ( wp ), parameter :: b63 = 1 0.29937465444926792043851446075602491361_wp real ( wp ), parameter :: b64 = - 7.951303288599057994949321745826687653648_wp real ( wp ), parameter :: b65 = . 7930114892310059220122601427111526182380_wp real ( wp ), parameter :: b71 = 1.001876581252463296196919658309499980821_wp real ( wp ), parameter :: b73 = - 4.166571282442379833131393800547097145319_wp real ( wp ), parameter :: b74 = 3.834343292912864241255266521825137866520_wp real ( wp ), parameter :: b75 = - . 5023333356071084754746433022861176561240_wp real ( wp ), parameter :: b76 = . 6676847438841607711538509226985769541026_wp real ( wp ), parameter :: b81 = 2 7.25501835463076713033396381917500571735_wp real ( wp ), parameter :: b83 = - 4 2.00461727841063835531864544390929536961_wp real ( wp ), parameter :: b84 = - 1 0.53571312661948991792108160054652610372_wp real ( wp ), parameter :: b85 = 8 0.49553671141193714798365215892682663420_wp real ( wp ), parameter :: b86 = - 6 7.34388227179051346854907596321297564093_wp real ( wp ), parameter :: b87 = 1 3.04865761077793746347118702956696476271_wp real ( wp ), parameter :: b91 = - 3.039737805711496514694365865875576322688_wp real ( wp ), parameter :: b93 = 1 0.13816141032980111185794619070970015044_wp real ( wp ), parameter :: b94 = - 6.429305674864721572146282562955529806444_wp real ( wp ), parameter :: b95 = - 1.586437148340827658711531285379861057947_wp real ( wp ), parameter :: b96 = 1.892178184196842441086430890913135336502_wp real ( wp ), parameter :: b97 = . 196993354076088690612923601633364428380 1e-1_wp real ( wp ), parameter :: b98 = . 544169898279332354651027242479525729779 0e-2_wp real ( wp ), parameter :: b101 = - 1.444951891677773513735100317935571236052_wp real ( wp ), parameter :: b103 = 8.031891385995591922411703322301956043504_wp real ( wp ), parameter :: b104 = - 7.583174166340134682079888302367158860498_wp real ( wp ), parameter :: b105 = 3.581616935319007421124768544245287869686_wp real ( wp ), parameter :: b106 = - 2.436972263219952941118380906569375238373_wp real ( wp ), parameter :: b107 = . 8515899999232617933968976603248614217339_wp real ( wp ), parameter :: c1 = . 474258378337067560835691727175745346989 3e-1_wp real ( wp ), parameter :: c4 = . 2562236165937056265996172745827462344816_wp real ( wp ), parameter :: c5 = . 2695137683307420661947381725807595288676_wp real ( wp ), parameter :: c6 = . 1268662240909278284598913836473917324788_wp real ( wp ), parameter :: c7 = . 2488722594206007162204644942764749276729_wp real ( wp ), parameter :: c8 = . 307448374082006313353043884790991847686 4e-2_wp real ( wp ), parameter :: c9 = . 480238099894969433081890633471431233232 1e-1_wp real ( wp ), parameter :: d1 = . 474852476992996310375312738057279615522 7e-1_wp real ( wp ), parameter :: d4 = . 2559941258869063329715491824590539387050_wp real ( wp ), parameter :: d5 = . 2705847808106768872253089109926813573239_wp real ( wp ), parameter :: d6 = . 1250561868442599291363882232374691792045_wp real ( wp ), parameter :: d7 = . 2520446872374386050718404382019744256218_wp real ( wp ), parameter :: d10 = . 488349715214186145573819713030931375925 9e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rkv76r !***************************************************************************************** !***************************************************************************************** !> ! Sharp & Smart 7(6)) method. ! !### Reference ! * P.W. Sharp and E. Smart, \"Explicit Runge-Kutta Pairs with One More Derivative Evaluation than the Minimum\", ! Siam Journal of Scientific Computing, Vol. 14, No. 2, pages. 338-348, March 1993. module procedure rkss76 real ( wp ), parameter :: a2 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 2.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a4 = 4.10000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a5 = 5.70000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 8.60000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a7 = 1.89734415567554714447412739459850829747319955773081476233291234325271903458210730096e-1_wp real ( wp ), parameter :: a8 = 7.20000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 8.33333333333333333333333333333333333333333333333333333333333333333333333333333333333e-1_wp real ( wp ), parameter :: b21 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = - 9.5040000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b32 = 1.16640000000000000000000000000000000000000000000000000000000000000000000000000000000e0_wp real ( wp ), parameter :: b41 = 2.08796296296296296296296296296296296296296296296296296296296296296296296296296296296e-2_wp real ( wp ), parameter :: b43 = 3.89120370370370370370370370370370370370370370370370370370370370370370370370370370370e-1_wp real ( wp ), parameter :: b51 = 1.18750000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b53 = 1.16301546391752577319587628865979381443298969072164948453608247422680412371134020619e-1_wp real ( wp ), parameter :: b54 = 3.34948453608247422680412371134020618556701030927835051546391752577319587628865979381e-1_wp real ( wp ), parameter :: b61 = - 1.5500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b63 = 1.26419952627798163356436989147106218572232900382472285320441881685984429300871726173e0_wp real ( wp ), parameter :: b64 = - 1.4923539518900343642611683848797250859106529209621993127147766323024054982817869416e0_wp real ( wp ), parameter :: b65 = 1.24315442561205273069679849340866290018832391713747645951035781544256120527306967985e0_wp real ( wp ), parameter :: b71 = 5.32404818460847244880465705884559948010013316415508489398809027494008261005225044158e-2_wp real ( wp ), parameter :: b73 = 2.63190905005944241395058267679896015089060637096436681624641838124193103498139523636e-1_wp real ( wp ), parameter :: b74 = - 2.2992382584611251312628854152112504080421217996536744225053579460154724416916797118e-1_wp real ( wp ), parameter :: b75 = 1.15020646834503298021503942059822317395934020502096307719511499416916110119759292822e-1_wp real ( wp ), parameter :: b76 = - 1.1793792272865036330907499347198456734463853501634919800207211363690892091042619602e-2_wp real ( wp ), parameter :: b81 = 1.01833250525779410925056563242748813162631092358712093910139906641055533787858600752e-1_wp real ( wp ), parameter :: b83 = 3.67650402264021539690171893675768442020160413827130555257229267948121503927894530089e0_wp real ( wp ), parameter :: b84 = - 1.3855064886371957262483408369918407532890732638371784299323099278110242610274153464e0_wp real ( wp ), parameter :: b85 = 1.10585536543242802574001937437432027003273412482516272090263172771172002666187126910e0_wp real ( wp ), parameter :: b86 = - 1.0442483660597752261508675907091877183025101004713070424083201191960255004658089509e-1_wp real ( wp ), parameter :: b87 = - 2.6742613133552495847033672783119939782776450815708712332119223741033637886546789293e0_wp real ( wp ), parameter :: b91 = - 7.0447278725441551253173322525085182085211898876535016082680181826378260058107213334e-2_wp real ( wp ), parameter :: b93 = 2.57849022691031881978588351318784339446713208794819222430391001640703602812013523694e0_wp real ( wp ), parameter :: b94 = - 1.7350648742705534137364675443051006373149953263240864527861457323256158060409724050e0_wp real ( wp ), parameter :: b95 = 1.42076925842656275743055431879937793726979032667289381452783078677285932226590451543e0_wp real ( wp ), parameter :: b96 = - 2.9994002356151422690421464715731127083992859674624280646321971569589440552603013442e-2_wp real ( wp ), parameter :: b97 = - 1.2738969184577295296576255258337856595600446902141816152083573928383427523639249936e0_wp real ( wp ), parameter :: b98 = - 5.6523078193672326545416641274185392359344306198325340774902191286635758037098793739e-2_wp real ( wp ), parameter :: b101 = 1.12188929566497595110309434330843411185625863434326301999225595935353619019786372693e-1_wp real ( wp ), parameter :: b103 = - 9.4478179712463597825861610011719624575041188851623316508747159935931144002457572402e0_wp real ( wp ), parameter :: b104 = 4.72928685969506458483541566908828462557623316160618665528745761537386487691574498692e0_wp real ( wp ), parameter :: b105 = - 2.1535862973784519387089628138790863673524951190739517405566618338182156484450238408e0_wp real ( wp ), parameter :: b106 = - 1.5003176034455324417891524003264793431625218068048301751161484381435733494665524146e0_wp real ( wp ), parameter :: b107 = 7.32228493516381472239660644916433114018057892752031963313864026830512965942191992469e0_wp real ( wp ), parameter :: b108 = - 1.0171881348813826762245691938848731969668479025856205360601503764094927919654990399e0_wp real ( wp ), parameter :: b109 = 2.95514928252634993696651385667894218804354576106590151218235316235004803476538125126e0_wp real ( wp ), parameter :: b111 = 1.26777165953424622263709262280041924195783046360695933368685779852909039382377368327e-2_wp real ( wp ), parameter :: b113 = - 1.0069960582593041001624297555860950454903273549350063548770708526802347773053466643e1_wp real ( wp ), parameter :: b114 = 4.62534242829213472690316528870584469183038900200033492988915271866480429986075212694e0_wp real ( wp ), parameter :: b115 = - 2.1610283337552771303871477895705714199299596209426922872912146988024763221546690181e0_wp real ( wp ), parameter :: b116 = - 1.6781218510451494897112741151843512565528970972689550849978046265492823347869148500e0_wp real ( wp ), parameter :: b117 = 8.10720558296219407284479196100506119564876298707858160850972380908658055161496706221e0_wp real ( wp ), parameter :: b118 = - 9.9034046697481677826772383527914286511512256496144470729835169541686418859152250889e-1_wp real ( wp ), parameter :: b119 = 3.15422550651861313801611511995610591660252253880816949662233444183429486317261609431e0_wp real ( wp ), parameter :: c1 = 5.49699932022185175241442181883597507655769828815946565807124447154669050002194891238e-2_wp real ( wp ), parameter :: c5 = 5.27017899545901255716693676497458451526562246965950291388111745594043275344112358966e-1_wp real ( wp ), parameter :: c6 = - 5.7640010460253178146313005308307447324854309728047707823605247362054750175374841292e-1_wp real ( wp ), parameter :: c7 = 2.99473766075857495911574410718252874676717226006797736321538429237884690787951256718e-1_wp real ( wp ), parameter :: c8 = - 4.3511367243178106005606352407152054011086352330218025896985334826437712480556570901e-1_wp real ( wp ), parameter :: c9 = 1.06972120095994204935876677034564950812746194295206963084848042699967266056102464470e0_wp real ( wp ), parameter :: c10 = 6.03309172503935230080145014048744282630882217762450220670627753378570948660063724257e-2_wp real ( wp ), parameter :: d1 = 5.51948596604973952360558600324258025823235723557842084969195331387651217650789597054e-2_wp real ( wp ), parameter :: d5 = 5.38771472959210564343392307526371633391618262286599376534904900758161647057057668278e-1_wp real ( wp ), parameter :: d6 = - 7.2002415738222743602899270061101901552733320251540477745765896611188358469552535128e-1_wp real ( wp ), parameter :: d7 = 2.98535385184885222079230265390696358266728601821898916299256942162002807672289159564e-1_wp real ( wp ), parameter :: d8 = - 4.8443496217457505118337730236228616963449840154387472665426235404619128753787634184e-1_wp real ( wp ), parameter :: d9 = 1.24611378035303235082118128195796776952198421286248671471499632269996834100646561750e0_wp real ( wp ), parameter :: d11 = 6.58436213991769547325102880658436213991769547325102880658436213991769547325102880658e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 real ( wp ), parameter :: e11 = - d11 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b111 * f1 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 ), f11 ) xf = x + h * ( c1 * f1 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 ) xerr = h * ( e1 * f1 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 ) end associate end procedure rkss76 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (13:8(7)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV87.IIa.Efficient.000000282866.081208.FLOAT40OnWeb) module procedure rkv87e real ( wp ), parameter :: a2 = . 5e-1_wp real ( wp ), parameter :: a3 = . 1065625_wp real ( wp ), parameter :: a4 = . 15984375_wp real ( wp ), parameter :: a5 = . 39_wp real ( wp ), parameter :: a6 = . 465_wp real ( wp ), parameter :: a7 = . 155_wp real ( wp ), parameter :: a8 = . 943_wp real ( wp ), parameter :: a9 = . 9018020417358569582597079406783721499560_wp real ( wp ), parameter :: a10 = . 909_wp real ( wp ), parameter :: a11 = . 94_wp real ( wp ), parameter :: b21 = . 5e-1_wp real ( wp ), parameter :: b31 = - . 6993164062 5e-2_wp real ( wp ), parameter :: b32 = . 1135556640625_wp real ( wp ), parameter :: b41 = . 39960937 5e-1_wp real ( wp ), parameter :: b43 = . 1198828125_wp real ( wp ), parameter :: b51 = . 3613975628004575124052940721184028345129_wp real ( wp ), parameter :: b53 = - 1.341524066700492771819987788202715834917_wp real ( wp ), parameter :: b54 = 1.370126503900035259414693716084313000404_wp real ( wp ), parameter :: b61 = . 490472027972027972027972027972027972028 0e-1_wp real ( wp ), parameter :: b64 = . 2350972042214404739862988335493427143122_wp real ( wp ), parameter :: b65 = . 1808555929813567288109039636534544884850_wp real ( wp ), parameter :: b71 = . 616928904428904428904428904428904428904 4e-1_wp real ( wp ), parameter :: b74 = . 1123656831464027662262557035130015442303_wp real ( wp ), parameter :: b75 = - . 388504607145136676704904810811124456745 6e-1_wp real ( wp ), parameter :: b76 = . 197918871252204585537918871252204585537 9e-1_wp real ( wp ), parameter :: b81 = - 1.767630240222326875735597119572145586714_wp real ( wp ), parameter :: b84 = - 6 2.5_wp real ( wp ), parameter :: b85 = - 6.061889377376669100821361459659331999758_wp real ( wp ), parameter :: b86 = 5.650823198222763138561298030600840174201_wp real ( wp ), parameter :: b87 = 6 5.62169641937623283799566054863063741227_wp real ( wp ), parameter :: b91 = - 1.180945066554970799825116282628297957882_wp real ( wp ), parameter :: b94 = - 4 1.50473441114320841606641502701994225874_wp real ( wp ), parameter :: b95 = - 4.434438319103725011225169229846100211776_wp real ( wp ), parameter :: b96 = 4.260408188586133024812193710744693240761_wp real ( wp ), parameter :: b97 = 4 3.75364022446171584987676829438379303004_wp real ( wp ), parameter :: b98 = . 787142548991231068744647504422630755086 0e-2_wp real ( wp ), parameter :: b101 = - 1.281405999441488405459510291182054246266_wp real ( wp ), parameter :: b104 = - 4 5.04713996013986630220754257136007322267_wp real ( wp ), parameter :: b105 = - 4.731362069449576477311464265491282810943_wp real ( wp ), parameter :: b106 = 4.514967016593807841185851584597240996214_wp real ( wp ), parameter :: b107 = 4 7.44909557172985134869022392235929015114_wp real ( wp ), parameter :: b108 = . 105922829711166113568739395551654287522 8e-1_wp real ( wp ), parameter :: b109 = - . 574684226384461625443231847828629623202 1e-2_wp real ( wp ), parameter :: b111 = - 1.724470134262485191756709817484481861731_wp real ( wp ), parameter :: b114 = - 6 0.92349008483054016518434619253765246063_wp real ( wp ), parameter :: b115 = - 5.951518376222392455202832767061854868290_wp real ( wp ), parameter :: b116 = 5.556523730698456235979791650843592496839_wp real ( wp ), parameter :: b117 = 6 3.98301198033305336837536378635995939281_wp real ( wp ), parameter :: b118 = . 146420282504149615927592139175945267600 3e-1_wp real ( wp ), parameter :: b119 = . 646040877235820360362186514497765071489 2e-1_wp real ( wp ), parameter :: b1110 = - . 793032316900887898402445254869337329144 7e-1_wp real ( wp ), parameter :: b121 = - 3.301622667747079016353994789790983625569_wp real ( wp ), parameter :: b124 = - 11 8.0112723597525085666923303957898868510_wp real ( wp ), parameter :: b125 = - 1 0.14142238845611248642783916034510897595_wp real ( wp ), parameter :: b126 = 9.139311332232057923544012273556827000619_wp real ( wp ), parameter :: b127 = 12 3.3759428284042683684847180986501894364_wp real ( wp ), parameter :: b128 = 4.623244378874580474839807625067630924792_wp real ( wp ), parameter :: b129 = - 3.383277738068201923652550971536811240814_wp real ( wp ), parameter :: b1210 = 4.527592100324618189451265339351129035325_wp real ( wp ), parameter :: b1211 = - 5.828495485811622963193088019162985703755_wp real ( wp ), parameter :: b131 = - 3.039515033766309030040102851821200251056_wp real ( wp ), parameter :: b134 = - 10 9.2608680894176254686444192322164623352_wp real ( wp ), parameter :: b135 = - 9.290642497400293449717665542656897549158_wp real ( wp ), parameter :: b136 = 8.430504981764911142134299253836167803454_wp real ( wp ), parameter :: b137 = 11 4.2010010378331313557424041095523427476_wp real ( wp ), parameter :: b138 = - . 9637271342145479358162375658987901652762_wp real ( wp ), parameter :: b139 = - 5.034884088802189791198680336183332323118_wp real ( wp ), parameter :: b1310 = 5.958130824002923177540402165388172072794_wp real ( wp ), parameter :: c1 = . 442798941900795107471674666809851886211 1e-1_wp real ( wp ), parameter :: c6 = . 3541049391724448744815552028733568354121_wp real ( wp ), parameter :: c7 = . 2479692154956437828667629415370663023884_wp real ( wp ), parameter :: c8 = - 1 5.69420203883808405099207034271191213468_wp real ( wp ), parameter :: c9 = 2 5.08406496555856261343930031237186278518_wp real ( wp ), parameter :: c10 = - 3 1.73836778626027646833156112007297739997_wp real ( wp ), parameter :: c11 = 2 2.93828327398878395231483560344797018313_wp real ( wp ), parameter :: c12 = - . 2361324633071542145259900641263517600737_wp real ( wp ), parameter :: d1 = . 443126152290897921248643651020902976489 3e-1_wp real ( wp ), parameter :: d6 = . 3546095642343226447863179350895055038855_wp real ( wp ), parameter :: d7 = . 2478480431366653069619986721504458660016_wp real ( wp ), parameter :: d8 = 4.448134732475784492725128317159648871312_wp real ( wp ), parameter :: d9 = 1 9.84688636611873369930932399297687935291_wp real ( wp ), parameter :: d10 = - 2 3.58162337746561841969517960870394965085_wp real ( wp ), parameter :: d13 = - . 3601679437289775162124536737746202409110_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv87e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (13:8(7)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV87.IIa.Robust.00000754677.081208.CoeffsOnlyFLOAT) module procedure rkv87r real ( wp ), parameter :: a2 = . 25_wp real ( wp ), parameter :: a3 = . 1128884514435695538057742782152230971129_wp real ( wp ), parameter :: a4 = . 1693326771653543307086614173228346456693_wp real ( wp ), parameter :: a5 = . 424_wp real ( wp ), parameter :: a6 = . 509_wp real ( wp ), parameter :: a7 = . 867_wp real ( wp ), parameter :: a8 = . 15_wp real ( wp ), parameter :: a9 = . 7090680365138684008060140010282474786750_wp real ( wp ), parameter :: a10 = . 32_wp real ( wp ), parameter :: a11 = . 45_wp real ( wp ), parameter :: b21 = . 25_wp real ( wp ), parameter :: b31 = . 874008465049152320526863275948774119770 5e-1_wp real ( wp ), parameter :: b32 = . 254876049386543217530879506203456851358 1e-1_wp real ( wp ), parameter :: b41 = . 423331692913385826771653543307086614173 2e-1_wp real ( wp ), parameter :: b43 = . 1269995078740157480314960629921259842520_wp real ( wp ), parameter :: b51 = . 4260950588874226149488144523757227409094_wp real ( wp ), parameter :: b53 = - 1.598795284659152326542773323065718111709_wp real ( wp ), parameter :: b54 = 1.596700225771729711593958870689995370799_wp real ( wp ), parameter :: b61 = . 507193372967139295150906181385136392393 3e-1_wp real ( wp ), parameter :: b64 = . 2543337726460040758275471440887777803137_wp real ( wp ), parameter :: b65 = . 2039468900572819946573622377727085804470_wp real ( wp ), parameter :: b71 = - . 2900037471752311097038837928542589612409_wp real ( wp ), parameter :: b74 = 1.344187391026078988943868110941433700318_wp real ( wp ), parameter :: b75 = - 2.864777943361442730961110382703656282947_wp real ( wp ), parameter :: b76 = 2.677594299510594851721126064616481543870_wp real ( wp ), parameter :: b81 = . 985350113379935464697404029807270142847 6e-1_wp real ( wp ), parameter :: b85 = . 2219268063075138484202403649819738790358_wp real ( wp ), parameter :: b86 = - . 1814062291180699431269033828807395245747_wp real ( wp ), parameter :: b87 = . 109444114725625482369226149180386312541 5e-1_wp real ( wp ), parameter :: b91 = . 3871105254573114467944461816516637340565_wp real ( wp ), parameter :: b94 = - 1.442445497485527757125674555307792776717_wp real ( wp ), parameter :: b95 = 2.905398189069950931769134644923384844174_wp real ( wp ), parameter :: b96 = - 1.853771069630105929084333267581197802518_wp real ( wp ), parameter :: b97 = . 1400364809872815426949732510977124147922_wp real ( wp ), parameter :: b98 = . 5727394081149581657574677462444770648875_wp real ( wp ), parameter :: b101 = - . 1612440344443930810063001619791348059544_wp real ( wp ), parameter :: b104 = - . 1733960295735898408357840447396256789490_wp real ( wp ), parameter :: b105 = - 1.301289281406514740601681274517249252974_wp real ( wp ), parameter :: b106 = 1.137950375173861730855879213143100347212_wp real ( wp ), parameter :: b107 = - . 317476496639668801069235211380430246989 8e-1_wp real ( wp ), parameter :: b108 = . 9335129382493366643981106448605688485659_wp real ( wp ), parameter :: b109 = - . 837863183347338527033008556296164332015 0e-1_wp real ( wp ), parameter :: b111 = - . 191994448815895332815108046514835760731 4e-1_wp real ( wp ), parameter :: b114 = . 2733085726526428490794232625401612427562_wp real ( wp ), parameter :: b115 = - . 6753497320694437291969161121094238085624_wp real ( wp ), parameter :: b116 = . 3415184981384601607173848997472838271198_wp real ( wp ), parameter :: b117 = - . 679500648033757724789205161985246293919 1e-1_wp real ( wp ), parameter :: b118 = . 965917522476238788842655864912163765097 5e-1_wp real ( wp ), parameter :: b119 = . 1325308251118210118072103846654538995123_wp real ( wp ), parameter :: b1110 = . 3685495936038611344690632995153166681295_wp real ( wp ), parameter :: b121 = . 6091877403645289867688841211158881778458_wp real ( wp ), parameter :: b124 = - 2.272569085898001676899980093141308839972_wp real ( wp ), parameter :: b125 = 4.757898342694029006815525588191478549755_wp real ( wp ), parameter :: b126 = - 5.516106706692758482429468966784424824484_wp real ( wp ), parameter :: b127 = . 2900596369680119270909581856594617437818_wp real ( wp ), parameter :: b128 = . 5691423963359036822910985845480184914563_wp real ( wp ), parameter :: b129 = . 7926795760332167027133991620589332757995_wp real ( wp ), parameter :: b1210 = . 1547372045328882289412619077184989823205_wp real ( wp ), parameter :: b1211 = 1.614970895662181624708321510633454443497_wp real ( wp ), parameter :: b131 = . 8873576220853471966321169405198102270488_wp real ( wp ), parameter :: b134 = - 2.975459782108536755851363280470930158198_wp real ( wp ), parameter :: b135 = 5.600717009488163059799039254835009892383_wp real ( wp ), parameter :: b136 = - 5.915607450536674468001493018994165735184_wp real ( wp ), parameter :: b137 = . 2202968915613492701687914254080763833124_wp real ( wp ), parameter :: b138 = . 1015509782446221666614327134090299699755_wp real ( wp ), parameter :: b139 = 1.151434564738605590978039775212585055356_wp real ( wp ), parameter :: b1310 = 1.929710166527123939613436190080584365307_wp real ( wp ), parameter :: c1 = . 447295646666957142030158404290493824664 7e-1_wp real ( wp ), parameter :: c6 = . 1569103352770819981336869801072664540918_wp real ( wp ), parameter :: c7 = . 1846097340815163774070245187352627789204_wp real ( wp ), parameter :: c8 = . 2251638060208699104247941940035072197092_wp real ( wp ), parameter :: c9 = . 1479461565197023468700517988544914175374_wp real ( wp ), parameter :: c10 = . 760555424449558252697983619103364910127 3e-1_wp real ( wp ), parameter :: c11 = . 1227729023501861961082434631592143738854_wp real ( wp ), parameter :: c12 = . 418119586389916315833848428008718823767 9e-1_wp real ( wp ), parameter :: d1 = . 458471114004959258786647301220102820958 8e-1_wp real ( wp ), parameter :: d6 = . 2623189140415238743744335658484580339239_wp real ( wp ), parameter :: d7 = . 1916937233785261190448573863568842900803_wp real ( wp ), parameter :: d8 = . 2170917232790261833097840742290644856820_wp real ( wp ), parameter :: d9 = . 1273818962483370679680316945065673786790_wp real ( wp ), parameter :: d10 = . 1151053038536532625824051575004319214889_wp real ( wp ), parameter :: d13 = . 405613277984375668418233914365836080500 5e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv87r !***************************************************************************************** !***************************************************************************************** !> ! Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras 8(7) method ! !### References ! * Kovalnogov, Fedorov, Karpukhina, Simos, Tsitouras, ! [Runge-Kutta Embedded Methods of Orders 8(7) for Use in Quadruple Precision Computations](https://www.researchgate.net/publication/363396601_Runge-Kutta_Embedded_Methods_of_Orders_87_for_Use_in_Quadruple_Precision_Computations), ! Mathematics, Volume 10, Issue 18, 2022. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/t87.m) ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. module procedure rkk87 real ( wp ), parameter :: a2 = 2.80032137795311131773988246233287895064681826798949202422973107165103409675642981593e-2_wp real ( wp ), parameter :: a3 = 1.17211542455798199481153380377682961936340701290456762390962847695113281163272045568e-1_wp real ( wp ), parameter :: a4 = 1.75817313683697299221730070566524442904511051935685143586444271542669921744908068353e-1_wp real ( wp ), parameter :: a5 = 4.12418774972264624675725499028219180367525003545123161749372304663713787609586013029e-1_wp real ( wp ), parameter :: a6 = 4.85788040125653655249646480463893555030416915791171976577551272195807115944917385569e-1_wp real ( wp ), parameter :: a7 = 1.61945436881864850373469095233292102203653467396439966236482648418795024659046870770e-1_wp real ( wp ), parameter :: a8 = 9.69999622636762726575177046252154115146102466697694310620259374331752600661643542686e-1_wp real ( wp ), parameter :: a9 = 9.67212187169379825484211792872972399851315982484116576998481473839941803252105313177e-1_wp real ( wp ), parameter :: a10 = 9.51733593009250954565256387258796094610870512261999333726263998154934269533352125669e-1_wp real ( wp ), parameter :: a11 = 9.68202771170154148019728796247765727264175032590143665416817858054805198295905065247e-1_wp real ( wp ), parameter :: b21 = 2.80032137795311131773988246233287895064681826798949202422973107165103409675642981593e-2_wp real ( wp ), parameter :: b31 = - 1.2809147513766000602840952300143562083196457175706189219831636475705535103141265693e-1_wp real ( wp ), parameter :: b32 = 2.45303017593458205509562903379118613607705175036823097559603878184775233215504838718e-1_wp real ( wp ), parameter :: b41 = 4.39543284209243248054325176416311107261277629839212858966110678856674804362270170882e-2_wp real ( wp ), parameter :: b43 = 1.31862985262772974416297552924893332178383288951763857689833203657002441308681051264e-1_wp real ( wp ), parameter :: b51 = 3.37793581678770282454466907421349755434169654489904742664883921124336709641723527478e-1_wp real ( wp ), parameter :: b53 = - 1.2272549349642134972638116912742760383098006898941228119302659681159830923493358553e0_wp real ( wp ), parameter :: b54 = 1.30188012825770783948507028288114558866194048988029573253542612869530190101485281039e0_wp real ( wp ), parameter :: b61 = 5.55707180742854953774795421040398153698425834244408078243992150711110988336315378908e-2_wp real ( wp ), parameter :: b64 = 2.51201707056335789089668842569664694678061738700922859182154307406956224053004373812e-1_wp real ( wp ), parameter :: b65 = 1.79015614995032370782498095790188986963634606811801882820741709651062551409519978967e-1_wp real ( wp ), parameter :: b71 = 6.68574347263499831237129311835436351646983012984884556347193166264996297617553477916e-2_wp real ( wp ), parameter :: b74 = 1.18464279145447863166879557612335382759089586154167432866512942838128687075481264338e-1_wp real ( wp ), parameter :: b75 = - 4.9625776043451759740292422000972633501142622216483112027320727273129396510418976777e-2_wp real ( wp ), parameter :: b76 = 2.62494990535187638231690284383855963023506866196027758824536604264425581164307083575e-2_wp real ( wp ), parameter :: b81 = - 2.8828852333227597022830828823050925772450620891223369172510088561729332090076138712e0_wp real ( wp ), parameter :: b84 = - 6.2440208358504107644024024514118804244308557646280655968919670956442898657820780678e1_wp real ( wp ), parameter :: b85 = - 1.8568693804204652514452785270528995249754499915069250253336433143578163151508120889e0_wp real ( wp ), parameter :: b86 = 3.63680272715359047470913994410370911642713568016445118939856192986207517504148311731e0_wp real ( wp ), parameter :: b87 = 6.45131598677305048496184230256252416917236861835199785338289493414147153759342124993e1_wp real ( wp ), parameter :: b91 = - 2.8044177030062210609793681802747767950835025205736626228179150569096325843989251959e0_wp real ( wp ), parameter :: b94 = - 6.0724923514423992066404703993882607779493861739697985128789442636875454172217394054e1_wp real ( wp ), parameter :: b95 = - 1.8439925449308251307668788876911848442475862438554757484077098049668682602503860260e0_wp real ( wp ), parameter :: b96 = 3.58341131683436481398169260904220163311107056209428641899333714250541234007157548631e0_wp real ( wp ), parameter :: b97 = 6.27562314336350305301529075880419713175762252340352806429712952136086493920793363741e1_wp real ( wp ), parameter :: b98 = 9.03199061022739500562657637369442031043920598379602859131908802359360137694011980530e-4_wp real ( wp ), parameter :: b101 = - 2.3867982748517262502656630171168908345533985055664349630981323816949508696589885131e0_wp real ( wp ), parameter :: b104 = - 5.1627063109123959312754417147040225909854829131526049890819790306938208226330016825e1_wp real ( wp ), parameter :: b105 = - 1.7536886231138950479955440820659955467185829948904221201507369859127252396249986529e0_wp real ( wp ), parameter :: b106 = 3.28049564858832505325605350268523413528007142886883523265902376116967563208653997102e0_wp real ( wp ), parameter :: b107 = 5.34320383180959473568498403628072891122624268061087757470806360734926014535143237753e1_wp real ( wp ), parameter :: b108 = - 5.1871871749054814179692202838627648419279746926926280632135852213870053073114332763e-2_wp real ( wp ), parameter :: b109 = 5.86215051636139696546789708280127234169485458303572483088290904612000509294669736233e-2_wp real ( wp ), parameter :: b111 = - 2.8321844833678190185701414338307927128819672795892717761836464805524068227918002961e0_wp real ( wp ), parameter :: b114 = - 6.1331782300299804156579640111028383230359362036389968935124318342451005168121921975e1_wp real ( wp ), parameter :: b115 = - 1.8486956144396106169929005145135397640092170913037834243348598217810735996138171447e0_wp real ( wp ), parameter :: b116 = 3.60245017376559155660368881029952545634233977218873589569763598469965203717427900757e0_wp real ( wp ), parameter :: b117 = 6.33778491267616171592057963772550300254984410272010439289876706968447695603368885389e1_wp real ( wp ), parameter :: b118 = - 1.4415990912159637680387758372857367088383577073617671128542010599339480760810185327e-2_wp real ( wp ), parameter :: b119 = 1.79850128395124994545750132486994455015114960352855140561364324582618209513891071121e-2_wp real ( wp ), parameter :: b1110 = - 3.0031531771736374212615868099161882544231529622685172138561311528231108610020573246e-3_wp real ( wp ), parameter :: b121 = - 4.0538618880188790999955490264156166727875270359794492495465581102083340028760864442e0_wp real ( wp ), parameter :: b124 = - 8.9573424620688719282465667174595500838253854698064448723443082397797973834679560630e1_wp real ( wp ), parameter :: b125 = - 2.1741602779971559275874048256900391711850691989074830707636990301813342017567123130e0_wp real ( wp ), parameter :: b126 = 4.90277984566299792538628476237120023643679128602934227568174295156160923256501166825e0_wp real ( wp ), parameter :: b127 = 9.21308811959261498386202635372829188598935945642923099199446915685906551410074148629e1_wp real ( wp ), parameter :: b128 = - 1.0615798848368367252894309217989593007445778391108496729169226136688468696047739072e2_wp real ( wp ), parameter :: b129 = 7.15244888413933960825621793700326950628446023762240029384782852503289700766263846501e2_wp real ( wp ), parameter :: b1210 = - 5.8741641553458552194866804448440052315485267257872985945866582180724510668125792910e1_wp real ( wp ), parameter :: b1211 = - 5.5057747263167612955576982434494393109010422446397491970269616705184666943368933333e2_wp real ( wp ), parameter :: b131 = - 1.5426576117927492437318562966731433591238073288653428133646285261236434041035073113e1_wp real ( wp ), parameter :: b134 = - 4.0842463342275502766697135673815027343155742825350936594898511656878424252559774704e2_wp real ( wp ), parameter :: b135 = - 1.3703330210475051981990819170722577088815078067066750833460437452985770323423290388e1_wp real ( wp ), parameter :: b136 = 3.86861748380283839981840260187136546795985692447349074847554981151691738530542460349e1_wp real ( wp ), parameter :: b137 = 4.11064481162365098634151552138274804840423912301682160479008282157089539192861116480e2_wp real ( wp ), parameter :: b138 = - 5.2625896422984832125592493280526052943397760170789326525937264023403370769397788590e3_wp real ( wp ), parameter :: b139 = 3.59120401468351311263204092337603786279414890192167416431431463233495380766373955611e4_wp real ( wp ), parameter :: b1310 = - 2.9428565975170828789337889297586264433907248673913937095047691721267811559650558183e3_wp real ( wp ), parameter :: b1311 = - 2.7717790023268800945373425815230530802580454445165684044343605511598675223912861429e4_wp real ( wp ), parameter :: c1 = 4.62710144559749507643438665696565266477463923324303941594264880671698479184226674443e-2_wp ! T87bvec real ( wp ), parameter :: c6 = 3.70024261130579576116287766947369066170603597694346848542347561458083670963945787412e-1_wp real ( wp ), parameter :: c7 = 2.59046906438325331026392759493100306344056209570957698029069680004143772202534147226e-1_wp real ( wp ), parameter :: c8 = 4.39526151941350658964709597497950710839169490812990167038362808341439048915871691690e2_wp real ( wp ), parameter :: c9 = 2.54699783254442554735577328130608901983844079828777855737604201012040528247471881063e-3_wp real ( wp ), parameter :: c10 = 3.71160265008765610052766362243075634874924739787417318444668226976710753590848050226e1_wp real ( wp ), parameter :: c11 = - 4.6957326399687634573980555517438556136604535869046208947272277883667432727498150998e2_wp real ( wp ), parameter :: c12 = - 6.8840856231271330609815727620309531232087818518011356960217496959521261426131545711e0_wp real ( wp ), parameter :: c13 = 1.37281997918834547346514047866805411030176899063475546305931321540062434963579604579e-1_wp real ( wp ), parameter :: e1 = 5.85295842711462028451365622251323842688965073989360183197454435266584210000889266151e-6_wp ! T87evec real ( wp ), parameter :: e6 = 9.39126876188594677381173972498082533162562941166681876536458073485843968573614935432e-5_wp real ( wp ), parameter :: e7 = - 2.1858808218216614235946904150275890682710865952635557843966398644681448317233753310e-5_wp real ( wp ), parameter :: e8 = 3.82147409595844443746138596500996871329379548062006046484595468670810794523045735063e2_wp real ( wp ), parameter :: e9 = 7.57594006256575145190136681251802140063882902269863054941867158087541929651242123261e2_wp real ( wp ), parameter :: e10 = - 5.0572248451354316398326863204362055571090849938158216870898444305578120258688628657e0_wp real ( wp ), parameter :: e11 = - 1.1340723721698801541760405363985770050927554242983877738142540298190990694395498870e3_wp real ( wp ), parameter :: e12 = - 6.2562494403371433261049312272180260925647282293121510390454736461360125268267236809e-1_wp real ( wp ), parameter :: e13 = 1.37281997918834547346514047866805411030176899063475546305931321540062434963579604579e-2_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkk87 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most efficient\" Runge-Kutta (16:9(8)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV98.IIa.Efficient.000000349.081209.FLOAT6040OnWeb) module procedure rkv98e real ( wp ), parameter :: a2 = . 346 2e-1_wp real ( wp ), parameter :: a3 = . 970243506387804459482836167710061751763 3e-1_wp real ( wp ), parameter :: a4 = . 1455365259581706689224254251565092627645_wp real ( wp ), parameter :: a5 = . 561_wp real ( wp ), parameter :: a6 = . 2290079115904850126662751771814700052182_wp real ( wp ), parameter :: a7 = . 5449920884095149873337248228185299947818_wp real ( wp ), parameter :: a8 = . 645_wp real ( wp ), parameter :: a9 = . 4837500000000000000000000000000000000000_wp real ( wp ), parameter :: a10 = . 675 7e-1_wp real ( wp ), parameter :: a11 = . 2500_wp real ( wp ), parameter :: a12 = . 6590650618730998549405331618649220295334_wp real ( wp ), parameter :: a13 = . 8206_wp real ( wp ), parameter :: a14 = . 9012_wp real ( wp ), parameter :: b21 = . 346 2e-1_wp real ( wp ), parameter :: b31 = - . 38933543885728732701704268722928447853 2e-1_wp real ( wp ), parameter :: b32 = . 1359578945245091786499878854939346230295_wp real ( wp ), parameter :: b41 = . 363841314895426672306063562891273156911 1e-1_wp real ( wp ), parameter :: b43 = . 1091523944686280016918190688673819470733_wp real ( wp ), parameter :: b51 = 2.025763914393969636805657604282571047511_wp real ( wp ), parameter :: b53 = - 7.638023836496292020387602153091964592952_wp real ( wp ), parameter :: b54 = 6.173259922102322383581944548809393545442_wp real ( wp ), parameter :: b61 = . 511227558940606087279227088164828839719 7e-1_wp real ( wp ), parameter :: b64 = . 1770823794555021537929910813839068684087_wp real ( wp ), parameter :: b65 = . 8027762409222501453613869810802528375 9e-3_wp real ( wp ), parameter :: b71 = . 1316006357975216279279871693164256985334_wp real ( wp ), parameter :: b74 = - . 2957276252669636417685183174672273730699_wp real ( wp ), parameter :: b75 = . 87813780356429523742112470405388666708 2e-1_wp real ( wp ), parameter :: b76 = . 6213052975225274774321435005639430026100_wp real ( wp ), parameter :: b81 = . 716666666666666666666666666666666666666 7e-1_wp real ( wp ), parameter :: b86 = . 3305533578915319409260346730051472207728_wp real ( wp ), parameter :: b87 = . 2427799754418013924072986603281861125606_wp real ( wp ), parameter :: b91 = . 718066406250000000000000000000000000000 0e-1_wp real ( wp ), parameter :: b96 = . 3294380283228177160744825466257672816401_wp real ( wp ), parameter :: b97 = . 1165190029271822839255174533742327183599_wp real ( wp ), parameter :: b98 = - . 340136718750000000000000000000000000000 0e-1_wp real ( wp ), parameter :: b101 = . 483675764634064698661128771884408577354 9e-1_wp real ( wp ), parameter :: b106 = . 392898992567616397433319004205704700285 2e-1_wp real ( wp ), parameter :: b107 = . 1054740945890344608263649267140088017604_wp real ( wp ), parameter :: b108 = - . 214386528464831266598264229383053399621 4e-1_wp real ( wp ), parameter :: b109 = - . 1041229174627194437759832813847147895623_wp real ( wp ), parameter :: b111 = - . 266456148720147863533728924384973734053 4e-1_wp real ( wp ), parameter :: b116 = . 333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b117 = - . 1631072244872467239162704487554706387141_wp real ( wp ), parameter :: b118 = . 339608168412776119948795493001552292824 4e-1_wp real ( wp ), parameter :: b119 = . 1572319413814626097110769806810024118077_wp real ( wp ), parameter :: b1110 = . 2152267478031879552303534778794770376960_wp real ( wp ), parameter :: b121 = . 368900924870862233478635986322763398971 8e-1_wp real ( wp ), parameter :: b126 = - . 1465181576725542928653609891758501156785_wp real ( wp ), parameter :: b127 = . 2242577768172024345345469822625833796001_wp real ( wp ), parameter :: b128 = . 229440571706607263709089790275379080303 4e-1_wp real ( wp ), parameter :: b129 = - . 3585005290572876135739442488933033433 4e-2_wp real ( wp ), parameter :: b1210 = . 866922331644438550686920361904445390605 3e-1_wp real ( wp ), parameter :: b1211 = . 4383840651968337846196219974168630120572_wp real ( wp ), parameter :: b131 = - . 4866012215113340846662212357570395295088_wp real ( wp ), parameter :: b136 = - 6.304602650282852990657772792012007122988_wp real ( wp ), parameter :: b137 = - . 281245618289472564778284183790118418111_wp real ( wp ), parameter :: b138 = - 2.679019236219849057687906597489223155566_wp real ( wp ), parameter :: b139 = . 518815663924157511565311164615012522024_wp real ( wp ), parameter :: b1310 = 1.365353187603341710683633635235238678626_wp real ( wp ), parameter :: b1311 = 5.885091088503946585721274891680604830712_wp real ( wp ), parameter :: b1312 = 2.802808786272062889819965117517532194812_wp real ( wp ), parameter :: b141 = . 4185367457753471441471025246471931649633_wp real ( wp ), parameter :: b146 = 6.724547581906459363100870806514855026676_wp real ( wp ), parameter :: b147 = - . 425444280164611790606983409697113064616_wp real ( wp ), parameter :: b148 = 3.343279153001265577811816947557982637749_wp real ( wp ), parameter :: b149 = . 617081663117537759528421117507709784737_wp real ( wp ), parameter :: b1410 = - . 929966123939932833937749523988800852013_wp real ( wp ), parameter :: b1411 = - 6.099948804751010722472962837945508844846_wp real ( wp ), parameter :: b1412 = - 3.002206187889399044804158084895173690015_wp real ( wp ), parameter :: b1413 = . 2553202529443445472336424602988558373637_wp real ( wp ), parameter :: b151 = - . 779374086122884664644623040843840506343_wp real ( wp ), parameter :: b156 = - 1 3.93734253810777678786523664804936051203_wp real ( wp ), parameter :: b157 = 1.252048853379357320949735183924200895136_wp real ( wp ), parameter :: b158 = - 1 4.69150040801686878191527989293072091588_wp real ( wp ), parameter :: b159 = - . 494705058533141685655191992136962873577_wp real ( wp ), parameter :: b1510 = 2.242974909146236657906984549543692874755_wp real ( wp ), parameter :: b1511 = 1 3.36789380382864375813864978592679139881_wp real ( wp ), parameter :: b1512 = 1 4.39665048665068644512236935340272139005_wp real ( wp ), parameter :: b1513 = - . 7975813331776800379127866056663258667437_wp real ( wp ), parameter :: b1514 = . 4409353709534277758753793068298041158235_wp real ( wp ), parameter :: b161 = 2.058051337466886442151242368989994043993_wp real ( wp ), parameter :: b166 = 2 2.35793772796803295519317565842520212899_wp real ( wp ), parameter :: b167 = . 90949810997556332745009198137971890783_wp real ( wp ), parameter :: b168 = 3 5.89110098240264104710550686568482456493_wp real ( wp ), parameter :: b169 = - 3.442515027624453437985000403608480262211_wp real ( wp ), parameter :: b1610 = - 4.865481358036368826566013387928704014496_wp real ( wp ), parameter :: b1611 = - 1 8.90980381354342625688427480879773032857_wp real ( wp ), parameter :: b1612 = - 3 4.26354448030451782929251177395134170515_wp real ( wp ), parameter :: b1613 = 1.264756521695642578827783499806516664686_wp real ( wp ), parameter :: c1 = . 146119768584231525205154191501878471345 9e-1_wp real ( wp ), parameter :: c8 = - . 3915211862331339089410228267288242030810_wp real ( wp ), parameter :: c9 = . 2310932500289506415909675644868993669908_wp real ( wp ), parameter :: c10 = . 1274766769992852382560589467488989175618_wp real ( wp ), parameter :: c11 = . 2246434176204157731566981937082069688984_wp real ( wp ), parameter :: c12 = . 5684352689748512932705226972873692126743_wp real ( wp ), parameter :: c13 = . 582587155721582720081476802186342090215 5e-1_wp real ( wp ), parameter :: c14 = . 1364317403482215641609022744494239843327_wp real ( wp ), parameter :: c15 = . 305701398308279739772100506792036964666 4e-1_wp real ( wp ), parameter :: d1 = . 199699651488677308551850841809886875646 4e-1_wp real ( wp ), parameter :: d8 = 2.191499304949330054530747099310837524864_wp real ( wp ), parameter :: d9 = . 885707184820843803083372203178635886295 3e-1_wp real ( wp ), parameter :: d10 = . 1140560234865965622484956605091432032674_wp real ( wp ), parameter :: d11 = . 2533163805345107065564577734569651977347_wp real ( wp ), parameter :: d12 = - 2.056564386240941011158999594595981300493_wp real ( wp ), parameter :: d13 = . 3408096799013119935160094894224543812830_wp real ( wp ), parameter :: d16 = . 483423137382395831437672673977287171490 2e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv98e !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"most robust\" Runge-Kutta (16:9(8)) pair. ! !### Reference ! * J.H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the Local Truncation Error\", ! SIAM Journal on Numerical Analysis, Vol. 15, Issue 4 (1978) ! * [Jim Verner's Refuge for Runge-Kutta Pairs](https://www.sfu.ca/~jverner/) ! * [Coefficients](https://www.sfu.ca/~jverner/RKV98.IIa.Robust.000000351.081209.CoeffsOnlyFLOAT6040) module procedure rkv98r real ( wp ), parameter :: a2 = . 4e-1_wp real ( wp ), parameter :: a3 = . 964873601378736124523503937966635674370 8e-1_wp real ( wp ), parameter :: a4 = . 1447310402068104186785255906949953511556_wp real ( wp ), parameter :: a5 = . 576_wp real ( wp ), parameter :: a6 = . 2272326564618766017153738192188229509142_wp real ( wp ), parameter :: a7 = . 5407673435381233982846261807811770490858_wp real ( wp ), parameter :: a8 = . 64_wp real ( wp ), parameter :: a9 = . 48_wp real ( wp ), parameter :: a10 = . 675 4e-1_wp real ( wp ), parameter :: a11 = . 25_wp real ( wp ), parameter :: a12 = . 6770920153543242682384311058159603931192_wp real ( wp ), parameter :: a13 = . 8115_wp real ( wp ), parameter :: a14 = . 906_wp real ( wp ), parameter :: b21 = . 4e-1_wp real ( wp ), parameter :: b31 = - . 19885273191822909765024151146608912934 5e-1_wp real ( wp ), parameter :: b32 = . 1163726333296965222173745449432724803716_wp real ( wp ), parameter :: b41 = . 361827600517026046696313976737488377889 0e-1_wp real ( wp ), parameter :: b43 = . 1085482801551078140088941930212465133667_wp real ( wp ), parameter :: b51 = 2.272114264290177409193144938921415409241_wp real ( wp ), parameter :: b53 = - 8.526886447976398578316416192982602292786_wp real ( wp ), parameter :: b54 = 6.830772183686221169123271254061186883545_wp real ( wp ), parameter :: b61 = . 509438553538937439451266856678343412397 8e-1_wp real ( wp ), parameter :: b64 = . 1755865049809071110203693328749561646990_wp real ( wp ), parameter :: b65 = . 7022961270757467498778006760324449753 5e-3_wp real ( wp ), parameter :: b71 = . 1424783668683284782770955365543878809824_wp real ( wp ), parameter :: b74 = - . 3541799434668684104094753917518523845155_wp real ( wp ), parameter :: b75 = . 759531545029510088900153420277855015993 2e-1_wp real ( wp ), parameter :: b76 = . 6765157656337123215269906939508560510196_wp real ( wp ), parameter :: b81 = . 711111111111111111111111111111111111111 1e-1_wp real ( wp ), parameter :: b86 = . 3279909287605898328568406057725491803016_wp real ( wp ), parameter :: b87 = . 2408979601282990560320482831163397085872_wp real ( wp ), parameter :: b91 = . 712 5e-1_wp real ( wp ), parameter :: b96 = . 3268842451575245554847578757216915662785_wp real ( wp ), parameter :: b97 = . 1156157548424754445152421242783084337215_wp real ( wp ), parameter :: b98 = - . 337 5e-1_wp real ( wp ), parameter :: b101 = . 482267732246581017838711208767361111111 1e-1_wp real ( wp ), parameter :: b106 = . 394855998049540011076954970418610816767 7e-1_wp real ( wp ), parameter :: b107 = . 1058851161934658144373823566907778072121_wp real ( wp ), parameter :: b108 = - . 215200632047430934666442871093750000000 0e-1_wp real ( wp ), parameter :: b109 = - . 1045374260183348238623046875000000000000_wp real ( wp ), parameter :: b111 = - . 260911343575492341221092868996201106517 9e-1_wp real ( wp ), parameter :: b116 = . 333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: b117 = - . 1652504006638105086724681598195267241410_wp real ( wp ), parameter :: b118 = . 343466411836861665831941989567883877664 7e-1_wp real ( wp ), parameter :: b119 = . 1595758283215209043195814910843067811951_wp real ( wp ), parameter :: b1110 = . 2140857321828193385584684233447183324979_wp real ( wp ), parameter :: b121 = - . 36284233962556585907650997909126710552 8e-1_wp real ( wp ), parameter :: b126 = - 1.096167597427208807028761474420297770752_wp real ( wp ), parameter :: b127 = . 1826035504321331052308236240517254331348_wp real ( wp ), parameter :: b128 = . 70822544441706832561302868545562512374 1e-1_wp real ( wp ), parameter :: b129 = - . 23136470184824312699992973848263040714 6e-1_wp real ( wp ), parameter :: b1210 = . 2711204726320932916455631550463654973432_wp real ( wp ), parameter :: b1211 = 1.308133749422980744437146904349994472286_wp real ( wp ), parameter :: b131 = - . 5074635056416974879347823927726392374259_wp real ( wp ), parameter :: b136 = - 6.631342198657237090355284142048733580937_wp real ( wp ), parameter :: b137 = - . 252748010090880105270020973014860316405_wp real ( wp ), parameter :: b138 = - . 4952612380036095562991116175550167835424_wp real ( wp ), parameter :: b139 = . 293252554525388690285739720360003594753_wp real ( wp ), parameter :: b1310 = 1.440108693768280908474851998204423941413_wp real ( wp ), parameter :: b1311 = 6.237934498647055877243623886838802127716_wp real ( wp ), parameter :: b1312 = . 7270192054526987638549835199880202544289_wp real ( wp ), parameter :: b141 = . 6130118256955931701496387847232542148725_wp real ( wp ), parameter :: b146 = 9.088803891640463313341034206647776279557_wp real ( wp ), parameter :: b147 = - . 407378815629344868103315381138325162923_wp real ( wp ), parameter :: b148 = 1.790733389490374687043894756399015035977_wp real ( wp ), parameter :: b149 = . 714927166761755073724875250629602731782_wp real ( wp ), parameter :: b1410 = - 1.438580857841722850237810322456327208949_wp real ( wp ), parameter :: b1411 = - 8.263329312064740580595954649844133476994_wp real ( wp ), parameter :: b1412 = - 1.537570570808865115231450725068826856201_wp real ( wp ), parameter :: b1413 = . 3453832827564871699090880801079644428793_wp real ( wp ), parameter :: b151 = - 1.211697910343873872490625222495537087293_wp real ( wp ), parameter :: b156 = - 1 9.05581871559595277753334676575234493500_wp real ( wp ), parameter :: b157 = 1.26306067538987510135943101851905310045_wp real ( wp ), parameter :: b158 = - 6.913916969178458046793476128409110926069_wp real ( wp ), parameter :: b159 = - . 676462266509498065300115641383621209887_wp real ( wp ), parameter :: b1510 = 3.367860445026607887090352785684064242560_wp real ( wp ), parameter :: b1511 = 1 8.00675164312590810020103216906571965203_wp real ( wp ), parameter :: b1512 = 6.838828926794279896350389904990814350968_wp real ( wp ), parameter :: b1513 = - 1.031516451921950498420447675652291096155_wp real ( wp ), parameter :: b1514 = . 4129106232130622755368055554332539084021_wp real ( wp ), parameter :: b161 = 2.157389007494053627033175177985666660692_wp real ( wp ), parameter :: b166 = 2 3.80712219809580523172312179815279712750_wp real ( wp ), parameter :: b167 = . 88627792492165554903036801415266308369_wp real ( wp ), parameter :: b168 = 1 3.13913039759876381480201677314222971522_wp real ( wp ), parameter :: b169 = - 2.604415709287714883747369630937415176632_wp real ( wp ), parameter :: b1610 = - 5.193859949783872300189266203049579105962_wp real ( wp ), parameter :: b1611 = - 2 0.41234071154150778768154893536134356354_wp real ( wp ), parameter :: b1612 = - 1 2.30085625250572261314889445241581039623_wp real ( wp ), parameter :: b1613 = 1.521553095008539362178397458330791655267_wp real ( wp ), parameter :: c1 = . 145888527840553971910153958225575291703 4e-1_wp real ( wp ), parameter :: c8 = . 202419788788933265056666668319565609782 5e-2_wp real ( wp ), parameter :: c9 = . 2178047084569716646796256135839225745895_wp real ( wp ), parameter :: c10 = . 1274895340854389692868677968654808668201_wp real ( wp ), parameter :: c11 = . 2244617745463131861258531547137348031621_wp real ( wp ), parameter :: c12 = . 1787254491259903095100090833796054447157_wp real ( wp ), parameter :: c13 = . 759434475809655717290830341651317307628 3e-1_wp real ( wp ), parameter :: c14 = . 1294845879197561516869001434704642286297_wp real ( wp ), parameter :: c15 = . 294774476126194171400791113159071660520 2e-1_wp real ( wp ), parameter :: d1 = . 203466665522443459970788509883290698664 9e-1_wp real ( wp ), parameter :: d8 = 1.069617650982700109541321983413338230042_wp real ( wp ), parameter :: d9 = . 768083471130318727867313026185035053033 8e-1_wp real ( wp ), parameter :: d10 = . 1130778186885240437498706751119241126785_wp real ( wp ), parameter :: d11 = . 2552587357981962194892445789565762186511_wp real ( wp ), parameter :: d12 = - . 9825898086919164036191607912120918904022_wp real ( wp ), parameter :: d13 = . 3981545824421514217762002137442675068982_wp real ( wp ), parameter :: d16 = . 493260071150683902787131863791532469620 8e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + & b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + & b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + & b1511 * f11 + b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + & b1611 * f11 + b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv98r !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW6(4) Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp64.m](http://users.uoa.gr/~tsitourasc/rktp64.m)) module procedure rktp64 real ( wp ), parameter :: b21 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b41 = 6 6.0_wp / 34 3.0_wp real ( wp ), parameter :: b42 = - 72 9.0_wp / 137 2.0_wp real ( wp ), parameter :: b43 = 105 3.0_wp / 137 2.0_wp real ( wp ), parameter :: b51 = 1333 9.0_wp / 4915 2.0_wp real ( wp ), parameter :: b52 = - 461 7.0_wp / 1638 4.0_wp real ( wp ), parameter :: b53 = 542 7.0_wp / 5324 8.0_wp real ( wp ), parameter :: b54 = 9520 7.0_wp / 15974 4.0_wp real ( wp ), parameter :: b61 = - 693 5.0_wp / 5712 2.0_wp real ( wp ), parameter :: b62 = 2308 5.0_wp / 4833 4.0_wp real ( wp ), parameter :: b63 = 3336336 0.0_wp / 27364294 1.0_wp real ( wp ), parameter :: b64 = 97216 0.0_wp / 11844246 7.0_wp real ( wp ), parameter :: b65 = 17268736 0.0_wp / 61043425 3.0_wp real ( wp ), parameter :: b71 = 61 1.0_wp / 189 1.0_wp real ( wp ), parameter :: b72 = - 461 7.0_wp / 756 4.0_wp real ( wp ), parameter :: b73 = 604100 7.0_wp / 1317648 8.0_wp real ( wp ), parameter :: b74 = 1270883 6.0_wp / 2210011 7.0_wp real ( wp ), parameter :: b75 = - 3584000 0.0_wp / 6246162 1.0_wp real ( wp ), parameter :: b76 = 659759 1.0_wp / 797245 6.0_wp real ( wp ), parameter :: a2 = 4.0_wp / 2 7.0_wp real ( wp ), parameter :: a3 = 2.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 3.0_wp / 7.0_wp real ( wp ), parameter :: a5 = 1 1.0_wp / 1 6.0_wp real ( wp ), parameter :: a6 = 1 0.0_wp / 1 3.0_wp real ( wp ), parameter :: c1 = 13 1.0_wp / 180 0.0_wp ! 6th order formula real ( wp ), parameter :: c3 = 112193 1.0_wp / 390208 0.0_wp real ( wp ), parameter :: c4 = 31933 3.0_wp / 168292 8.0_wp real ( wp ), parameter :: c5 = 26214 4.0_wp / 247732 5.0_wp real ( wp ), parameter :: c6 = 408422 3.0_wp / 1517760 0.0_wp real ( wp ), parameter :: c7 = 189 1.0_wp / 2520 0.0_wp real ( wp ), parameter :: d1 = 269425 3.0_wp / 2610036 0.0_wp ! 4th order formula real ( wp ), parameter :: d3 = 8364732 3.0_wp / 53580436 0.0_wp real ( wp ), parameter :: d4 = 69120228 1.0_wp / 178906104 0.0_wp real ( wp ), parameter :: d5 = - 127554764 8.0_wp / 1056520822 5.0_wp real ( wp ), parameter :: d6 = 2.0_wp / 5.0_wp real ( wp ), parameter :: d7 = 189 1.0_wp / 2520 0.0_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) xf = x + h * ( c1 * f1 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 ) xerr = h * ( e1 * f1 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 ) end associate end procedure rktp64 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg's 7(8) algorithm. ! !### Reference ! * E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order ! Runge-Kutta Formulas with Stepsize Control\", ! [NASA TR R-2870](https://ntrs.nasa.gov/citations/19680027281). module procedure rkf78 real ( wp ), parameter :: a1 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a4 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: a5 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a6 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a7 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a8 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b10 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b20 = 1.0_wp / 3 6.0_wp real ( wp ), parameter :: b21 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b30 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 8.0_wp real ( wp ), parameter :: b40 = 5.0_wp / 1 2.0_wp real ( wp ), parameter :: b42 = - 2 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b43 = 2 5.0_wp / 1 6.0_wp real ( wp ), parameter :: b50 = 1.0_wp / 2 0.0_wp real ( wp ), parameter :: b53 = 1.0_wp / 4.0_wp real ( wp ), parameter :: b54 = 1.0_wp / 5.0_wp real ( wp ), parameter :: b60 = - 2 5.0_wp / 10 8.0_wp real ( wp ), parameter :: b63 = 12 5.0_wp / 10 8.0_wp real ( wp ), parameter :: b64 = - 6 5.0_wp / 2 7.0_wp real ( wp ), parameter :: b65 = 12 5.0_wp / 5 4.0_wp real ( wp ), parameter :: b70 = 3 1.0_wp / 30 0.0_wp real ( wp ), parameter :: b74 = 6 1.0_wp / 22 5.0_wp real ( wp ), parameter :: b75 = - 2.0_wp / 9.0_wp real ( wp ), parameter :: b76 = 1 3.0_wp / 90 0.0_wp real ( wp ), parameter :: b80 = 2.0_wp real ( wp ), parameter :: b83 = - 5 3.0_wp / 6.0_wp real ( wp ), parameter :: b84 = 70 4.0_wp / 4 5.0_wp real ( wp ), parameter :: b85 = - 10 7.0_wp / 9.0_wp real ( wp ), parameter :: b86 = 6 7.0_wp / 9 0.0_wp real ( wp ), parameter :: b87 = 3.0_wp real ( wp ), parameter :: b90 = - 9 1.0_wp / 10 8.0_wp real ( wp ), parameter :: b93 = 2 3.0_wp / 10 8.0_wp real ( wp ), parameter :: b94 = - 97 6.0_wp / 13 5.0_wp real ( wp ), parameter :: b95 = 31 1.0_wp / 5 4.0_wp real ( wp ), parameter :: b96 = - 1 9.0_wp / 6 0.0_wp real ( wp ), parameter :: b97 = 1 7.0_wp / 6.0_wp real ( wp ), parameter :: b98 = - 1.0_wp / 1 2.0_wp real ( wp ), parameter :: b100 = 238 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b103 = - 34 1.0_wp / 16 4.0_wp real ( wp ), parameter :: b104 = 449 6.0_wp / 102 5.0_wp real ( wp ), parameter :: b105 = - 30 1.0_wp / 8 2.0_wp real ( wp ), parameter :: b106 = 213 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b107 = 4 5.0_wp / 8 2.0_wp real ( wp ), parameter :: b108 = 4 5.0_wp / 16 4.0_wp real ( wp ), parameter :: b109 = 1 8.0_wp / 4 1.0_wp real ( wp ), parameter :: b110 = 3.0_wp / 20 5.0_wp real ( wp ), parameter :: b115 = - 6.0_wp / 4 1.0_wp real ( wp ), parameter :: b116 = - 3.0_wp / 20 5.0_wp real ( wp ), parameter :: b117 = - 3.0_wp / 4 1.0_wp real ( wp ), parameter :: b118 = 3.0_wp / 4 1.0_wp real ( wp ), parameter :: b119 = 6.0_wp / 4 1.0_wp real ( wp ), parameter :: b120 = - 177 7.0_wp / 410 0.0_wp real ( wp ), parameter :: b123 = - 34 1.0_wp / 16 4.0_wp real ( wp ), parameter :: b124 = 449 6.0_wp / 102 5.0_wp real ( wp ), parameter :: b125 = - 28 9.0_wp / 8 2.0_wp real ( wp ), parameter :: b126 = 219 3.0_wp / 410 0.0_wp real ( wp ), parameter :: b127 = 5 1.0_wp / 8 2.0_wp real ( wp ), parameter :: b128 = 3 3.0_wp / 16 4.0_wp real ( wp ), parameter :: b129 = 1 2.0_wp / 4 1.0_wp !real(wp),parameter :: b1211 = 1.0_wp real ( wp ), parameter :: c5 = 3 4.0_wp / 10 5.0_wp real ( wp ), parameter :: c6 = 9.0_wp / 3 5.0_wp real ( wp ), parameter :: c7 = 9.0_wp / 3 5.0_wp real ( wp ), parameter :: c8 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: c9 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: c11 = 4 1.0_wp / 84 0.0_wp real ( wp ), parameter :: c12 = 4 1.0_wp / 84 0.0_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 )) call me % f ( t , x , f0 ) call me % f ( t + h * a1 , x + f0 * b10 * h , f1 ) call me % f ( t + h * a2 , x + ( f0 * b20 + f1 * b21 ) * h , f2 ) call me % f ( t + h * a3 , x + ( f0 * b30 + f2 * b32 ) * h , f3 ) call me % f ( t + h * a4 , x + ( f0 * b40 + f2 * b42 + f3 * b43 ) * h , f4 ) call me % f ( t + h * a5 , x + ( f0 * b50 + f3 * b53 + f4 * b54 ) * h , f5 ) call me % f ( t + h * a6 , x + ( f0 * b60 + f3 * b63 + f4 * b64 + f5 * b65 ) * h , f6 ) call me % f ( t + h * a7 , x + ( f0 * b70 + f4 * b74 + f5 * b75 + f6 * b76 ) * h , f7 ) call me % f ( t + h * a8 , x + ( f0 * b80 + f3 * b83 + f4 * b84 + f5 * b85 + f6 * b86 + & f7 * b87 ) * h , f8 ) call me % f ( t + h * a9 , x + ( f0 * b90 + f3 * b93 + f4 * b94 + f5 * b95 + f6 * b96 + & f7 * b97 + f8 * b98 ) * h , f9 ) call me % f ( t + h , x + ( f0 * b100 + f3 * b103 + f4 * b104 + f5 * b105 + & f6 * b106 + f7 * b107 + f8 * b108 + f9 * b109 ) * h , f10 ) call me % f ( t , x + ( f0 * b110 + f5 * b115 + f6 * b116 + f7 * b117 + f8 * b118 + & f9 * b119 ) * h , f11 ) call me % f ( t + h , x + ( f0 * b120 + f3 * b123 + f4 * b124 + f5 * b125 + f6 * b126 + & f7 * b127 + f8 * b128 + f9 * b129 + f11 ) * h , f12 ) xf = x + h * ( f5 * c5 + f6 * c6 + f7 * c7 + f8 * c8 + f9 * c9 + f11 * c11 + f12 * c12 ) xerr = ( 4 1.0_wp / 84 0.0_wp ) * h * ( f0 + f10 - f11 - f12 ) ! is this negative ? does it matter ? end associate end procedure rkf78 !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince RK8(7)13M method. ! !### Reference ! * P.J. Prince and J.R. Dormand, J. Comp. Appl. Math.,7, pp. 67-75, 1981 ! * [rksuite_90](http://www.netlib.org/ode/rksuite/) module procedure rkdp87 real ( wp ), parameter :: b21 = 1.0_wp / 1 8.0_wp ! 5.55555555555555555555555555556e-2_wp real ( wp ), parameter :: b31 = 1.0_wp / 4 8.0_wp ! 2.08333333333333333333333333333e-2_wp real ( wp ), parameter :: b32 = 1.0_wp / 1 6.0_wp ! 6.25e-2_wp real ( wp ), parameter :: b41 = 1.0_wp / 3 2.0_wp ! 3.125e-2_wp real ( wp ), parameter :: b43 = 3.0_wp / 3 2.0_wp ! 9.375e-2_wp real ( wp ), parameter :: b51 = 5.0_wp / 1 6.0_wp ! 3.125e-1_wp real ( wp ), parameter :: b53 = - 7 5.0_wp / 6 4.0_wp ! -1.171875_wp real ( wp ), parameter :: b54 = 7 5.0_wp / 6 4.0_wp ! 1.171875_wp real ( wp ), parameter :: b61 = 3.0_wp / 8 0.0_wp ! 3.75e-2_wp real ( wp ), parameter :: b64 = 3.0_wp / 1 6.0_wp ! 1.875e-1_wp real ( wp ), parameter :: b65 = 3.0_wp / 2 0.0_wp ! 1.5e-1_wp real ( wp ), parameter :: b71 = 2944384 1.0_wp / 61456390 6.0_wp ! 4.79101371111111111111111111111e-2_wp real ( wp ), parameter :: b74 = 7773653 8.0_wp / 69253834 7.0_wp ! 1.12248712777777777777777777778e-1_wp real ( wp ), parameter :: b75 = - 2869388 3.0_wp / 112500000 0.0_wp ! -2.55056737777777777777777777778e-2_wp real ( wp ), parameter :: b76 = 2312428 3.0_wp / 180000000 0.0_wp ! 1.28468238888888888888888888889e-2_wp real ( wp ), parameter :: b81 = 1601614 1.0_wp / 94669291 1.0_wp ! 1.6917989787292281181431107136e-2_wp real ( wp ), parameter :: b84 = 6156418 0.0_wp / 15873263 7.0_wp ! 3.87848278486043169526545744159e-1_wp real ( wp ), parameter :: b85 = 2278971 3.0_wp / 63344577 7.0_wp ! 3.59773698515003278967008896348e-2_wp real ( wp ), parameter :: b86 = 54581573 6.0_wp / 277105722 9.0_wp ! 1.96970214215666060156715256072e-1_wp real ( wp ), parameter :: b87 = - 18019366 7.0_wp / 104330755 5.0_wp ! -1.72713852340501838761392997002e-1_wp real ( wp ), parameter :: b91 = 3963270 8.0_wp / 57359108 3.0_wp ! 6.90957533591923006485645489846e-2_wp real ( wp ), parameter :: b94 = - 43363636 6.0_wp / 68370161 5.0_wp ! -6.34247976728854151882807874972e-1_wp real ( wp ), parameter :: b95 = - 42173997 5.0_wp / 261629230 1.0_wp ! -1.61197575224604080366876923982e-1_wp real ( wp ), parameter :: b96 = 10030283 1.0_wp / 72342305 9.0_wp ! 1.38650309458825255419866950133e-1_wp real ( wp ), parameter :: b97 = 79020416 4.0_wp / 83981308 7.0_wp ! 9.4092861403575626972423968413e-1_wp real ( wp ), parameter :: b98 = 80063531 0.0_wp / 378307128 7.0_wp ! 2.11636326481943981855372117132e-1_wp real ( wp ), parameter :: b101 = 24612199 3.0_wp / 134084778 7.0_wp ! 1.83556996839045385489806023537e-1_wp real ( wp ), parameter :: b104 = - 3769504279 5.0_wp / 1526876624 6.0_wp ! -2.46876808431559245274431575997_wp real ( wp ), parameter :: b105 = - 30912174 4.0_wp / 106122780 3.0_wp ! -2.91286887816300456388002572804e-1_wp real ( wp ), parameter :: b106 = - 1299208 3.0_wp / 49076693 5.0_wp ! -2.6473020233117375688439799466e-2_wp real ( wp ), parameter :: b107 = 600594349 3.0_wp / 210894786 9.0_wp ! 2.84783876419280044916451825422_wp real ( wp ), parameter :: b108 = 39300621 7.0_wp / 139667345 7.0_wp ! 2.81387331469849792539403641827e-1_wp real ( wp ), parameter :: b109 = 12387233 1.0_wp / 100102978 9.0_wp ! 1.23744899863314657627030212664e-1_wp real ( wp ), parameter :: b111 = - 102846818 9.0_wp / 84618001 4.0_wp ! -1.21542481739588805916051052503_wp real ( wp ), parameter :: b114 = 847823578 3.0_wp / 50851285 2.0_wp ! 1.66726086659457724322804132886e1_wp real ( wp ), parameter :: b115 = 131172949 5.0_wp / 143242282 3.0_wp ! 9.15741828416817960595718650451e-1_wp real ( wp ), parameter :: b116 = - 1030412999 5.0_wp / 170130438 2.0_wp ! -6.05660580435747094755450554309_wp real ( wp ), parameter :: b117 = - 4877792505 9.0_wp / 304793956 0.0_wp ! -1.60035735941561781118417064101e1_wp real ( wp ), parameter :: b118 = 1533672624 8.0_wp / 103282464 9.0_wp ! 1.4849303086297662557545391898e1_wp real ( wp ), parameter :: b119 = - 4544286818 1.0_wp / 339846769 6.0_wp ! -1.33715757352898493182930413962e1_wp real ( wp ), parameter :: b1110 = 306599347 3.0_wp / 59717265 3.0_wp ! 5.13418264817963793317325361166_wp real ( wp ), parameter :: b121 = 18589217 7.0_wp / 71811604 3.0_wp ! 2.58860916438264283815730932232e-1_wp real ( wp ), parameter :: b124 = - 318509451 7.0_wp / 66710734 1.0_wp ! -4.77448578548920511231011750971_wp real ( wp ), parameter :: b125 = - 47775541 4.0_wp / 109805351 7.0_wp ! -4.3509301377703250944070041181e-1_wp real ( wp ), parameter :: b126 = - 70363537 8.0_wp / 23073921 1.0_wp ! -3.04948333207224150956051286631_wp real ( wp ), parameter :: b127 = 573156678 7.0_wp / 102754552 7.0_wp ! 5.57792003993609911742367663447_wp real ( wp ), parameter :: b128 = 523286660 2.0_wp / 85006656 3.0_wp ! 6.15583158986104009733868912669_wp real ( wp ), parameter :: b129 = - 409366453 5.0_wp / 80868825 7.0_wp ! -5.06210458673693837007740643391_wp real ( wp ), parameter :: b1210 = 396213724 7.0_wp / 180595741 8.0_wp ! 2.19392617318067906127491429047_wp real ( wp ), parameter :: b1211 = 6568635 8.0_wp / 48791008 3.0_wp ! 1.34627998659334941535726237887e-1_wp real ( wp ), parameter :: b131 = 40386385 4.0_wp / 49106310 9.0_wp ! 8.22427599626507477963168204773e-1_wp real ( wp ), parameter :: b134 = - 506849239 3.0_wp / 43474006 7.0_wp ! -1.16586732572776642839765530355e1_wp real ( wp ), parameter :: b135 = - 41142199 7.0_wp / 54304380 5.0_wp ! -7.57622116690936195881116154088e-1_wp real ( wp ), parameter :: b136 = 65278362 7.0_wp / 91429660 4.0_wp ! 7.13973588159581527978269282765e-1_wp real ( wp ), parameter :: b137 = 1117396282 5.0_wp / 92532055 6.0_wp ! 1.20757749868900567395661704486e1_wp real ( wp ), parameter :: b138 = - 1315899084 1.0_wp / 618472703 4.0_wp ! -2.12765911392040265639082085897_wp real ( wp ), parameter :: b139 = 393664762 9.0_wp / 197804968 0.0_wp ! 1.99016620704895541832807169835_wp real ( wp ), parameter :: b1310 = - 16052805 9.0_wp / 68517852 5.0_wp ! -2.34286471544040292660294691857e-1_wp real ( wp ), parameter :: b1311 = 24863810 3.0_wp / 141353106 0.0_wp ! 1.7589857770794226507310510589e-1_wp ! order 8 real ( wp ), parameter :: c1 = 1400545 1.0_wp / 33548006 4.0_wp ! 4.17474911415302462220859284685e-2_wp real ( wp ), parameter :: c6 = - 5923849 3.0_wp / 106827782 5.0_wp ! -5.54523286112393089615218946547e-2_wp real ( wp ), parameter :: c7 = 18160676 7.0_wp / 75886773 1.0_wp ! 2.39312807201180097046747354249e-1_wp real ( wp ), parameter :: c8 = 56129298 5.0_wp / 79784573 2.0_wp ! 7.0351066940344302305804641089e-1_wp real ( wp ), parameter :: c9 = - 104189143 0.0_wp / 137134352 9.0_wp ! -7.59759613814460929884487677085e-1_wp real ( wp ), parameter :: c10 = 76041723 9.0_wp / 115116529 9.0_wp ! 6.60563030922286341461378594838e-1_wp real ( wp ), parameter :: c11 = 11882064 3.0_wp / 75113808 7.0_wp ! 1.58187482510123335529614838601e-1_wp real ( wp ), parameter :: c12 = - 52874774 9.0_wp / 222060717 0.0_wp ! -2.38109538752862804471863555306e-1_wp real ( wp ), parameter :: c13 = 1.0_wp / 4.0_wp ! 2.5e-1_wp ! order 7 real ( wp ), parameter :: d1 = 1345193 2.0_wp / 45517662 3.0_wp ! 2.9553213676353496981964883112e-2_wp real ( wp ), parameter :: d6 = - 80871984 6.0_wp / 97600014 5.0_wp ! -8.28606276487797039766805612689e-1_wp real ( wp ), parameter :: d7 = 175700446 8.0_wp / 564515932 1.0_wp ! 3.11240900051118327929913751627e-1_wp real ( wp ), parameter :: d8 = 65604533 9.0_wp / 26589118 6.0_wp ! 2.46734519059988698196468570407_wp real ( wp ), parameter :: d9 = - 386757472 1.0_wp / 151851720 6.0_wp ! -2.54694165184190873912738007542_wp real ( wp ), parameter :: d10 = 46588586 8.0_wp / 32273653 5.0_wp ! 1.44354858367677524030187495069_wp real ( wp ), parameter :: d11 = 5301123 8.0_wp / 66751671 9.0_wp ! 7.94155958811272872713019541622e-2_wp real ( wp ), parameter :: d12 = 2.0_wp / 4 5.0_wp ! 4.44444444444444444444444444445e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 real ( wp ), parameter :: a2 = 1.0_wp / 1 8.0_wp ! 5.55555555555555555555555555556e-2_wp real ( wp ), parameter :: a3 = 1.0_wp / 1 2.0_wp ! 8.33333333333333333333333333334e-2_wp real ( wp ), parameter :: a4 = 1.0_wp / 8.0_wp ! 1.25e-1_wp real ( wp ), parameter :: a5 = 5.0_wp / 1 6.0_wp ! 3.125e-1_wp real ( wp ), parameter :: a6 = 3.0_wp / 8.0_wp ! 3.75e-1_wp real ( wp ), parameter :: a7 = 5 9.0_wp / 40 0.0_wp ! 1.475e-1_wp real ( wp ), parameter :: a8 = 9 3.0_wp / 20 0.0_wp ! 4.65e-1_wp real ( wp ), parameter :: a9 = 549002324 8.0_wp / 971916982 1.0_wp ! 5.64865451382259575398358501426e-1_wp real ( wp ), parameter :: a10 = 1 3.0_wp / 2 0.0_wp ! 6.5e-1_wp real ( wp ), parameter :: a11 = 120114681 1.0_wp / 129901979 8.0_wp ! 9.24656277640504446745013574318e-1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkdp87 !***************************************************************************************** !***************************************************************************************** !> ! Verner's 7(8) algorithm. ! !### Reference ! * [Mathematics Source Library](http://www.mymathlib.com/diffeq/embedded_runge_kutta/embedded_verner_7_8.html) module procedure rkv78 real ( wp ), parameter :: c1 = 1 3.0_wp / 28 8.0_wp real ( wp ), parameter :: c6 = 3 2.0_wp / 12 5.0_wp real ( wp ), parameter :: c7 = 3121 3.0_wp / 14400 0.0_wp real ( wp ), parameter :: c8 = 240 1.0_wp / 1237 5.0_wp real ( wp ), parameter :: c9 = 170 1.0_wp / 1408 0.0_wp real ( wp ), parameter :: c10 = 240 1.0_wp / 1920 0.0_wp real ( wp ), parameter :: c11 = 1 9.0_wp / 45 0.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 8.0_wp real ( wp ), parameter :: a5 = 2.0_wp / 5.0_wp real ( wp ), parameter :: a6 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a7 = 6.0_wp / 7.0_wp real ( wp ), parameter :: a8 = 1.0_wp / 7.0_wp real ( wp ), parameter :: a9 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a10 = 2.0_wp / 7.0_wp real ( wp ), parameter :: a12 = 1.0_wp / 3.0_wp real ( wp ), parameter :: b31 = 5.0_wp / 7 2.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 7 2.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 3 2.0_wp real ( wp ), parameter :: b43 = 3.0_wp / 3 2.0_wp real ( wp ), parameter :: b51 = 10 6.0_wp / 12 5.0_wp real ( wp ), parameter :: b53 = - 40 8.0_wp / 12 5.0_wp real ( wp ), parameter :: b54 = 35 2.0_wp / 12 5.0_wp real ( wp ), parameter :: b61 = 1.0_wp / 4 8.0_wp real ( wp ), parameter :: b64 = 8.0_wp / 3 3.0_wp real ( wp ), parameter :: b65 = 12 5.0_wp / 52 8.0_wp real ( wp ), parameter :: b71 = - 1389 3.0_wp / 2641 1.0_wp real ( wp ), parameter :: b74 = 3993 6.0_wp / 2641 1.0_wp real ( wp ), parameter :: b75 = - 6412 5.0_wp / 2641 1.0_wp real ( wp ), parameter :: b76 = 6072 0.0_wp / 2641 1.0_wp real ( wp ), parameter :: b81 = 3 7.0_wp / 39 2.0_wp real ( wp ), parameter :: b85 = 162 5.0_wp / 940 8.0_wp real ( wp ), parameter :: b86 = - 2.0_wp / 1 5.0_wp real ( wp ), parameter :: b87 = 6 1.0_wp / 672 0.0_wp real ( wp ), parameter :: b91 = 1717 6.0_wp / 2551 5.0_wp real ( wp ), parameter :: b94 = - 4710 4.0_wp / 2551 5.0_wp real ( wp ), parameter :: b95 = 132 5.0_wp / 50 4.0_wp real ( wp ), parameter :: b96 = - 4179 2.0_wp / 2551 5.0_wp real ( wp ), parameter :: b97 = 2023 7.0_wp / 14580 0.0_wp real ( wp ), parameter :: b98 = 431 2.0_wp / 607 5.0_wp real ( wp ), parameter :: b101 = - 2383 4.0_wp / 18007 5.0_wp real ( wp ), parameter :: b104 = - 7782 4.0_wp / 198082 5.0_wp real ( wp ), parameter :: b105 = - 63663 5.0_wp / 63386 4.0_wp real ( wp ), parameter :: b106 = 25404 8.0_wp / 30012 5.0_wp real ( wp ), parameter :: b107 = - 18 3.0_wp / 700 0.0_wp real ( wp ), parameter :: b108 = 8.0_wp / 1 1.0_wp real ( wp ), parameter :: b109 = - 32 4.0_wp / 377 3.0_wp real ( wp ), parameter :: b111 = 1273 3.0_wp / 760 0.0_wp real ( wp ), parameter :: b114 = - 2003 2.0_wp / 522 5.0_wp real ( wp ), parameter :: b115 = 45648 5.0_wp / 8025 6.0_wp real ( wp ), parameter :: b116 = - 4259 9.0_wp / 712 5.0_wp real ( wp ), parameter :: b117 = 33922 7.0_wp / 91200 0.0_wp real ( wp ), parameter :: b118 = - 102 9.0_wp / 418 0.0_wp real ( wp ), parameter :: b119 = 170 1.0_wp / 140 8.0_wp real ( wp ), parameter :: b1110 = 514 5.0_wp / 243 2.0_wp real ( wp ), parameter :: b121 = - 2706 1.0_wp / 20412 0.0_wp real ( wp ), parameter :: b124 = 4044 8.0_wp / 28066 5.0_wp real ( wp ), parameter :: b125 = - 135377 5.0_wp / 119750 4.0_wp real ( wp ), parameter :: b126 = 1766 2.0_wp / 2551 5.0_wp real ( wp ), parameter :: b127 = - 7168 7.0_wp / 116640 0.0_wp real ( wp ), parameter :: b128 = 9 8.0_wp / 22 5.0_wp real ( wp ), parameter :: b129 = 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b1210 = 377 3.0_wp / 1166 4.0_wp real ( wp ), parameter :: b131 = 1120 3.0_wp / 868 0.0_wp real ( wp ), parameter :: b134 = - 3814 4.0_wp / 1193 5.0_wp real ( wp ), parameter :: b135 = 235442 5.0_wp / 45830 4.0_wp real ( wp ), parameter :: b136 = - 8404 6.0_wp / 1627 5.0_wp real ( wp ), parameter :: b137 = 67330 9.0_wp / 163680 0.0_wp real ( wp ), parameter :: b138 = 470 4.0_wp / 852 5.0_wp real ( wp ), parameter :: b139 = 947 7.0_wp / 1091 2.0_wp real ( wp ), parameter :: b1310 = - 102 9.0_wp / 99 2.0_wp real ( wp ), parameter :: b1312 = 72 9.0_wp / 34 1.0_wp real ( wp ), parameter :: e1 = - 660 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e6 = - 13516 8.0_wp / 316800 0.0_wp real ( wp ), parameter :: e7 = - 1440 6.0_wp / 316800 0.0_wp real ( wp ), parameter :: e8 = 5762 4.0_wp / 316800 0.0_wp real ( wp ), parameter :: e9 = 5467 5.0_wp / 316800 0.0_wp real ( wp ), parameter :: e10 = - 39616 5.0_wp / 316800 0.0_wp real ( wp ), parameter :: e11 = - 13376 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e12 = 43740 0.0_wp / 316800 0.0_wp real ( wp ), parameter :: e13 = 13640 0.0_wp / 316800 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( a2 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 + b1312 * f12 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkv78 !***************************************************************************************** !***************************************************************************************** !> ! Verner's \"Maple\" (dverk78). ! !### Reference ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK8/RKcoeff8c_2.pdf) module procedure dverk78 real ( wp ), parameter :: a2 = 6.25000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 1.05164319248826291079812206572769953051643192488262910798122065727699530516431924883e-1_wp real ( wp ), parameter :: a4 = 1.57746478873239436619718309859154929577464788732394366197183098591549295774647887324e-1_wp real ( wp ), parameter :: a5 = 3.90000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 4.66666666666666666666666666666666666666666666666666666666666666666666666666666666667e-1_wp real ( wp ), parameter :: a7 = 1.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a8 = 9.60000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 8.92267261582876569617601634626813346131102801365312428359450025561131899210951871087e-1_wp real ( wp ), parameter :: a10 = 9.16666666666666666666666666666666666666666666666666666666666666666666666666666666667e-1_wp real ( wp ), parameter :: a11 = 9.50000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 6.25000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = 1.66880469042738433732284158786836826908241310145694196477771165333157001476779298640e-2_wp real ( wp ), parameter :: b32 = 8.84762723445524477065837906940862703608190614736934911503449491943838303687539950186e-2_wp real ( wp ), parameter :: b41 = 3.94366197183098591549295774647887323943661971830985915492957746478873239436619718310e-2_wp real ( wp ), parameter :: b43 = 1.18309859154929577464788732394366197183098591549295774647887323943661971830985915493e-1_wp real ( wp ), parameter :: b51 = 3.76656086575255102040816326530612244897959183673469387755102040816326530612244897959e-1_wp real ( wp ), parameter :: b53 = - 1.4062762954400510204081632653061224489795918367346938775510204081632653061224489796e0_wp real ( wp ), parameter :: b54 = 1.41962020886479591836734693877551020408163265306122448979591836734693877551020408163e0_wp real ( wp ), parameter :: b61 = 4.78355492244381133270022158911047799936688825577714466603355492244381133270022158911e-2_wp real ( wp ), parameter :: b64 = 2.34464677432637812666112645898374622854105368760715435467810644685518346322874319640e-1_wp real ( wp ), parameter :: b65 = 1.84366440009590740673551804877187263818892415348179784538520472756710207016790131136e-1_wp real ( wp ), parameter :: b71 = 6.11454257142857142857142857142857142857142857142857142857142857142857142857142857143e-2_wp real ( wp ), parameter :: b74 = 1.12966312083735007492797513828957773063162531957288289301243638495099728858422070298e-1_wp real ( wp ), parameter :: b75 = - 3.6523126216152081630500698710681045165713080391277981385292799325019115669575763968e-2_wp real ( wp ), parameter :: b76 = 1.84113884181313598519888991674375578168362627197039777983348751156336725254394079556e-2_wp real ( wp ), parameter :: b81 = - 1.1290190344812819716873002143964435191540855755186649222833121580618541079059519076e0_wp real ( wp ), parameter :: b84 = - 1.4000000000000000000000000000000000000000000000000000000000000000000000000000000000e0_wp real ( wp ), parameter :: b85 = - 8.8802928704648604017469555116668654703824580186941491818867912879961932084706688647e0_wp real ( wp ), parameter :: b86 = 7.13094409677757261060034674920714023333661544255001489279410558828850531341195834447e0_wp real ( wp ), parameter :: b87 = 5.23836780816856976283390897685616875619992815166279921137599785776954200296466242780e0_wp real ( wp ), parameter :: b91 = - 6.1529353321310240531758577059630882789056716837277145620689461335329804789378294402e-1_wp real ( wp ), parameter :: b94 = - 4.9518730627307206123980419770218646265183975456624504456109720877843836846893436386e0_wp real ( wp ), parameter :: b95 = - 5.1425568821223535028317455499886772909974359615422348128021564911695375075220376057e0_wp real ( wp ), parameter :: b96 = 4.40119257638430388133537282166699561228064232903290937377378080578921781089684014377e0_wp real ( wp ), parameter :: b97 = 7.19135317060505642064565222344470796214151883455022732703393848995802890190295274383e0_wp real ( wp ), parameter :: b98 = 9.44499265969278818394988712196051711534231335963244217175392212110442651632317187457e-3_wp real ( wp ), parameter :: b101 = - 8.0487754950012651630611680571217899707181954913548370272898245110488470451176167195e-1_wp real ( wp ), parameter :: b104 = - 4.5929131940948324444453893585077961341346223390010271981133375952914577811961889600e0_wp real ( wp ), parameter :: b105 = - 6.5344796429871976349685844664568433689437520794427587560502836549097348190068258330e0_wp real ( wp ), parameter :: b106 = 5.43653721645848061969301952101216405498569628561398967433445354186586889917076802846e0_wp real ( wp ), parameter :: b107 = 7.41428376786239108774181233597389231941925460585428819853117348548056293090948270879e0_wp real ( wp ), parameter :: b108 = 1.62969198761492907780853867652646563859111189149676578185954495159286718271369038020e-2_wp real ( wp ), parameter :: b109 = - 1.8180850948197735826159946407835863974001376137309207124952108889616530525944509467e-2_wp real ( wp ), parameter :: b111 = - 1.0578581056602630497010123299247635673755482083807816057707586430609366121794742310e0_wp real ( wp ), parameter :: b114 = - 2.4902747870066666124482517838284554072812073092990236244911099705917862954551978618e0_wp real ( wp ), parameter :: b115 = - 8.3678653641187673586734269894057729098141483833620036736491918565911809345813949287e0_wp real ( wp ), parameter :: b116 = 6.76706391372510233295677955943576702708643348087685990605145394724880397320088890883e0_wp real ( wp ), parameter :: b117 = 6.10187575754750708348558966187981017887077884162790182554024225466956680755366458148e0_wp real ( wp ), parameter :: b118 = 2.26346926591268273851441242963489920479522697011540597935824660244066631601010686288e-2_wp real ( wp ), parameter :: b119 = 2.42115288970666032926841417691368020854458954458812827759456719481984746605406648566e-2_wp real ( wp ), parameter :: b1110 = - 4.9787636043105826297506384222071115619706586609988170250163869647072076359128202386e-2_wp real ( wp ), parameter :: b121 = - 2.2141388211521594228089507244618610021434452510302869093059447809375117564415940198e0_wp real ( wp ), parameter :: b124 = 4.56355804724646925572212018240182661579238223094527486516681347955670181620817635015e0_wp real ( wp ), parameter :: b125 = - 1.6957036205517104297839745395366915857642603514682315438023365324576286639172315989e1_wp real ( wp ), parameter :: b126 = 1.31105217928641421165649661367441373070008285256157591924114546268073486094645142906e1_wp real ( wp ), parameter :: b127 = 2.65774224749870274100467824154490008698121216459786964112414318137911711432599035412e0_wp real ( wp ), parameter :: b128 = 2.74592934104436868684638073474053713826464018949259425746847719273619536662550065244e0_wp real ( wp ), parameter :: b129 = - 1.1506549223705344448192637136257715209341884980498719927919640966806759385051562199e0_wp real ( wp ), parameter :: b1210 = 2.42302296121448799919236503348925313670760208048083006656846347016299049952947649144e0_wp real ( wp ), parameter :: b1211 = - 4.1789444408283726338625504954661059040264279273698536826180777484478790720345919102e0_wp real ( wp ), parameter :: b131 = - 1.5511316950026916120467765404925329008269305742185819600030671406615107733844590777e0_wp real ( wp ), parameter :: b134 = 5.46092722623409081818657767842421731964760251560133825662023106815177868484348803926e0_wp real ( wp ), parameter :: b135 = - 1.1979220224305761165813607594501926859816750798269770560276587319873047174682994374e1_wp real ( wp ), parameter :: b136 = 9.35213287509985895980770600293832447863564422228774591854591472707049491657923415773e0_wp real ( wp ), parameter :: b137 = - 2.6805151435786875122787398112144651989157843381870119309573397987877093382768663729e-1_wp real ( wp ), parameter :: b138 = - 2.9111005885695086970119200745004024552717605363363761755145270197855298352241438457e-1_wp real ( wp ), parameter :: b139 = - 5.7342608212997377743524954389733665898828809950550624616346021546025114366487668036e-1_wp real ( wp ), parameter :: b1310 = 8.49879473319296398230415986100741386767477221557113401924155562629859407659708957311e-1_wp real ( wp ), parameter :: c1 = 4.46288489653070217415613140881920071523054807312072680684782090651440586079475760217e-2_wp real ( wp ), parameter :: c6 = 3.53849672808056955006078714962021325996588002624194340841646462152138105292559006658e-1_wp real ( wp ), parameter :: c7 = 2.49214137824034653157413522433245474576906451975957952284766070502834548257871008029e-1_wp real ( wp ), parameter :: c8 = - 5.2283384709802500404740481515533751847798124016472832324227905218125681954020960889e0_wp real ( wp ), parameter :: c9 = 5.15116549236861223325928760078465842871662817825128618469086436536651971244098141329e0_wp real ( wp ), parameter :: c10 = - 9.5097928721643673005225329855637374707813853242252723834130793535769142379902016318e0_wp real ( wp ), parameter :: c11 = 1.00596341373431488638526005247320813694813862000943570400067314269066845716409977948e1_wp real ( wp ), parameter :: c12 = - 1.2036094616454238602036053988308595036261658780444717005661665860383856284805907814e-1_wp real ( wp ), parameter :: d1 = 4.46938336974745394582507450063655006984853368676139647920294768627190144403875012741e-2_wp real ( wp ), parameter :: d6 = 3.54849078534857257151115499384161010948488673442599070019549247826104344436599329295e-1_wp real ( wp ), parameter :: d7 = 2.48972827546254539183557734416986167348192069231072959065041272432884166102268412123e-1_wp real ( wp ), parameter :: d8 = 2.66563173304884358413831674493708561666064947673721173917129352743937890031432599813e0_wp real ( wp ), parameter :: d9 = 3.92326394871838972220877485800106547858756064671589732933492272245546934442704232603e0_wp real ( wp ), parameter :: d10 = - 5.6804277609880002002190441358794913525295674525389817820177718907811376030065962976e0_wp real ( wp ), parameter :: d13 = - 5.5698366055781944192097144586617242171380875045541328036506435623541816671402726928e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + & b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + & b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure dverk78 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW7(5) Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp75.m](http://users.uoa.gr/~tsitourasc/rktp75.m)) module procedure rktp75 real ( wp ), parameter :: b21 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: b32 = 1.0_wp / 9.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b43 = 1.0_wp / 8.0_wp real ( wp ), parameter :: b51 = 218397 1.0_wp / 400000 0.0_wp real ( wp ), parameter :: b53 = - 834081 3.0_wp / 400000 0.0_wp real ( wp ), parameter :: b54 = 396842 1.0_wp / 200000 0.0_wp real ( wp ), parameter :: b61 = 69576821 2.0_wp / 746374441 1.0_wp real ( wp ), parameter :: b63 = - 180354917 5.0_wp / 700794249 6.0_wp real ( wp ), parameter :: b64 = 347450705 3.0_wp / 679087729 0.0_wp real ( wp ), parameter :: b65 = 218819889 9.0_wp / 1526492776 3.0_wp real ( wp ), parameter :: b71 = - 1189493485 7.0_wp / 839062363 4.0_wp real ( wp ), parameter :: b73 = 5309478027 6.0_wp / 980051200 3.0_wp real ( wp ), parameter :: b74 = - 841537622 9.0_wp / 227704950 3.0_wp real ( wp ), parameter :: b75 = - 1864756769 7.0_wp / 1013831790 7.0_wp real ( wp ), parameter :: b76 = 2755149489 3.0_wp / 1190595021 7.0_wp real ( wp ), parameter :: b81 = 3082805795 1.0_wp / 765464408 5.0_wp real ( wp ), parameter :: b83 = - 451170 4.0_wp / 32472 9.0_wp real ( wp ), parameter :: b84 = 1621785161 8.0_wp / 165117717 5.0_wp real ( wp ), parameter :: b85 = 28276818683 9.0_wp / 4069406438 4.0_wp real ( wp ), parameter :: b86 = - 10440078053 7.0_wp / 1586925761 9.0_wp real ( wp ), parameter :: b87 = 540924163 9.0_wp / 960017720 8.0_wp real ( wp ), parameter :: b91 = - 13377572054 6.0_wp / 3675338383 5.0_wp real ( wp ), parameter :: b93 = 4960869551 1.0_wp / 406659084 8.0_wp real ( wp ), parameter :: b94 = - 5989647520 1.0_wp / 790125981 3.0_wp real ( wp ), parameter :: b95 = - 4803552765 1.0_wp / 572737942 6.0_wp real ( wp ), parameter :: b96 = 8626671855 1.0_wp / 1018895104 8.0_wp real ( wp ), parameter :: b97 = - 775161811 4.0_wp / 2357580249 5.0_wp real ( wp ), parameter :: b98 = 228927494 2.0_wp / 846440572 5.0_wp real ( wp ), parameter :: a2 = 1.0_wp / 1 8.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 8 9.0_wp / 20 0.0_wp real ( wp ), parameter :: a6 = 5648 2.0_wp / 11506 9.0_wp real ( wp ), parameter :: a7 = 7 4.0_wp / 9 5.0_wp real ( wp ), parameter :: a8 = 8.0_wp / 9.0_wp real ( wp ), parameter :: c1 = 59798872 6.0_wp / 1237443691 5.0_wp ! 7th order formula real ( wp ), parameter :: c4 = 313831215 8.0_wp / 1196840811 9.0_wp real ( wp ), parameter :: c5 = 48088284 3.0_wp / 785066564 5.0_wp real ( wp ), parameter :: c6 = 98855888 5.0_wp / 351225327 1.0_wp real ( wp ), parameter :: c7 = 530263696 1.0_wp / 2642594028 6.0_wp real ( wp ), parameter :: c8 = 125948943 3.0_wp / 1216358603 0.0_wp real ( wp ), parameter :: c9 = 101664771 2.0_wp / 2389910197 5.0_wp real ( wp ), parameter :: d1 = 142194031 3.0_wp / 4619354707 7.0_wp ! 5th order formula real ( wp ), parameter :: d4 = 194306860 1.0_wp / 591121704 6.0_wp real ( wp ), parameter :: d5 = - 380714088 0.0_wp / 820536635 9.0_wp real ( wp ), parameter :: d6 = 937722088 8.0_wp / 1157767163 5.0_wp real ( wp ), parameter :: d7 = 58618688 3.0_wp / 518718638 5.0_wp real ( wp ), parameter :: d8 = 111409502 3.0_wp / 801479112 1.0_wp !real(wp),parameter :: d9 = 1016647712.0_wp / 23899101975.0_wp ! == c9 real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t * h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 ) end associate end procedure rktp75 !***************************************************************************************** !***************************************************************************************** !> ! Tanaka/Muramatsu/Yamashita 7th order (a.k.a. Tanyam7) ! !### Reference ! * M. Tanaka, S. Muramatsu and S. Yamashita, ! \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\", ! Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK7/RKcoeff7d_4.pdf) ! * [Tanyam7](https://github.com/SciML/OrdinaryDiffEq.jl/blob/f8f06c586c7a5616d7c251bce2d9e0fef0823eb4/src/tableaus/high_order_rk_tableaus.jl) ! !@note The floating point coefficients here were generated from the rational ones from the 3rd reference. module procedure rktmy7 real ( wp ), parameter :: a1 = 7.81664651011384679726388269101836941032920932418419855605785254026460056610810379655e-2_wp real ( wp ), parameter :: a2 = 1.17249697651707701958958240365275541154938139862762978340867788103969008491621556948e-1_wp real ( wp ), parameter :: a3 = 1.75874546477561552938437360547913311732407209794144467511301682155953512737432335422e-1_wp real ( wp ), parameter :: a4 = 4.98740110191398804083870799279316917774238190981016789826879390030550695876961641904e-1_wp real ( wp ), parameter :: a5 = 7.72121690184483890484305252570415231459539559725240465368497233385136757456140428136e-1_wp real ( wp ), parameter :: a6 = 9.91185669604776798407733864088711970429343190218936593687802104065965311344896218368e-1_wp real ( wp ), parameter :: a7 = 9.99501958209766146741222013447128336314037987005636927534919520974350847802956557173e-1_wp real ( wp ), parameter :: b21 = 7.81664651011384679726388269101836941032920932418419855605785254026460056610810379655e-2_wp real ( wp ), parameter :: b31 = 2.93124244129269254897395600913188852887345349656907445852169470259922521229053892370e-2_wp real ( wp ), parameter :: b32 = 8.79372732387807764692186802739566558662036048970722337556508410779767563687161677111e-2_wp real ( wp ), parameter :: b41 = 4.39686366193903882346093401369783279331018024485361168778254205389883781843580838556e-2_wp real ( wp ), parameter :: b43 = 1.31905909858171164703828020410934983799305407345608350633476261616965134553074251567e-1_wp real ( wp ), parameter :: b51 = 7.36183483773838301137467440432293617773745769566559352064158169276511636772818047624e-1_wp real ( wp ), parameter :: b53 = - 2.8337999624233305489833449285093928914333838008174765752291037107738552931533021862e0_wp real ( wp ), parameter :: b54 = 2.59635658884089105192974828735641619143387622223193401299182493152789435225744578050e0_wp real ( wp ), parameter :: b61 = - 1.2062819391370865506697620184830239019171754039710073663311602518203645149254198062e1_wp real ( wp ), parameter :: b63 = 4.82083810017524271975659667922264091479441542231216831647946440093325968906031102739e1_wp real ( wp ), parameter :: b64 = - 3.8058630464634340873444069083787729069064369254270820186967532356616235833794046365e1_wp real ( wp ), parameter :: b65 = 2.68519054443726307306002772896197417175150863058445115085298809887242084990127458112e0_wp real ( wp ), parameter :: b71 = 1.05219572763201983263505214763646609723666799568263028237820996736734142311884342584e2_wp real ( wp ), parameter :: b73 = - 4.1792888626241254423220090632342880293119367792924845836746399438762371771451577296e2_wp real ( wp ), parameter :: b74 = 3.32315550449933288661672145724565517116512854686499482568452142501473088581714784505e2_wp real ( wp ), parameter :: b75 = - 1.9827591183572936803332556016677309852484292769162933988083092149281072338147267880e1_wp real ( wp ), parameter :: b76 = 1.21253990245498590876383571598269791392765963386781814296174940276352447040880996631e0_wp real ( wp ), parameter :: b81 = 1.14677557186317412777743962690232735459737977190570736656211705995064581461317681933e2_wp real ( wp ), parameter :: b83 = - 4.5556121698960972374080326255401158427067549223697915892004464775745251977067045545e2_wp real ( wp ), parameter :: b84 = 3.62240955539231418592330010344238763220304805879492791461256324311641976192069398751e2_wp real ( wp ), parameter :: b85 = - 2.1671904421828087451986108533232639587308358187016768553336461965905412178073526990e1_wp real ( wp ), parameter :: b86 = 1.31891320071378062521147328839749773179746572184191322809881380227032622170542838742e0_wp real ( wp ), parameter :: b87 = - 4.8025566150346557548532221776442175423603809038769446508148646446010785455700778379e-3_wp real ( wp ), parameter :: b91 = 1.15213348705537687993035352351751211261221390205532219553682499922866411003708635464e2_wp real ( wp ), parameter :: b93 = - 4.5769356568613233007695763193867218928825178792989579576839091929408867970634224781e2_wp real ( wp ), parameter :: b94 = 3.63936882188627343156610348429345771832876086443132263964527166628432626799709477320e2_wp real ( wp ), parameter :: b95 = - 2.1776682078900292925704872499507823559172972633117930893260468010116663302476870140e1_wp real ( wp ), parameter :: b96 = 1.32506708878784683255232611830210096225232882939350575184015801179589744903384223122e0_wp real ( wp ), parameter :: b97 = - 4.5181909867689836302434492066200005706653127046344820697054796285731244656302707584e-3_wp real ( wp ), parameter :: b98 = - 5.3202693348599590527901201245120835437960233962812632873177926101911916720679884551e-4_wp real ( wp ), parameter :: b101 = 1.15189282458001936117920705886017744028740693856879151180637835667882356288187386531e2_wp real ( wp ), parameter :: b103 = - 4.5759802227164297152415973359923257831016657330505652256715384079434141772791111922e2_wp real ( wp ), parameter :: b104 = 3.63861025631214796441099277168858079581214448605485290879259097757252663203289829524e2_wp real ( wp ), parameter :: b105 = - 2.1772127540275557896757277605910244539671287153847928139832256704010642220109132278e1_wp real ( wp ), parameter :: b106 = 1.32488046450743160713676531081866548206715403286785238191455539176685996800150702540e0_wp real ( wp ), parameter :: b107 = - 4.5057252106918316437819055679743451410766257174024328014118092080515035470892820222e-3_wp real ( wp ), parameter :: b108 = - 5.3301659494291359595525498369189704335941061044130202397950934176800791138229684609e-4_wp real ( wp ), parameter :: c1 = 5.12601424974468664207334896467928192605824917480148880826975913119881823951586777925e-2_wp real ( wp ), parameter :: c4 = 2.75216384562126285009146859937694605711798961533809877651595696709236573932734806466e-1_wp real ( wp ), parameter :: c5 = 3.36966503407105433969810392957648333413899278562014739968412391495966278358775981408e-1_wp real ( wp ), parameter :: c6 = 1.89860722449065759713312922673232536516903910783954769517234286153030491598156826344e-1_wp real ( wp ), parameter :: c7 = 8.46109941851440210639662306074261643772685843568635085555647158979307742068711096848e0_wp real ( wp ), parameter :: c8 = - 1.3015941672640542180639580507865346065998831988530342657791656834495604969014688205e2_wp real ( wp ), parameter :: c9 = 1.21845013554975275354886178352695475927358276806989281447140156789492750743174944785e2_wp real ( wp ), parameter :: d1 = 5.10024175903771829479213461329816195478958717593517724635264723499155306525942551495e-2_wp real ( wp ), parameter :: d4 = 2.76139295046665466902620362521695093962636297177632180749087744362855793802931918925e-1_wp real ( wp ), parameter :: d5 = 3.33788602069686023554754031916460354879718501346567668959954157311633875576165846369e-1_wp real ( wp ), parameter :: d6 = 2.01965311390813930477691388976007742664325756050214204738992402177761682278944674291e-1_wp real ( wp ), parameter :: d7 = 5.75507545904181112023147975998801190281904137375217710125886160168224573401735815006e0_wp real ( wp ), parameter :: d8 = - 8.5617971085139353724114466889535156713873617800085942928170422377884412616327994845e1_wp real ( wp ), parameter :: d10 = 8.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e1_wp real ( wp ), parameter :: e1 = d1 - c1 ! -2.5772490706968347281214351381119971268661998866311561917111896207265174256442264298e-4_wp real ( wp ), parameter :: e4 = d4 - c4 ! 9.22910484539181893473502584000488250837335643822303097492047653619219870197112458608e-4_wp real ( wp ), parameter :: e5 = d5 - c5 ! -3.1779013374194104150563610411879785341807772154470710084582341843324027826101350395e-3_wp real ( wp ), parameter :: e6 = d6 - c6 ! 1.21045889417481707643784663027752061474218452662594352217581160247311906807878479474e-2_wp real ( wp ), parameter :: e7 = d7 - c7 ! -2.7060239594725909861651433007546045349078170619341737542976099881108316866697528184e0_wp real ( wp ), parameter :: e8 = d8 - c8 ! 4.45414456412660680822813381891183039461147020852174836497461459670716370738188872008e1_wp real ( wp ), parameter :: e9 = - c9 ! -1.2184501355497527535488617835269547592735827680698928144714015678949275074317494479e2_wp real ( wp ), parameter :: e10 = d10 ! 8.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e1_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + a1 * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rktmy7 !***************************************************************************************** !***************************************************************************************** !> ! Tanaka/Muramatsu/Yamashita 7th order (stable alternate) ! !### Reference ! * M. Tanaka, S. Muramatsu and S. Yamashita, ! \"On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method\", ! Information Processing Society of Japan, Vol. 33, No. 12 (1992) pages 1512-1526. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK7/RKcoeff7d_3.pdf) module procedure rktmy7s real ( wp ), parameter :: a2 = 8.86136910904712762297901616787065703474372205022359821121431028551771585827313381493e-2_wp real ( wp ), parameter :: a3 = 1.32920536635706914344685242518059855521155830753353973168214654282765737874097007224e-1_wp real ( wp ), parameter :: a4 = 1.99380804953560371517027863777089783281733746130030959752321981424148606811145510836e-1_wp real ( wp ), parameter :: a5 = 2.51937984496124031007751937984496124031007751937984496124031007751937984496124031008e-1_wp real ( wp ), parameter :: a6 = 2.26466433020936656065704702091900664344459244867723201401086840088319283348150590416e-2_wp real ( wp ), parameter :: a7 = 6.78260869565217391304347826086956521739130434782608695652173913043478260869565217391e-1_wp real ( wp ), parameter :: a8 = 7.66129032258064516129032258064516129032258064516129032258064516129032258064516129032e-1_wp real ( wp ), parameter :: b21 = 8.86136910904712762297901616787065703474372205022359821121431028551771585827313381493e-2_wp real ( wp ), parameter :: b31 = 3.32301341589267285861713106295149638802889576883384932920536635706914344685242518060e-2_wp real ( wp ), parameter :: b32 = 9.96904024767801857585139318885448916408668730650154798761609907120743034055727554180e-2_wp real ( wp ), parameter :: b41 = 4.98452012383900928792569659442724458204334365325077399380804953560371517027863777090e-2_wp ! real(wp),parameter :: b42 = 0 real ( wp ), parameter :: b43 = 1.49535603715170278637770897832817337461300309597523219814241486068111455108359133127e-1_wp real ( wp ), parameter :: b51 = 5.51347401967803154774903010020881505852005989293761620647741487589886184464539035017e-2_wp ! real(wp),parameter :: b52 = 0 real ( wp ), parameter :: b53 = 1.12885720141989326660141409395828560302843986115057948865980980005720662021597769579e-1_wp real ( wp ), parameter :: b54 = 8.39175241573543888701202275865794131429631668935503851932758789872287040280723579274e-2_wp real ( wp ), parameter :: b61 = 1.53780353659624250311801512696108169293868598553255672534718580953857479599369970368e-2_wp ! real(wp),parameter :: b62 = 0 real ( wp ), parameter :: b63 = 3.20168833857685908914047299444587333329182280459513826892095134179082200072969961132e-2_wp real ( wp ), parameter :: b64 = - 4.2539659878681657073856959205351592650720670439267341724969304281964049361468337347e-2_wp real ( wp ), parameter :: b65 = 1.77913844290443067578425482004721088228615070247627119223966167775020097290494032391e-2_wp real ( wp ), parameter :: b71 = - 1.5256873392554910892888395407304491271001202239387133944183533057047079677113113410e1_wp ! real(wp),parameter :: b72 = 0 real ( wp ), parameter :: b73 = - 4.0883456759270366648261512467321799058186499039799239493858442836256593204975747971e-1_wp real ( wp ), parameter :: b74 = - 1.3608204533866463335338410239697411205509650095546743972399822290598206098672910268e1_wp real ( wp ), parameter :: b75 = 1.01149044236967810023853975406104197029605187561685172742777704473133250229308176604e1_wp real ( wp ), parameter :: b76 = 1.98372689398825142836283710571516572858713290039459617328963432417380049457745287151e1_wp real ( wp ), parameter :: b81 = 1.88486645187560529586357925865538054589099172763864914361630595960178420222946575411e0_wp ! real(wp),parameter :: b82 = 0 real ( wp ), parameter :: b83 = 7.38723400736316245047913111275147442586352189973516108074150970202563979482282113515e-2_wp real ( wp ), parameter :: b84 = 8.04572070566500039801983801614661023094256190473761133022111517088062229540462605430e-1_wp real ( wp ), parameter :: b85 = 4.63664644831429482283531761249424920698038820301953813871953906173904815616778436120e-3_wp real ( wp ), parameter :: b86 = - 2.2571634399585372828168228383264979022555589706647864119944165313232196821070240573e0_wp real ( wp ), parameter :: b87 = 2.55344963252550543952665407380963468836953509868134018667928934680410062297215831041e-1_wp real ( wp ), parameter :: b91 = - 5.9346254587724754339983223484206523031910583834235199880213406063079393162409202809e0_wp ! real(wp),parameter :: b92 = 0 real ( wp ), parameter :: b93 = - 7.8254437924926937330746887342046970213268979627548332452496248647606158812656995539e-2_wp real ( wp ), parameter :: b94 = - 7.8190850697311404939022123036040717579732265786069442338599154407498020519983830030e0_wp real ( wp ), parameter :: b95 = 6.62838952616537145950452382452961751768395831246709307616126651109617352143730615816e0_wp real ( wp ), parameter :: b96 = 8.02308370728521564415778792242500347174153708508314015132305288664913153021463120273e0_wp real ( wp ), parameter :: b97 = - 9.0428803055994289478315309000341323995405509411440606262203643609271327625942925961e-1_wp real ( wp ), parameter :: b98 = 1.08477976353789865635212288241556328190611363822218538947146933405275575165945217817e0_wp real ( wp ), parameter :: b101 = 1.62179253869109927468375569917595038904177242620112769247150828367984290149786137801e1_wp ! real(wp),parameter :: b102 = 0 real ( wp ), parameter :: b103 = 2.16664888484339819588806336947105292464689479004009761616228992822572035699934314119e-1_wp real ( wp ), parameter :: b104 = 1.28224265684564880927217994602681081201929120394991496951845578168120816842817479071e1_wp real ( wp ), parameter :: b105 = - 8.1089672876336983196919059983906105838229524182068262549575894100211346860455654545e0_wp real ( wp ), parameter :: b106 = - 2.0667128454690444724018643663830140813737619941924668651212413900366570540033662448e1_wp real ( wp ), parameter :: b107 = - 3.1833603946776751327638844301283960383913589487275171654091584194061718372090669796e-1_wp real ( wp ), parameter :: b108 = 8.37414937940089897838775316258873698324382474489810241195049505895239674839838599165e-1_wp ! real(wp),parameter :: b109 = 0 real ( wp ), parameter :: c1 = - 7.0509607576408896307075679328876855284603613449588923698038237210603268019606544968e-1_wp ! real(wp),parameter :: c2 = 0 ! real(wp),parameter :: c3 = 0 real ( wp ), parameter :: c4 = - 1.3042081566303485225649874598063839519475921490266396703180477516076867108693171832e0_wp real ( wp ), parameter :: c5 = 1.48160311264599651661502935631784760949494268493436673049606673336731557372364280543e0_wp real ( wp ), parameter :: c6 = 1.06895075363674788262512061362504155168134693772218655812810426772234205050708971472e0_wp real ( wp ), parameter :: c7 = 6.13577483162844175682242729746843974632226625804493770700993518511008512922114250458e-2_wp real ( wp ), parameter :: c8 = 3.26912547604941692272822108612497316454980622616931033966225739519181388387272903080e-1_wp real ( wp ), parameter :: c9 = 7.04800701904669765545479015650816296991353756685952076379340312537795271551657846090e-2_wp ! real(wp),parameter :: c10 = 0 real ( wp ), parameter :: d1 = - 3.6831507795991271832603276725031327096976142593866411295983627470495355912891936736e-1_wp ! real(wp),parameter :: d2 = 0 ! real(wp),parameter :: d3 = 0 real ( wp ), parameter :: d4 = - 8.0950091191196753949937080390898589767029649084843059799077876945035271299089357243e-1_wp real ( wp ), parameter :: d5 = 1.08173849169813311928266834059595139857072621270843946078873270438439274085083834379e0_wp real ( wp ), parameter :: d6 = 6.13601703165021649508638707253091181092345706628708774027475501516795619531413661207e-1_wp real ( wp ), parameter :: d7 = 1.38925487324489763175454783958272954686752997010110778095994410501506567737198901272e-1_wp real ( wp ), parameter :: d8 = 2.68550307684235725858641739351983634290233000439835698038412427752611344000362033525e-1_wp ! real(wp),parameter :: d9 = 0 real ( wp ), parameter :: d10 = 7.50000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: e1 = c1 - d1 ! real(wp),parameter :: e2 = c2 - d2 ! real(wp),parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 real ( wp ), parameter :: e10 = - d10 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + h , x + h * ( b91 * f1 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + h , x + h * ( b101 * f1 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 ), f10 ) xf = x + h * ( c1 * f1 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 ) xerr = h * ( e1 * f1 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 ) end associate end procedure rktmy7s !***************************************************************************************** !***************************************************************************************** !> ! Dormand-Prince 8(5) ! !### References ! * E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary ! Differential Equations I. Nonstiff Problems. 2nd edition. ! springer series in computational mathematics, ! springer-verlag (1993) ! * [Original DOP853 by Hairer](https://www.unige.ch/~hairer/prog/nonstiff/dop853.f) ! * [Modernized DOP853](https://github.com/jacobwilliams/dop853) ! * [DP8ConstantCache](https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/src/tableaus/high_order_rk_tableaus.jl) module procedure rkdp85 real ( wp ), parameter :: a7 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a8 = 4.0_wp / 1 3.0_wp real ( wp ), parameter :: a9 = 12 7.0_wp / 19 5.0_wp real ( wp ), parameter :: a10 = 3.0_wp / 5.0_wp real ( wp ), parameter :: a11 = 6.0_wp / 7.0_wp real ( wp ), parameter :: a6 = 4.0_wp / 3.0_wp * a7 real ( wp ), parameter :: a5 = ( 6.0_wp + sqrt ( 6.0_wp )) / 1 0.0_wp * a6 real ( wp ), parameter :: a4 = ( 6.0_wp - sqrt ( 6.0_wp )) / 1 0.0_wp * a6 real ( wp ), parameter :: a3 = 2.0_wp / 3.0_wp * a4 real ( wp ), parameter :: a2 = 2.0_wp / 3.0_wp * a3 real ( wp ), parameter :: b21 = 5.26001519587677318785587544488e-2_wp real ( wp ), parameter :: b31 = 1.97250569845378994544595329183e-2_wp real ( wp ), parameter :: b32 = 5.91751709536136983633785987549e-2_wp real ( wp ), parameter :: b41 = 2.95875854768068491816892993775e-2_wp real ( wp ), parameter :: b43 = 8.87627564304205475450678981324e-2_wp real ( wp ), parameter :: b51 = 2.41365134159266685502369798665e-1_wp real ( wp ), parameter :: b53 = - 8.84549479328286085344864962717e-1_wp real ( wp ), parameter :: b54 = 9.24834003261792003115737966543e-1_wp real ( wp ), parameter :: b61 = 3.7037037037037037037037037037e-2_wp real ( wp ), parameter :: b64 = 1.70828608729473871279604482173e-1_wp real ( wp ), parameter :: b65 = 1.25467687566822425016691814123e-1_wp real ( wp ), parameter :: b71 = 3.7109375e-2_wp real ( wp ), parameter :: b74 = 1.70252211019544039314978060272e-1_wp real ( wp ), parameter :: b75 = 6.02165389804559606850219397283e-2_wp real ( wp ), parameter :: b76 = - 1.7578125e-2_wp real ( wp ), parameter :: b81 = 3.70920001185047927108779319836e-2_wp real ( wp ), parameter :: b84 = 1.70383925712239993810214054705e-1_wp real ( wp ), parameter :: b85 = 1.07262030446373284651809199168e-1_wp real ( wp ), parameter :: b86 = - 1.53194377486244017527936158236e-2_wp real ( wp ), parameter :: b87 = 8.27378916381402288758473766002e-3_wp real ( wp ), parameter :: b91 = 6.24110958716075717114429577812e-1_wp real ( wp ), parameter :: b94 = - 3.36089262944694129406857109825_wp real ( wp ), parameter :: b95 = - 8.68219346841726006818189891453e-1_wp real ( wp ), parameter :: b96 = 2.75920996994467083049415600797e1_wp real ( wp ), parameter :: b97 = 2.01540675504778934086186788979e1_wp real ( wp ), parameter :: b98 = - 4.34898841810699588477366255144e1_wp real ( wp ), parameter :: b101 = 4.77662536438264365890433908527e-1_wp real ( wp ), parameter :: b104 = - 2.48811461997166764192642586468e0_wp real ( wp ), parameter :: b105 = - 5.90290826836842996371446475743e-1_wp real ( wp ), parameter :: b106 = 2.12300514481811942347288949897e1_wp real ( wp ), parameter :: b107 = 1.52792336328824235832596922938e1_wp real ( wp ), parameter :: b108 = - 3.32882109689848629194453265587e1_wp real ( wp ), parameter :: b109 = - 2.03312017085086261358222928593e-2_wp real ( wp ), parameter :: b111 = - 9.3714243008598732571704021658e-1_wp real ( wp ), parameter :: b114 = 5.18637242884406370830023853209e0_wp real ( wp ), parameter :: b115 = 1.09143734899672957818500254654e0_wp real ( wp ), parameter :: b116 = - 8.14978701074692612513997267357e0_wp real ( wp ), parameter :: b117 = - 1.85200656599969598641566180701e1_wp real ( wp ), parameter :: b118 = 2.27394870993505042818970056734e1_wp real ( wp ), parameter :: b119 = 2.49360555267965238987089396762e0_wp real ( wp ), parameter :: b1110 = - 3.0467644718982195003823669022e0_wp real ( wp ), parameter :: b121 = 2.27331014751653820792359768449e0_wp real ( wp ), parameter :: b124 = - 1.05344954667372501984066689879e1_wp real ( wp ), parameter :: b125 = - 2.00087205822486249909675718444e0_wp real ( wp ), parameter :: b126 = - 1.79589318631187989172765950534e1_wp real ( wp ), parameter :: b127 = 2.79488845294199600508499808837e1_wp real ( wp ), parameter :: b128 = - 2.85899827713502369474065508674e0_wp real ( wp ), parameter :: b129 = - 8.87285693353062954433549289258e0_wp real ( wp ), parameter :: b1210 = 1.23605671757943030647266201528e1_wp real ( wp ), parameter :: b1211 = 6.43392746015763530355970484046e-1_wp real ( wp ), parameter :: c1 = 5.42937341165687622380535766363e-2_wp real ( wp ), parameter :: c6 = 4.45031289275240888144113950566_wp real ( wp ), parameter :: c7 = 1.89151789931450038304281599044_wp real ( wp ), parameter :: c8 = - 5.8012039600105847814672114227_wp real ( wp ), parameter :: c9 = 3.1116436695781989440891606237e-1_wp real ( wp ), parameter :: c10 = - 1.52160949662516078556178806805e-1_wp real ( wp ), parameter :: c11 = 2.01365400804030348374776537501e-1_wp real ( wp ), parameter :: c12 = 4.47106157277725905176885569043e-2_wp real ( wp ), parameter :: e1 = 0.1312004499419488073250102996e-01_wp real ( wp ), parameter :: e6 = - 0.1225156446376204440720569753e+01_wp real ( wp ), parameter :: e7 = - 0.4957589496572501915214079952_wp real ( wp ), parameter :: e8 = 0.1664377182454986536961530415e+01_wp real ( wp ), parameter :: e9 = - 0.3503288487499736816886487290_wp real ( wp ), parameter :: e10 = 0.3341791187130174790297318841_wp real ( wp ), parameter :: e11 = 0.8192320648511571246570742613e-01_wp real ( wp ), parameter :: e12 = - 0.2235530786388629525884427845e-01_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 ) end associate end procedure rkdp85 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras & Papakostas NEW8(6): 12-stage, 8th and 6th order Runge-Kutta method. ! !### Reference ! * C. Tsitouras and S. N. Papakostas, \"Cheap Error Estimation for Runge-Kutta ! methods\", SIAM J. Sci. Comput. 20(1999) 2067-2088. ! * [Matlab version](https://www.mathworks.com/matlabcentral/fileexchange/2911-ode86) ! * [Rational coefficients](http://users.uoa.gr/~tsitourasc/publications.html) ! (see [rktp86.m](http://users.uoa.gr/~tsitourasc/rktp86.m)) module procedure rktp86 real ( wp ), parameter :: b21 = 9.0_wp / 14 2.0_wp ! 0.06338028169014085_wp real ( wp ), parameter :: b31 = 17842212 3.0_wp / 917857413 7.0_wp ! 0.0194389804273365_wp real ( wp ), parameter :: b32 = 68550133 3.0_wp / 822447320 5.0_wp ! 0.0833489654490278_wp real ( wp ), parameter :: b41 = 1225 7.0_wp / 31798 8.0_wp ! 0.03854547970363662_wp real ( wp ), parameter :: b43 = 1225 7.0_wp / 10599 6.0_wp ! 0.1156364391109098_wp real ( wp ), parameter :: b51 = 258494972 9.0_wp / 655470425 2.0_wp ! 0.394365577701125_wp real ( wp ), parameter :: b53 = - 916390191 6.0_wp / 618400397 3.0_wp ! -1.481871932167337_wp real ( wp ), parameter :: b54 = 2622205779 4.0_wp / 1777642190 7.0_wp ! 1.475103253691018_wp real ( wp ), parameter :: b61 = 441801 1.0_wp / 9605522 5.0_wp ! 0.04599448910769821_wp real ( wp ), parameter :: b64 = 294792210 7.0_wp / 1268738173 6.0_wp ! 0.2323507062639547_wp real ( wp ), parameter :: b65 = 322997341 3.0_wp / 1723496041 4.0_wp ! 0.1874082292858813_wp real ( wp ), parameter :: b71 = 287513953 9.0_wp / 4787726765 1.0_wp ! 0.06005228953244051_wp real ( wp ), parameter :: b74 = 270237721 1.0_wp / 2408453583 2.0_wp ! 0.1122038319463678_wp real ( wp ), parameter :: b75 = - 13570708 9.0_wp / 404223034 1.0_wp ! -0.03357232951906142_wp real ( wp ), parameter :: b76 = 29987414 0.0_wp / 1793332569 1.0_wp ! 0.01672161344565858_wp real ( wp ), parameter :: b81 = - 787217613 7.0_wp / 500351469 4.0_wp ! -1.573329273208686_wp real ( wp ), parameter :: b84 = - 3513610878 9.0_wp / 2668479887 8.0_wp ! -1.316708773022366_wp real ( wp ), parameter :: b85 = - 11443318468 1.0_wp / 976099589 5.0_wp ! -11.72351529618177_wp real ( wp ), parameter :: b86 = 29920499651 7.0_wp / 3285142123 3.0_wp ! 9.10782502817387_wp real ( wp ), parameter :: b87 = 25 4.0_wp / 3 9.0_wp ! 6.512820512820513_wp real ( wp ), parameter :: b91 = - 355995077 7.0_wp / 739997189 8.0_wp ! -0.4810762562439125_wp real ( wp ), parameter :: b94 = - 2929929153 1.0_wp / 440550414 8.0_wp ! -6.650610360746391_wp real ( wp ), parameter :: b95 = - 4243401337 9.0_wp / 936690570 9.0_wp ! -4.530206099782573_wp real ( wp ), parameter :: b96 = 2064287170 0.0_wp / 530063545 3.0_wp ! 3.894414525020157_wp real ( wp ), parameter :: b97 = 1295119705 0.0_wp / 149998501 1.0_wp ! 8.63421764552553_wp real ( wp ), parameter :: b98 = 5952752 3.0_wp / 633162079 3.0_wp ! 0.0094016247886815_wp real ( wp ), parameter :: b101 = - 819672358 2.0_wp / 1057079598 1.0_wp ! -0.7754121446230568_wp real ( wp ), parameter :: b104 = - 4618145400 5.0_wp / 577513277 6.0_wp ! -7.996604718235832_wp real ( wp ), parameter :: b105 = - 19627710601 1.0_wp / 2917942405 2.0_wp ! -6.726558607230183_wp real ( wp ), parameter :: b106 = 6357513534 3.0_wp / 1149186833 3.0_wp ! 5.532184454327406_wp real ( wp ), parameter :: b107 = 12053566306 7.0_wp / 1106078018 7.0_wp ! 10.89757332024991_wp real ( wp ), parameter :: b108 = 19543429 4.0_wp / 972713994 5.0_wp ! 0.02009165028004539_wp real ( wp ), parameter :: b109 = - 61746803 7.0_wp / 1575734610 5.0_wp ! -0.03918604268037686_wp real ( wp ), parameter :: b111 = - 637380905 5.0_wp / 535777945 2.0_wp ! -1.189636324544999_wp real ( wp ), parameter :: b114 = - 15077274965 7.0_wp / 2115108808 0.0_wp ! -7.128368483301215_wp real ( wp ), parameter :: b115 = - 5807665738 3.0_wp / 608946939 4.0_wp ! -9.53722789710108_wp real ( wp ), parameter :: b116 = 925272119 0.0_wp / 122156679 7.0_wp ! 7.57447010898087_wp real ( wp ), parameter :: b117 = 13238130963 1.0_wp / 1174896557 6.0_wp ! 11.26748638207092_wp real ( wp ), parameter :: b118 = 70463390 4.0_wp / 1381369633 1.0_wp ! 0.05100980122305832_wp real ( wp ), parameter :: b119 = 65641703 3.0_wp / 818534965 8.0_wp ! 0.0801941346950826_wp real ( wp ), parameter :: b1110 = - 166980651 6.0_wp / 1055528984 9.0_wp ! -0.1581961783984735_wp real ( wp ), parameter :: b121 = - 272634695 3.0_wp / 695495978 9.0_wp ! -0.3920003904712727_wp real ( wp ), parameter :: b124 = 2490644673 1.0_wp / 635910516 1.0_wp ! 3.916659042493857_wp real ( wp ), parameter :: b125 = - 6527776762 5.0_wp / 2329896046 3.0_wp ! -2.801745928908056_wp real ( wp ), parameter :: b126 = 3912815231 7.0_wp / 1602821527 3.0_wp ! 2.441204566481742_wp real ( wp ), parameter :: b127 = - 4063835789 3.0_wp / 1680405901 6.0_wp ! -2.418365577882472_wp real ( wp ), parameter :: b128 = - 743736117 1.0_wp / 2191111474 3.0_wp ! -0.3394332629003293_wp real ( wp ), parameter :: b129 = 104012570 6.0_wp / 533494910 9.0_wp ! 0.1949645038310337_wp real ( wp ), parameter :: b1210 = - 112986513 4.0_wp / 581290764 5.0_wp ! -0.1943717676250815_wp real ( wp ), parameter :: b1211 = 625344111 8.0_wp / 1054385272 5.0_wp ! 0.5930888149805792_wp real ( wp ), parameter :: a2 = 9.0_wp / 14 2.0_wp ! 0.06338028169014085_wp real ( wp ), parameter :: a3 = 2451 4.0_wp / 23849 1.0_wp ! 0.1027879458763643_wp real ( wp ), parameter :: a4 = 1225 7.0_wp / 7949 7.0_wp ! 0.1541819188145465_wp real ( wp ), parameter :: a5 = 5 0.0_wp / 12 9.0_wp ! 0.3875968992248062_wp real ( wp ), parameter :: a6 = 3 4.0_wp / 7 3.0_wp ! 0.4657534246575343_wp real ( wp ), parameter :: a7 = 2 3.0_wp / 14 8.0_wp ! 0.1554054054054054_wp real ( wp ), parameter :: a8 = 14 2.0_wp / 14 1.0_wp ! 1.00709219858156_wp real ( wp ), parameter :: a9 = 1418317534 5.0_wp / 1618823234 3.0_wp ! 0.876141078561489_wp real ( wp ), parameter :: a10 = 8 3.0_wp / 9 1.0_wp ! 0.912087912087912_wp real ( wp ), parameter :: a11 = 14 3.0_wp / 14 9.0_wp ! 0.959731543624161_wp real ( wp ), parameter :: c1 = 43885319 3.0_wp / 988149683 8.0_wp ! 0.04441161093250152_wp real ( wp ), parameter :: c6 = 1109352542 9.0_wp / 3134201341 4.0_wp ! 0.3539506311373312_wp real ( wp ), parameter :: c7 = 48131144 3.0_wp / 193669576 2.0_wp ! 0.2485219684184965_wp real ( wp ), parameter :: c8 = - 337529455 8.0_wp / 1014542425 3.0_wp ! -0.3326913171720666_wp real ( wp ), parameter :: c9 = 983099386 2.0_wp / 511698105 7.0_wp ! 1.921248828652836_wp real ( wp ), parameter :: c10 = - 13863084994 3.0_wp / 5074747461 7.0_wp ! -2.731778300088252_wp real ( wp ), parameter :: c11 = 715227820 6.0_wp / 510439334 5.0_wp ! 1.401200440989917_wp real ( wp ), parameter :: c12 = 511819592 7.0_wp / 5379865192 6.0_wp ! 0.0951361371292365_wp real ( wp ), parameter :: d1 = 28928309 1.0_wp / 600869651 0.0_wp ! -0.003732456673269437_wp real ( wp ), parameter :: d6 = 303415248 7.0_wp / 791333631 9.0_wp ! -0.02947203216019219_wp real ( wp ), parameter :: d7 = 717056415 8.0_wp / 3026302743 5.0_wp ! 0.01158056612815422_wp real ( wp ), parameter :: d8 = 720630374 7.0_wp / 1675819591 0.0_wp ! -0.7627079959184843_wp real ( wp ), parameter :: d9 = - 105973925 8.0_wp / 847238746 7.0_wp ! 2.046330367018225_wp real ( wp ), parameter :: d10 = 1653412953 1.0_wp / 1155085350 5.0_wp ! -4.163198889384351_wp real ( wp ), parameter :: d11 = - 3.0_wp / 2.0_wp ! 2.901200440989918_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t * h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 ) end associate end procedure rktp86 !***************************************************************************************** !***************************************************************************************** !> ! Enright Verner 8(7) ! !### Reference ! * W. H. Enright, \"The Relative Efficiency of Alternative Defect Control Schemes ! for High-Order Continuous Runge-Kutta Formulas\", ! SIAM Journal on Numerical Analysis, Vol. 30, No. 5. (Oct., 1993), pp. 1419-1445. module procedure rkev87 real ( wp ), parameter :: a2 = 5.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 1.02577772963604852686308492201039861351819757365684575389948006932409012131715771231e-1_wp real ( wp ), parameter :: a4 = 1.53866659445407279029462738301559792027729636048526863084922010398613518197573656846e-1_wp real ( wp ), parameter :: a5 = 3.84600000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a6 = 4.61500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a7 = 1.53800000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a8 = 8.57100000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 9.50522279549898543264080746155892215372083974054663210568629277143998134232923935826e-1_wp real ( wp ), parameter :: a10 = 7.22200000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a11 = 9.37500000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 5.56000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = 7.95367668507191489463769912616233707314310387997043291210079553116635514850736965522e-3_wp real ( wp ), parameter :: b32 = 9.46240962785329377916707930748775242786766534857141424778472114012426569832084015753e-2_wp real ( wp ), parameter :: b41 = 3.84666648613518197573656845753899480069324090121317157712305025996533795493934142114e-2_wp real ( wp ), parameter :: b43 = 1.15399994584055459272097053726169844020797227036395147313691507798960138648180242634e-1_wp real ( wp ), parameter :: b51 = 3.84391795249995742463414694148930014496173869183551650147262740706965192166135782038e-1_wp real ( wp ), parameter :: b53 = - 1.4413754967533895577013957427459670216869972115118037596261793190397908645560378797e0_wp real ( wp ), parameter :: b54 = 1.44158370150339381523798104859703700719082334232825210947891657833282567238990209761e0_wp real ( wp ), parameter :: b61 = 4.61679927225245821615407392990543100173216372016370799947874024989156378037664283266e-2_wp real ( wp ), parameter :: b64 = 2.30766671478580119613626743161835287145952544968066036170902600446677938235230248901e-1_wp real ( wp ), parameter :: b65 = 1.84565335798895298224832517539110402836725817830296883834309997054406423961003322773e-1_wp real ( wp ), parameter :: b71 = 5.98340656981684945502396474355291084616704020934744687941026109734450878397200860064e-2_wp real ( wp ), parameter :: b74 = 1.11070988365806962422446377950496848082610655711386443707870631101667161815495770356e-1_wp real ( wp ), parameter :: b75 = - 3.4214310915191931585007005185985812353861433634302098328491649125465037270146208540e-2_wp real ( wp ), parameter :: b76 = 1.71092568512164746123209797999598558095803758294411858265184070503527876149303521772e-2_wp real ( wp ), parameter :: b81 = - 5.3795007752787302261474715462946928642562492201550692194017067742239449282090711696e-1_wp real ( wp ), parameter :: b84 = - 6.9376482130983202468485892167839192961199723756828602894007094394246115740310891917e0_wp real ( wp ), parameter :: b85 = - 4.6624538209733341287003258854737026552374536190626584633882834158844336356509780740e0_wp real ( wp ), parameter :: b86 = 3.99515211159952739816366225688709123778305091676102567472916353273143970250297438270e0_wp real ( wp ), parameter :: b87 = 9.0_wp real ( wp ), parameter :: b91 = - 1.6324274407986590789038658936937338307876068928047009736797164524613917396815405352e0_wp real ( wp ), parameter :: b94 = - 1.0827155649128676300106788103992512405570868288293796026024992785621740125352159452e1_wp real ( wp ), parameter :: b95 = - 1.2412770216529556426254179980877757507654516931216971035750731127725169216761599855e1_wp real ( wp ), parameter :: b96 = 9.72736897958029723333620569705898647991679730938513196401603844136574931065998854059e0_wp real ( wp ), parameter :: b97 = 1.61993509145171614713050347911446705109706857016123854149928694302903467232127746865e1_wp real ( wp ), parameter :: b98 = - 1.0384430809066835611232576348376103150240692462738613298483822870379681784453944854e-1_wp real ( wp ), parameter :: b101 = 4.37969506182387858999383959550753086479857907336724342215547180958125611435049537720e-1_wp real ( wp ), parameter :: b104 = 3.93953188040780609055484179804938065477461949555863432014746148406805874085095872275e0_wp real ( wp ), parameter :: b105 = 2.86077034685671490951716275075256969722509129259119025387241581075503457766785108234e0_wp real ( wp ), parameter :: b106 = - 1.7743107088675159424540294493688191717730257147970606451633813362863675504027539094e0_wp real ( wp ), parameter :: b107 = - 4.8953905177642011781075138200194429107217851579522239829952612873605231471994530162e0_wp real ( wp ), parameter :: b108 = 2.13024858819919749451668262421798635017462468974251987239988291318720261714005089224e-1_wp real ( wp ), parameter :: b109 = - 5.9395365635111487961513501386239991002220291711516275316770143453048494065657506474e-2_wp real ( wp ), parameter :: b111 = - 1.4741971530084051096783684495220401762953156744718612221415953506898842409410764394e0_wp real ( wp ), parameter :: b114 = - 1.0994004568773831856436455451565667915965033574293371252746458409074590501516335418e1_wp real ( wp ), parameter :: b115 = - 1.1347103595550558407033481028962542986773842505250429938230098582640399568841966955e1_wp real ( wp ), parameter :: b116 = 8.95698732805847648932199138433047040420587034365927857662263761085553916622223226594e0_wp real ( wp ), parameter :: b117 = 1.58937788726768491199870127047315726092390614749240868516326055420934681415123903105e1_wp real ( wp ), parameter :: b118 = - 9.8752574205231410895382886685088801840992767797867610760540167194860976207728613471e-2_wp real ( wp ), parameter :: b119 = 4.88850458495220344526104177023129683434865807354905894219062956659502007705067202486e-3_wp real ( wp ), parameter :: b1110 = - 4.0968137822510287105773140969344294040959548433844633187412729158670403045658227312e-3_wp real ( wp ), parameter :: b121 = - 2.6300593327636131335587362170718842216114396527353516008958114998659179172525086061e0_wp real ( wp ), parameter :: b124 = - 9.1742180511635168771961994716051325461520269343576437631118099519514590372371556623e0_wp real ( wp ), parameter :: b125 = - 1.9181392627635586309607750914002594644548673509102310272301267608284090817942461230e1_wp real ( wp ), parameter :: b126 = 1.46425586936966487212372354845143649157868001572824958943201356999170406197491766176e1_wp real ( wp ), parameter :: b127 = 1.75293194641808432064264792329037561372134510518264860784855289743130207876560918202e1_wp real ( wp ), parameter :: b128 = - 3.7191756017725564567993148040646183259986035050825855493662910931190949416983788302e-1_wp real ( wp ), parameter :: b129 = - 7.0099615383151451311120261802995845194696552530300984200157512415971100577511657140e-1_wp real ( wp ), parameter :: b1210 = 5.10160166123419814594373796567007747993680583372732066087135277690995003233586244844e-2_wp real ( wp ), parameter :: b1211 = 8.35689551081652570030668604041209869059346704560318853832715091573927364648452890489e-1_wp real ( wp ), parameter :: b131 = 2.15760322561474994411124388359746470315016189993958868463227784863178137907983232935e-1_wp real ( wp ), parameter :: b134 = 8.34514732667823366560737998962040201361659061600363822667194131727201870364735969189e0_wp real ( wp ), parameter :: b135 = 2.18566238546511021703127210271410825362935054094744855941151130759498192966438607636e0_wp real ( wp ), parameter :: b136 = - 1.6872364802758613307171751762566037387388156104034081739315755043398409544172643181e0_wp real ( wp ), parameter :: b137 = - 8.7118979009844764699498732005474293440649791305528456441763927818947185541425600579e0_wp real ( wp ), parameter :: b138 = 2.44414593429891254272241354773491646097520831036964631654327459178700700237090814351e-2_wp real ( wp ), parameter :: b139 = 8.46378799450539085004935994965690483699123804486085782773911124365252659256135973281e-2_wp real ( wp ), parameter :: b1310 = 5.43485007267475889689554161135858132263172930458903122118464018149985401390772696043e-1_wp real ( wp ), parameter :: c1 = 4.39177036443990264767390168245612938204165409329946310979955485867750206154532516854e-2_wp real ( wp ), parameter :: c6 = 3.51024625301198059003711947067197522471081955372891881652834064609672316461737698276e-1_wp real ( wp ), parameter :: c7 = 2.46142826354923978927496217611357561294520506174049687891933955470328003987048218576e-1_wp real ( wp ), parameter :: c8 = 9.00324493052912782292485743663086167980166191074574843765667123724307486893548248673e-1_wp real ( wp ), parameter :: c9 = 4.54941872725474687205992745995487359662269870465745627778562103310520198596208865435e0_wp real ( wp ), parameter :: c10 = 4.80250151923706131251435406595354490562463095633152715752232119918349986859035476853e-3_wp real ( wp ), parameter :: c11 = - 4.7410543521200460045854095885960988103202068879671787514735082136428459116707380269e0_wp real ( wp ), parameter :: c12 = - 3.5457652500737177548746515059093087677430164120112009787806583305262240211772839944e-1_wp real ( wp ), parameter :: d1 = 4.33210538122143048906481448990561225500794142960488184912531716454290716526337909125e-2_wp real ( wp ), parameter :: d6 = 3.38299786239324428483566710567298525845838208179552347378195505093356569277661366407e-1_wp real ( wp ), parameter :: d7 = 2.48479842819169689968723882111796748697722834015831878169551896051150521744166052704e-1_wp real ( wp ), parameter :: d8 = 2.23788296726381915717640915256391015765072451399129220461423268948426689142758885858e-1_wp real ( wp ), parameter :: d9 = - 4.0201628625024655295655283841782384327701940439930130919929624261829397741432866016e-2_wp real ( wp ), parameter :: d10 = 1.23292316936198306185965165238573766500855475391670951932862563960817353162350588140e-1_wp real ( wp ), parameter :: d13 = 6.30203320917360100491104657686662049681335571576969144866432185626491927618621819940e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 real ( wp ), parameter :: e12 = c12 real ( wp ), parameter :: e13 = - d13 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + h , x + h * ( b121 * f1 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + b128 * f8 + & b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + h , x + h * ( b131 * f1 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + b138 * f8 + & b139 * f9 + b1310 * f10 ), f13 ) xf = x + h * ( c1 * f1 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 ) xerr = h * ( e1 * f1 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 ) end associate end procedure rkev87 !***************************************************************************************** !***************************************************************************************** !> ! Fehlberg 8(9) method. ! !### Reference ! * E. Fehlberg, \"Classical Fifth-, Sixth-, Seventh-, and Eighth-Order ! Runge-Kutta Formulas with Stepsize Control\", ! [NASA TR R-2870](https://ntrs.nasa.gov/citations/19680027281). module procedure rkf89 real ( wp ), parameter :: a1 = 0.44368940376498183109599404281370_wp real ( wp ), parameter :: a2 = 0.66553410564747274664399106422055_wp real ( wp ), parameter :: a3 = 0.99830115847120911996598659633083_wp real ( wp ), parameter :: a4 = 0.3155_wp real ( wp ), parameter :: a5 = 0.50544100948169068626516126737384_wp real ( wp ), parameter :: a6 = 0.17142857142857142857142857142857_wp real ( wp ), parameter :: a7 = 0.82857142857142857142857142857143_wp real ( wp ), parameter :: a8 = 0.66543966121011562534953769255586_wp real ( wp ), parameter :: a9 = 0.24878317968062652069722274560771_wp real ( wp ), parameter :: a10 = 0.1090_wp real ( wp ), parameter :: a11 = 0.8910_wp real ( wp ), parameter :: a12 = 0.3995_wp real ( wp ), parameter :: a13 = 0.6005_wp real ( wp ), parameter :: a14 = 1.0_wp real ( wp ), parameter :: a16 = 1.0_wp real ( wp ), parameter :: b1 = 0.44368940376498183109599404281370_wp real ( wp ), parameter :: b20 = 0.16638352641186818666099776605514_wp real ( wp ), parameter :: b21 = 0.49915057923560455998299329816541_wp real ( wp ), parameter :: b30 = 0.24957528961780227999149664908271_wp real ( wp ), parameter :: b32 = 0.74872586885340683997448994724812_wp real ( wp ), parameter :: b40 = 0.20661891163400602426556710393185_wp real ( wp ), parameter :: b42 = 0.17707880377986347040380997288319_wp real ( wp ), parameter :: b43 = - 0.68197715413869494669377076815048e-1_wp real ( wp ), parameter :: b50 = 0.10927823152666408227903890926157_wp real ( wp ), parameter :: b53 = 0.40215962642367995421990563690087e-2_wp real ( wp ), parameter :: b54 = 0.39214118169078980444392330174325_wp real ( wp ), parameter :: b60 = 0.98899281409164665304844765434355e-1_wp real ( wp ), parameter :: b63 = 0.35138370227963966951204487356703e-2_wp real ( wp ), parameter :: b64 = 0.12476099983160016621520625872489_wp real ( wp ), parameter :: b65 = - 0.55745546834989799643742901466348e-1_wp real ( wp ), parameter :: b70 = - 0.36806865286242203724153101080691_wp real ( wp ), parameter :: b74 = - 0.22273897469476007645024020944166e+1_wp real ( wp ), parameter :: b75 = 0.13742908256702910729565691245744e+1_wp real ( wp ), parameter :: b76 = 0.20497390027111603002159354092206e+1_wp real ( wp ), parameter :: b80 = 0.45467962641347150077351950603349e-1_wp real ( wp ), parameter :: b85 = 0.32542131701589147114677469648853_wp real ( wp ), parameter :: b86 = 0.28476660138527908888182420573687_wp real ( wp ), parameter :: b87 = 0.97837801675979152435868397271099e-2_wp real ( wp ), parameter :: b90 = 0.60842071062622057051094145205182e-1_wp real ( wp ), parameter :: b95 = - 0.21184565744037007526325275251206e-1_wp real ( wp ), parameter :: b96 = 0.19596557266170831957464490662983_wp real ( wp ), parameter :: b97 = - 0.42742640364817603675144835342899e-2_wp real ( wp ), parameter :: b98 = 0.17434365736814911965323452558189e-1_wp real ( wp ), parameter :: b100 = 0.54059783296931917365785724111182e-1_wp real ( wp ), parameter :: b106 = 0.11029825597828926530283127648228_wp real ( wp ), parameter :: b107 = - 0.12565008520072556414147763782250e-2_wp real ( wp ), parameter :: b108 = 0.36790043477581460136384043566339e-2_wp real ( wp ), parameter :: b109 = - 0.57780542770972073040840628571866e-1_wp real ( wp ), parameter :: b110 = 0.12732477068667114646645181799160_wp real ( wp ), parameter :: b117 = 0.11448805006396105323658875721817_wp real ( wp ), parameter :: b118 = 0.28773020709697992776202201849198_wp real ( wp ), parameter :: b119 = 0.50945379459611363153735885079465_wp real ( wp ), parameter :: b1110 = - 0.14799682244372575900242144449640_wp real ( wp ), parameter :: b120 = - 0.36526793876616740535848544394333e-2_wp real ( wp ), parameter :: b125 = 0.81629896012318919777819421247030e-1_wp real ( wp ), parameter :: b126 = - 0.38607735635693506490517694343215_wp real ( wp ), parameter :: b127 = 0.30862242924605106450474166025206e-1_wp real ( wp ), parameter :: b128 = - 0.58077254528320602815829374733518e-1_wp real ( wp ), parameter :: b129 = 0.33598659328884971493143451362322_wp real ( wp ), parameter :: b1210 = 0.41066880401949958613549622786417_wp real ( wp ), parameter :: b1211 = - 0.11840245972355985520633156154536e-1_wp real ( wp ), parameter :: b130 = - 0.12375357921245143254979096135669e+1_wp real ( wp ), parameter :: b135 = - 0.24430768551354785358734861366763e+2_wp real ( wp ), parameter :: b136 = 0.54779568932778656050436528991173_wp real ( wp ), parameter :: b137 = - 0.44413863533413246374959896569346e+1_wp real ( wp ), parameter :: b138 = 0.10013104813713266094792617851022e+2_wp real ( wp ), parameter :: b139 = - 0.14995773102051758447170985073142e+2_wp real ( wp ), parameter :: b1310 = 0.58946948523217013620824539651427e+1_wp real ( wp ), parameter :: b1311 = 0.17380377503428984877616857440542e+1_wp real ( wp ), parameter :: b1312 = 0.27512330693166730263758622860276e+2_wp real ( wp ), parameter :: b140 = - 0.35260859388334522700502958875588_wp real ( wp ), parameter :: b145 = - 0.18396103144848270375044198988231_wp real ( wp ), parameter :: b146 = - 0.65570189449741645138006879985251_wp real ( wp ), parameter :: b147 = - 0.39086144880439863435025520241310_wp real ( wp ), parameter :: b148 = 0.26794646712850022936584423271209_wp real ( wp ), parameter :: b149 = - 0.10383022991382490865769858507427e+1_wp real ( wp ), parameter :: b1410 = 0.16672327324258671664727346168501e+1_wp real ( wp ), parameter :: b1411 = 0.49551925855315977067732967071441_wp real ( wp ), parameter :: b1412 = 0.11394001132397063228586738141784e+1_wp real ( wp ), parameter :: b1413 = 0.51336696424658613688199097191534e-1_wp real ( wp ), parameter :: b150 = 0.10464847340614810391873002406755e-2_wp real ( wp ), parameter :: b158 = - 0.67163886844990282237778446178020e-2_wp real ( wp ), parameter :: b159 = 0.81828762189425021265330065248999e-2_wp real ( wp ), parameter :: b1510 = - 0.42640342864483347277142138087561e-2_wp real ( wp ), parameter :: b1511 = 0.28009029474168936545976331153703e-3_wp real ( wp ), parameter :: b1512 = - 0.87835333876238676639057813145633e-2_wp real ( wp ), parameter :: b1513 = 0.10254505110825558084217769664009e-1_wp real ( wp ), parameter :: b160 = - 0.13536550786174067080442168889966e+1_wp real ( wp ), parameter :: b165 = - 0.18396103144848270375044198988231_wp real ( wp ), parameter :: b166 = - 0.65570189449741645138006879985251_wp real ( wp ), parameter :: b167 = - 0.39086144880439863435025520241310_wp real ( wp ), parameter :: b168 = 0.27466285581299925758962207732989_wp real ( wp ), parameter :: b169 = - 0.10464851753571915887035188572676e+1_wp real ( wp ), parameter :: b1610 = 0.16714967667123155012004488306588e+1_wp real ( wp ), parameter :: b1611 = 0.49523916825841808131186990740287_wp real ( wp ), parameter :: b1612 = 0.11481836466273301905225795954930e+1_wp real ( wp ), parameter :: b1613 = 0.41082191313833055603981327527525e-1_wp real ( wp ), parameter :: b1615 = 1.0_wp real ( wp ), parameter :: c0 = 0.32256083500216249913612900960247e-1_wp real ( wp ), parameter :: c8 = 0.25983725283715403018887023171963_wp real ( wp ), parameter :: c9 = 0.92847805996577027788063714302190e-1_wp real ( wp ), parameter :: c10 = 0.16452339514764342891647731842800_wp real ( wp ), parameter :: c11 = 0.17665951637860074367084298397547_wp real ( wp ), parameter :: c12 = 0.23920102320352759374108933320941_wp real ( wp ), parameter :: c13 = 0.39484274604202853746752118829325e-2_wp real ( wp ), parameter :: c14 = 0.30726495475860640406368305522124e-1_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 )) call me % f ( t , x , f0 ) call me % f ( t + h * a1 , x + f0 * b1 * h , f1 ) call me % f ( t + h * a2 , x + ( f0 * b20 + f1 * b21 ) * h , f2 ) call me % f ( t + h * a3 , x + ( f0 * b30 + f2 * b32 ) * h , f3 ) call me % f ( t + h * a4 , x + ( f0 * b40 + f2 * b42 + f3 * b43 ) * h , f4 ) call me % f ( t + h * a5 , x + ( f0 * b50 + f3 * b53 + f4 * b54 ) * h , f5 ) call me % f ( t + h * a6 , x + ( f0 * b60 + f3 * b63 + f4 * b64 + f5 * b65 ) * h , f6 ) call me % f ( t + h * a7 , x + ( f0 * b70 + f4 * b74 + f5 * b75 + f6 * b76 ) * h , f7 ) call me % f ( t + h * a8 , x + ( f0 * b80 + f5 * b85 + f6 * b86 + f7 * b87 ) * h , f8 ) call me % f ( t + h * a9 , x + ( f0 * b90 + f5 * b95 + f6 * b96 + f7 * b97 + f8 * b98 ) * h , f9 ) call me % f ( t + h * a10 , x + ( f0 * b100 + f6 * b106 + f7 * b107 + f8 * b108 + & f9 * b109 ) * h , f10 ) call me % f ( t + h * a11 , x + ( f0 * b110 + f7 * b117 + f8 * b118 + f9 * b119 + & f10 * b1110 ) * h , f11 ) call me % f ( t + h * a12 , x + ( f0 * b120 + f5 * b125 + f6 * b126 + f7 * b127 + & f8 * b128 + f9 * b129 + f10 * b1210 + f11 * b1211 ) * h , f12 ) call me % f ( t + h * a13 , x + ( f0 * b130 + f5 * b135 + f6 * b136 + f7 * b137 + & f8 * b138 + f9 * b139 + f10 * b1310 + f11 * b1311 + f12 * b1312 ) * h , f13 ) call me % f ( t + h * a14 , x + ( f0 * b140 + f5 * b145 + f6 * b146 + f7 * b147 + f8 * b148 + & f9 * b149 + f10 * b1410 + f11 * b1411 + f12 * b1412 + f13 * b1413 ) * h , f14 ) call me % f ( t , x + ( f0 * b150 + f8 * b158 + f9 * b159 + f10 * b1510 + f11 * b1511 + & f12 * b1512 + f13 * b1513 ) * h , f15 ) call me % f ( t + h * a16 , x + ( f0 * b160 + f5 * b165 + f6 * b166 + f7 * b167 + f8 * b168 + & f9 * b169 + f10 * b1610 + f11 * b1611 + f12 * b1612 + f13 * b1613 + & f15 * b1615 ) * h , f16 ) xf = x + h * ( f0 * c0 + f8 * c8 + f9 * c9 + f10 * c10 + f11 * c11 + f12 * c12 + f13 * c13 + f14 * c14 ) xerr = c14 * h * ( f0 + f14 - f15 - f16 ) end associate end procedure rkf89 !***************************************************************************************** !***************************************************************************************** !> ! Runge Kutta Verner 8(9) ! !### Reference ! * J. H. Verner, \"Explicit Runge-Kutta Methods with Estimates of the ! Local Truncation Error\", SIAM Journal on Numerical Analysis, ! 15(4), 772-790, 1978. module procedure rkv89 real ( wp ), parameter :: s6 = sqrt ( 6.0_wp ) real ( wp ), parameter :: a2 = 1.0_wp / 1 2.0_wp real ( wp ), parameter :: a3 = 1.0_wp / 9.0_wp real ( wp ), parameter :: a4 = 1.0_wp / 6.0_wp real ( wp ), parameter :: a5 = 2.0_wp * ( 1.0_wp + s6 ) / 1 5.0_wp real ( wp ), parameter :: a6 = ( 6.0_wp + s6 ) / 1 5.0_wp real ( wp ), parameter :: a7 = ( 6.0_wp - s6 ) / 1 5.0_wp real ( wp ), parameter :: a8 = 2.0_wp / 3.0_wp real ( wp ), parameter :: a9 = 1.0_wp / 2.0_wp real ( wp ), parameter :: a10 = 1.0_wp / 3.0_wp real ( wp ), parameter :: a11 = 1.0_wp / 4.0_wp real ( wp ), parameter :: a12 = 4.0_wp / 3.0_wp real ( wp ), parameter :: a13 = 5.0_wp / 6.0_wp real ( wp ), parameter :: a15 = 1.0_wp / 6.0_wp real ( wp ), parameter :: b31 = 1.0_wp / 2 7.0_wp real ( wp ), parameter :: b32 = 2.0_wp / 2 7.0_wp real ( wp ), parameter :: b41 = 1.0_wp / 2 4.0_wp real ( wp ), parameter :: b43 = 3.0_wp / 2 4.0_wp real ( wp ), parameter :: b51 = ( 4.0_wp + 9 4.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b53 = - ( 28 2.0_wp + 25 2.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b54 = ( 32 8.0_wp + 20 8.0_wp * s6 ) / 37 5.0_wp real ( wp ), parameter :: b61 = ( 9.0_wp - s6 ) / 15 0.0_wp real ( wp ), parameter :: b64 = ( 31 2.0_wp + 3 2.0_wp * s6 ) / 142 5.0_wp real ( wp ), parameter :: b65 = ( 6 9.0_wp + 2 9.0_wp * s6 ) / 57 0.0_wp real ( wp ), parameter :: b71 = ( 92 7.0_wp - 34 7.0_wp * s6 ) / 125 0.0_wp real ( wp ), parameter :: b74 = ( - 1624 8.0_wp + 732 8.0_wp * s6 ) / 937 5.0_wp real ( wp ), parameter :: b75 = ( - 48 9.0_wp + 17 9.0_wp * s6 ) / 375 0.0_wp real ( wp ), parameter :: b76 = ( 1426 8.0_wp - 579 8.0_wp * s6 ) / 937 5.0_wp real ( wp ), parameter :: b81 = 4.0_wp / 5 4.0_wp real ( wp ), parameter :: b86 = ( 1 6.0_wp - s6 ) / 5 4.0_wp real ( wp ), parameter :: b87 = ( 1 6.0_wp + s6 ) / 5 4.0_wp real ( wp ), parameter :: b91 = 3 8.0_wp / 51 2.0_wp real ( wp ), parameter :: b96 = ( 11 8.0_wp - 2 3.0_wp * s6 ) / 51 2.0_wp real ( wp ), parameter :: b97 = ( 11 8.0_wp + 2 3.0_wp * s6 ) / 51 2.0_wp real ( wp ), parameter :: b98 = - 1 8.0_wp / 51 2.0_wp real ( wp ), parameter :: b101 = 1 1.0_wp / 14 4.0_wp real ( wp ), parameter :: b106 = ( 26 6.0_wp - s6 ) / 86 4.0_wp real ( wp ), parameter :: b107 = ( 26 6.0_wp + s6 ) / 86 4.0_wp real ( wp ), parameter :: b108 = - 1.0_wp / 1 6.0_wp real ( wp ), parameter :: b109 = - 8.0_wp / 2 7.0_wp real ( wp ), parameter :: b111 = ( 503 4.0_wp - 27 1.0_wp * s6 ) / 6144 0.0_wp real ( wp ), parameter :: b117 = ( 785 9.0_wp - 162 6.0_wp * s6 ) / 1024 0.0_wp real ( wp ), parameter :: b118 = ( - 223 2.0_wp + 81 3.0_wp * s6 ) / 2048 0.0_wp real ( wp ), parameter :: b119 = ( - 59 4.0_wp + 27 1.0_wp * s6 ) / 96 0.0_wp real ( wp ), parameter :: b1110 = ( 65 7.0_wp - 81 3.0_wp * s6 ) / 512 0.0_wp real ( wp ), parameter :: b121 = ( 599 6.0_wp - 379 4.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b126 = ( - 434 2.0_wp - 33 8.0_wp * s6 ) / 9.0_wp real ( wp ), parameter :: b127 = ( 15492 2.0_wp - 4045 8.0_wp * s6 ) / 13 5.0_wp real ( wp ), parameter :: b128 = ( - 417 6.0_wp + 379 4.0_wp * s6 ) / 4 5.0_wp real ( wp ), parameter :: b129 = ( - 34086 4.0_wp + 24281 6.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b1210 = ( 2630 4.0_wp - 1517 6.0_wp * s6 ) / 4 5.0_wp real ( wp ), parameter :: b1211 = - 2662 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b131 = ( 379 3.0_wp + 216 8.0_wp * s6 ) / 10368 0.0_wp real ( wp ), parameter :: b136 = ( 404 2.0_wp + 226 3.0_wp * s6 ) / 1382 4.0_wp real ( wp ), parameter :: b137 = ( - 23127 8.0_wp + 4071 7.0_wp * s6 ) / 6912 0.0_wp real ( wp ), parameter :: b138 = ( 794 7.0_wp - 216 8.0_wp * s6 ) / 1152 0.0_wp real ( wp ), parameter :: b139 = ( 104 8.0_wp - 54 2.0_wp * s6 ) / 40 5.0_wp real ( wp ), parameter :: b1310 = ( - 138 3.0_wp + 54 2.0_wp * s6 ) / 72 0.0_wp real ( wp ), parameter :: b1311 = 262 4.0_wp / 105 3.0_wp real ( wp ), parameter :: b1312 = 3.0_wp / 166 4.0_wp real ( wp ), parameter :: b141 = - 13 7.0_wp / 129 6.0_wp real ( wp ), parameter :: b146 = ( 564 2.0_wp - 33 7.0_wp * s6 ) / 86 4.0_wp real ( wp ), parameter :: b147 = ( 564 2.0_wp + 33 7.0_wp * s6 ) / 86 4.0_wp real ( wp ), parameter :: b148 = - 29 9.0_wp / 4 8.0_wp real ( wp ), parameter :: b149 = 18 4.0_wp / 8 1.0_wp real ( wp ), parameter :: b1410 = - 4 4.0_wp / 9.0_wp real ( wp ), parameter :: b1411 = - 512 0.0_wp / 105 3.0_wp real ( wp ), parameter :: b1412 = - 1 1.0_wp / 46 8.0_wp real ( wp ), parameter :: b1413 = 1 6.0_wp / 9.0_wp real ( wp ), parameter :: b151 = ( 3361 7.0_wp - 216 8.0_wp * s6 ) / 51840 0.0_wp real ( wp ), parameter :: b156 = ( - 384 6.0_wp + 3 1.0_wp * s6 ) / 1382 4.0_wp real ( wp ), parameter :: b157 = ( 15533 8.0_wp - 5280 7.0_wp * s6 ) / 34560 0.0_wp real ( wp ), parameter :: b158 = ( - 1253 7.0_wp + 216 8.0_wp * s6 ) / 5760 0.0_wp real ( wp ), parameter :: b159 = ( 9 2.0_wp + 54 2.0_wp * s6 ) / 202 5.0_wp real ( wp ), parameter :: b1510 = ( - 179 7.0_wp - 54 2.0_wp * s6 ) / 360 0.0_wp real ( wp ), parameter :: b1511 = 32 0.0_wp / 56 7.0_wp real ( wp ), parameter :: b1512 = - 1.0_wp / 192 0.0_wp real ( wp ), parameter :: b1513 = 4.0_wp / 10 5.0_wp real ( wp ), parameter :: b161 = ( - 3648 7.0_wp - 3035 2.0_wp * s6 ) / 27960 0.0_wp real ( wp ), parameter :: b166 = ( - 2966 6.0_wp - 449 9.0_wp * s6 ) / 745 6.0_wp real ( wp ), parameter :: b167 = ( 277918 2.0_wp - 61597 3.0_wp * s6 ) / 18640 0.0_wp real ( wp ), parameter :: b168 = ( - 9432 9.0_wp + 9105 6.0_wp * s6 ) / 9320 0.0_wp real ( wp ), parameter :: b169 = ( - 23219 2.0_wp + 12140 8.0_wp * s6 ) / 1747 5.0_wp real ( wp ), parameter :: b1610 = ( 10122 6.0_wp - 2276 4.0_wp * s6 ) / 582 5.0_wp real ( wp ), parameter :: b1611 = - 16998 4.0_wp / 908 7.0_wp real ( wp ), parameter :: b1612 = - 8 7.0_wp / 3029 0.0_wp real ( wp ), parameter :: b1613 = 49 2.0_wp / 116 5.0_wp real ( wp ), parameter :: b1615 = 126 0.0_wp / 23 3.0_wp real ( wp ), parameter :: c1 = 10 3.0_wp / 168 0.0_wp real ( wp ), parameter :: c8 = - 2 7.0_wp / 14 0.0_wp real ( wp ), parameter :: c9 = 7 6.0_wp / 10 5.0_wp real ( wp ), parameter :: c10 = - 20 1.0_wp / 28 0.0_wp real ( wp ), parameter :: c11 = 102 4.0_wp / 136 5.0_wp real ( wp ), parameter :: c12 = 3.0_wp / 728 0.0_wp real ( wp ), parameter :: c13 = 1 2.0_wp / 3 5.0_wp real ( wp ), parameter :: c14 = 9.0_wp / 28 0.0_wp real ( wp ), parameter :: e1 = - 191 1.0_wp / 10920 0.0_wp real ( wp ), parameter :: e8 = 3439 8.0_wp / 10920 0.0_wp real ( wp ), parameter :: e9 = - 6115 2.0_wp / 10920 0.0_wp real ( wp ), parameter :: e10 = 11466 0.0_wp / 10920 0.0_wp real ( wp ), parameter :: e11 = - 11468 8.0_wp / 10920 0.0_wp real ( wp ), parameter :: e12 = - 6 3.0_wp / 10920 0.0_wp real ( wp ), parameter :: e13 = - 1310 4.0_wp / 10920 0.0_wp real ( wp ), parameter :: e14 = - 351 0.0_wp / 10920 0.0_wp real ( wp ), parameter :: e15 = 3931 2.0_wp / 10920 0.0_wp real ( wp ), parameter :: e16 = 605 8.0_wp / 10920 0.0_wp associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( a2 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + & b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + & b1511 * f11 + b1512 * f12 + b1513 * f13 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + & b1611 * f11 + b1612 * f12 + b1613 * f13 + b1615 * f15 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkv89 !***************************************************************************************** !***************************************************************************************** !> ! Tsitouras combined order 9(8) Runge-Kutta scheme A. ! !### Reference ! * Ch. Tsitouras, \"Optimized explicit Runge-Kutta pairs of order 9(8)\", ! Applied Numerical Mathematics, 38 (2001) 123-134. ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK9/RKcoeff9b_1.pdf) module procedure rkt98a real ( wp ), parameter :: a2 = . 204081632653061224489795918367346938775510204081632653061224489795918367346938775510 2e-1_wp real ( wp ), parameter :: a3 = . 881329391499810300863791593924151123085812117736908664603226557868277361675571063543 0e-1_wp real ( wp ), parameter :: a4 = . 1321994087249715451295687390886226684628718176605362996904839836802416042513356595314_wp real ( wp ), parameter :: a5 = . 4285714285714285714285714285714285714285714285714285714285714285714285714285714285714_wp real ( wp ), parameter :: a6 = . 5364755392243287681395100999813264375851395225813758811703296868095847858703057159708_wp real ( wp ), parameter :: a7 = . 2254292226804331366223946619234354671767652393233860235915750750951771188915990459340_wp real ( wp ), parameter :: a8 = . 6349206349206349206349206349206349206349206349206349206349206349206349206349206349206_wp real ( wp ), parameter :: a9 = . 4761904761904761904761904761904761904761904761904761904761904761904761904761904761905_wp real ( wp ), parameter :: a10 = 1.055555555555555555555555555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a11 = . 7777777777777777777777777777777777777777777777777777777777777777777777777777777777778_wp real ( wp ), parameter :: a12 = . 1474169624260994760478401587101660956180420042646161803585052367559161448324216358210_wp real ( wp ), parameter :: a13 = . 9375_wp real ( wp ), parameter :: a14 = . 975_wp real ( wp ), parameter :: b21 = . 204081632653061224489795918367346938775510204081632653061224489795918367346938775510 2e-1_wp real ( wp ), parameter :: b31 = - . 1021687274487683147769723606535303770211896504959152824720881616958241197178852529434_wp real ( wp ), parameter :: b32 = . 1903016665987493448633515200459454893297708622696061489324108174826518558854423592977_wp real ( wp ), parameter :: b41 = . 330498521812428862823921847721556671157179544151340749226209959200604010628339148828 6e-1_wp real ( wp ), parameter :: b43 = . 991495565437286588471765543164670013471538632454022247678629877601812031885017446485 8e-1_wp real ( wp ), parameter :: b51 = . 9439263832171291883556670672811977550046744677129090342789268623214132543830715838461_wp real ( wp ), parameter :: b53 = - 3.630115063093482037077114300073110289641773922761700400575782997067611129391489310214_wp real ( wp ), parameter :: b54 = 3.114760108447781420150018661363341106065670883620219937725427563317626446436989154939_wp real ( wp ), parameter :: b61 = . 205692332861626171178284855640856652230036298375380298403785842739020476295782606761 4e-1_wp real ( wp ), parameter :: b64 = . 2604824183197402987552340723087785980849282464799395547519553603229784733524946656053_wp real ( wp ), parameter :: b65 = . 2554238876184258522664475421084621742772076462638982965779957422127042648882327896893_wp real ( wp ), parameter :: b71 = . 431848370510926302883519425575866900000132380422068978367176934329861651640372635525 2e-1_wp real ( wp ), parameter :: b74 = . 1769284839807689645520842945002498666673573450203833044058383710943493957801668363127_wp real ( wp ), parameter :: b75 = . 771541462187698379431579576727171596732744815738902402125638279015690738504392303475 5e-2_wp real ( wp ), parameter :: b76 = - . 239951297330544201235737090167280545793279189659320267223737222231534943764897696599 0e-2_wp real ( wp ), parameter :: b81 = . 705467372134038800705467372134038800705467372134038800705467372134038800705467372134 0e-1_wp real ( wp ), parameter :: b86 = . 2389860715558522381270320269011306632810238539566724845073599194488366776462554669041_wp real ( wp ), parameter :: b87 = . 3253878261513788024373418708061003772833500437505585560570139782583943629181184308032_wp real ( wp ), parameter :: b91 = . 706845238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: b96 = . 1146981694865827822571846471014964620252663838260725205469644176957364421846758824211_wp real ( wp ), parameter :: b97 = . 3242899257515124558380534481365987760699717114120227175482736775423587959105622128170_wp real ( wp ), parameter :: b98 = - . 334821428571428571428571428571428571428571428571428571428571428571428571428571428571 4e-1_wp real ( wp ), parameter :: b101 = . 3828039568865740740740740740740740740740740740740740740740740740740740740740740740741_wp real ( wp ), parameter :: b106 = - 2 6.28104570763124221540974003468081947028606261133704083478349807677632293296095495655_wp real ( wp ), parameter :: b107 = - 1.748424643449004698170506878899427443294184302243206078796748836803923980619291957032_wp real ( wp ), parameter :: b108 = 8.7107466796875_wp real ( wp ), parameter :: b109 = 1 9.99147527006172839506172839506172839506172839506172839506172839506172839506172839506_wp real ( wp ), parameter :: b111 = . 577578890528468904236566043524326358845924311233659002300157700523052758125109092093 9e-1_wp real ( wp ), parameter :: b116 = . 76_wp real ( wp ), parameter :: b117 = . 4018553287915560050245043972333732847203199147775749045996022855946715894896836169645_wp real ( wp ), parameter :: b118 = . 662658962606279885409907729324041643285414266080101534129138171351881264741719599847 8e-1_wp real ( wp ), parameter :: b119 = - . 5150696954976787388652658281684056884304318728657759205657506333922693112630203285629_wp real ( wp ), parameter :: b1110 = . 696835917042563265389183142797338127475587813460274010099653838788209726443162018202 3e-2_wp real ( wp ), parameter :: b121 = . 699410303590639571568648959758215002260083899978403465631389356931799737435130859164 5e-1_wp real ( wp ), parameter :: b126 = - . 1206166060565470490794750098024428160239891793653556676806869026855595723414769418541_wp real ( wp ), parameter :: b127 = . 1326963017314458683010911057621835709637828919128544554925159376674464191887834137030_wp real ( wp ), parameter :: b128 = . 2031532538077627922059108299487811850373691592058111305356962697560067377203999264697_wp real ( wp ), parameter :: b129 = - . 754864017502388946717723113790252428097011541759511397509420865392276587589345060488 9e-1_wp real ( wp ), parameter :: b1210 = . 378910368643901129564314061820514011055844512791820692999455514721768225183265019059 6e-2_wp real ( wp ), parameter :: b1211 = - . 660597193518262091604224924133572418859865484385011517312114722831474369716959925557 2e-1_wp real ( wp ), parameter :: b131 = . 6878836016002817993752515099013030041019173079702440987327706356852301558017737433194_wp real ( wp ), parameter :: b136 = - 3.658808527366451517196946897056976218504208192589081007775064092270089158621094491595_wp real ( wp ), parameter :: b137 = 5.845503378564669890314102776059891925747966958611333131112559317698644813283634646256_wp real ( wp ), parameter :: b138 = 5.411412752004688858844863696709300082070631013287790747126942423884017249319289413984_wp real ( wp ), parameter :: b139 = - 1.582095988269673568992894109712396974043574141076643374159775089066374202615336309544_wp real ( wp ), parameter :: b1310 = . 994524886570629966778884663541958563480091885847213143911801635213045280598317853297 5e-1_wp real ( wp ), parameter :: b1311 = - 1.329593487105234404098771549303922926244482088345956610970650644487259700977298059950_wp real ( wp ), parameter :: b1312 = - 4.536254218085344054923493892951394749476260046442408298457962714965473684250800727799_wp real ( wp ), parameter :: b141 = . 8075602959459265637003617465986992156750424242709811245269878174761587489984770070790_wp real ( wp ), parameter :: b146 = - 7.835750139557992772198249358151231578755580407654683121798887409512496231362858547948_wp real ( wp ), parameter :: b147 = 6.174200025941229770123184423146954177664197990793732802584504944027199598185299195828_wp real ( wp ), parameter :: b148 = 7.111311052783799148723822283846058963658585479679811643355604800924488305671070483858_wp real ( wp ), parameter :: b149 = 1.126413982652184268358560776506518924191271296281999997786352511455840556312961264408_wp real ( wp ), parameter :: b1410 = . 1138838501589788637237573235699770016403876336825059128989257049544545698305937427348_wp real ( wp ), parameter :: b1411 = - 1.434774678607913207528871735039082294103761283429995473644501054462770211806990144762_wp real ( wp ), parameter :: b1412 = - 5.064314742122892898464863809545209351959607473464534474081890709755483907888716564210_wp real ( wp ), parameter :: b1413 = - . 235296471933197364377016509326850580105356601598184116270966051073914279398364369868 1e-1_wp real ( wp ), parameter :: b151 = . 8101674645254722523232876762637530370910583262175105775933018316393086542069855754015_wp real ( wp ), parameter :: b156 = - 1 1.92841245677955898272791316012006359130670880301152754325896491950568584401093883276_wp real ( wp ), parameter :: b157 = 5.364312898490360554625912421385267920693980736534035810795373384314434259846321616737_wp real ( wp ), parameter :: b158 = 8.059954459759511795757228635532122933456240951117021423047033797467500489813129448587_wp real ( wp ), parameter :: b159 = 4.618063439001721483758160286714057772615332315540952842312029459375380582946251202099_wp real ( wp ), parameter :: b1510 = . 1128601659181894505188796244218558774756228116520111404880300475877949274532116052613_wp real ( wp ), parameter :: b1511 = - 1.315207706945002903017387913180865178001333874822374203640801449667142626811434784416_wp real ( wp ), parameter :: b1512 = - 4.689892399903609125554297739238443813841792924181292032608257980483530407060762654113_wp real ( wp ), parameter :: b1513 = . 672137455432968165303624035800193639281962414042823027684175434586986633868191583703 6e-2_wp real ( wp ), parameter :: b1514 = - . 385672386214142073369060721356868945752191631867662450045859250739299027214450926334 4e-1_wp real ( wp ), parameter :: b161 = . 7081867006810967019347772392865651712376321476396730568850847595024088622008058350820_wp real ( wp ), parameter :: b166 = - 1 1.35112404359189673946143658241126665471485966274613155801176412146453899273199024599_wp real ( wp ), parameter :: b167 = 4.439836852763619566651386303128039432194840880353792439043045399385549660055953598204_wp real ( wp ), parameter :: b168 = 7.160528966855846780330688332694210230082237210593958603950542885510151860241609708315_wp real ( wp ), parameter :: b169 = 4.944752289066181389539519911976094691889352151362799884071179481037363375554630307368_wp real ( wp ), parameter :: b1610 = . 981953561086798742592703501940555170116801219719398366833846605007653188488342792932 0e-1_wp real ( wp ), parameter :: b1611 = - 1.023835739158951766446520340031695827655784562575140398451539531509310691718294156648_wp real ( wp ), parameter :: b1612 = - 3.935185699031579433419722235418354733643010565663948821548988100702690247383937415641_wp real ( wp ), parameter :: b1613 = - . 218626037455164619891723846941877166294185608905101974079563124169593376589851617246 1e-1_wp real ( wp ), parameter :: b1614 = - . 194920799474799113987905947234601097726691600464328452129891198427398074086267482594 0e-1_wp real ( wp ), parameter :: c1 = . 415355600880595916889589892186720192145913255567255167164392084889257990539494502703 3e-1_wp real ( wp ), parameter :: c8 = - . 4252280874169805589327845543703559909471287347438636516704849004566228405918914211737_wp real ( wp ), parameter :: c9 = . 4911269629417608841870622286295630148000839362387724323042417629187646342598357379221_wp real ( wp ), parameter :: c10 = . 4541782417588474254373676812638040365345450854512311037987257309434313503153553995250_wp real ( wp ), parameter :: c11 = 1.006032649094428065183781872196896559026233580812897577690817173850511464781870422371_wp real ( wp ), parameter :: c12 = . 2396980714287725918428584296767300637015778481901015943085981245718488414129283930348_wp real ( wp ), parameter :: c13 = - 4.455491297731407466229188603532881977410859597554953958343743900169006073451667494575_wp real ( wp ), parameter :: c14 = 9.288978775706101824452250592593505318906312756833224753343846524732597445318251252011_wp real ( wp ), parameter :: c15 = - 6.410061645100351588399537404906702274594586970014904598917670494111219851867862508616_wp real ( wp ), parameter :: c16 = . 7692307692307692307692307692307692307692307692307692307692307692307692307692307692308_wp real ( wp ), parameter :: d1 = . 399925013410431153908647389585527432542745264600019810022984242971375057405267468334 8e-1_wp real ( wp ), parameter :: d8 = . 401132578858454596437972704044863001469581177577073836096352120050010438505034064394 4e-1_wp real ( wp ), parameter :: d9 = . 3925127095625233142417946847596602750245079278580359243007567443309335209235627547386_wp real ( wp ), parameter :: d10 = - 1.051197094764485752167499211132792259622314942028765288915320450078532078636064340575_wp real ( wp ), parameter :: d11 = - . 2505083298864024791053208779904093804217869849340728193482139880406203405457882973484_wp real ( wp ), parameter :: d12 = . 2465428288939690633785173766277520619424499467256191777438442341744800285916120244248_wp real ( wp ), parameter :: d13 = 6.839965112378725948727677787215511467384166222758213034610265848044786251996046243769_wp real ( wp ), parameter :: d14 = - 1 6.02665175464198790087906253807353043847748558382750862377249679396395516268962930751_wp real ( wp ), parameter :: d15 = 1 0.0_wp real ( wp ), parameter :: d16 = . 7692307692307692307692307692307692307692307692307692307692307692307692307692307692308_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + & b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + & b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + b1410 * f10 + & b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rkt98a !***************************************************************************************** !***************************************************************************************** !> ! Sharp 9(8) ! !### Reference ! * Philip W. Sharp, \"High order explicit Runge-Kutta pairs for ephemerides of the Solar System and the Moon\", ! Journal of Applied Mathematics & Decision Sciences, 4(2), 183-192 (2000), ! * https://github.com/SciML/DiffEqDevTools.jl/blob/master/src/ode_tableaus.jl ! !@note The floating point coefficients here were generated from the rational ones from the 2nd reference. module procedure rks98 real ( wp ), parameter :: a2 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: a3 = 9.66220283800537781651565568869531890039129854640901213159807057025513165826690659288e-2_wp real ( wp ), parameter :: a4 = 1.44933042570080667247734835330429783505869478196135181973971058553826974874003598893e-1_wp real ( wp ), parameter :: a5 = 3.11111111111111111111111111111111111111111111111111111111111111111111111111111111111e-1_wp real ( wp ), parameter :: a6 = 3.51498773299780208885007017507765081905783415195317477342800010797639951702224305104e-1_wp real ( wp ), parameter :: a7 = 1.47701226700219791114992982492234918094216584804682522657199989202360048297775694896e-1_wp real ( wp ), parameter :: a8 = 4.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a9 = 3.12000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a10 = 1.05000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: a11 = 5.87002096436058700209643605870020964360587002096436058700209643605870020964360587002e-1_wp real ( wp ), parameter :: a12 = 6.83818495973559057197009883791356922634313147538567178788853669325746483233925079300e-1_wp real ( wp ), parameter :: a13 = 8.79003558718861209964412811387900355871886120996441281138790035587188612099644128114e-1_wp real ( wp ), parameter :: a14 = 9.16000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b21 = 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b31 = - 1.3677338082684416521484257374903677512719677066274978006646616817250635870287502595e-1_wp real ( wp ), parameter :: b32 = 2.33395409206897943379999130635989964131109756126839901382446873875057675285544091877e-1_wp real ( wp ), parameter :: b41 = 3.62332606425201668119337088326074458764673695490337954934927646384567437185008997233e-2_wp real ( wp ), parameter :: b43 = 1.08699781927560500435801126497822337629402108647101386480478293915370231155502699170e-1_wp real ( wp ), parameter :: b51 = 1.93101200330205381129632393375249728863798118161035750556803447904498441444456645259e-1_wp real ( wp ), parameter :: b53 = - 6.4770998560312388589569152951216097849732130945128175207869408225841451367147303820e-1_wp real ( wp ), parameter :: b54 = 7.65719896384029615877170247248022360744634302401357112633001745465027183338127504049e-1_wp real ( wp ), parameter :: b61 = 4.77439440833806232500188714529354943400951843563751259289256424427344686758530074484e-2_wp real ( wp ), parameter :: b64 = 1.96932175795354826650179476488669790168656892603887237546677770684075728220363810345e-1_wp real ( wp ), parameter :: b65 = 1.06822653421044758984808669566159797397031338235055113867196597670829754806007487311e-1_wp real ( wp ), parameter :: b71 = 5.35653520740100302121103332775188587103176832181869303040831220432325640950516524391e-2_wp real ( wp ), parameter :: b74 = 1.20625588947728919056244246899316675798038285391744744331826391017415590396850177402e-1_wp real ( wp ), parameter :: b75 = - 6.7750756225149701080673518583857606163917837693866673698932599085495183512419090449e-2_wp real ( wp ), parameter :: b76 = 4.12610419036305429273119208992569897497784538886175217202230752272070773182929555031e-2_wp real ( wp ), parameter :: b81 = 4.62222222222222222222222222222222222222222222222222222222222222222222222222222222222e-2_wp real ( wp ), parameter :: b86 = 1.56583674083394386420831384025620810581726829112411811849222219222877791193826581916e-1_wp real ( wp ), parameter :: b87 = 2.13194103694383391356946393752156967196050948665365965928555558554899986583951195862e-1_wp real ( wp ), parameter :: b91 = 4.63125000000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b96 = 7.51502406476090389349073807809004819189545346828427154623710864742465169193996381623e-2_wp real ( wp ), parameter :: b97 = 2.12474759352390961065092619219099518081045465317157284537628913525753483080600361838e-1_wp real ( wp ), parameter :: b98 = - 2.1937500000000000000000000000000000000000000000000000000000000000000000000000000000e-2_wp real ( wp ), parameter :: b101 = 4.71370805167570855745159483211372150835054795000175063898322887854066734358040684850e-2_wp real ( wp ), parameter :: b106 = 2.09088767177245700619002712371830037495557938247264604576291946948488435273048771651e-1_wp real ( wp ), parameter :: b107 = 1.00170199845336072001441249674316806102355300084726572203232579503666601315305977833e-1_wp real ( wp ), parameter :: b108 = - 4.1746535935132619792943174258604390602569938027379993697699660376037253597563110535e-2_wp real ( wp ), parameter :: b109 = - 2.0964951160420623840201673610867966807884877980462868947165715486152445642659570743e-1_wp real ( wp ), parameter :: b111 = 9.62506254804954308501791978456184013295337530291135748904639061412584879741027523020e-2_wp real ( wp ), parameter :: b116 = - 3.2889823940483436676586225555059183413399004899899513082733172247062419719368801086e0_wp real ( wp ), parameter :: b117 = 1.58120592819482939980472941802825082360990331356773185743485106618875616830910113284e-1_wp real ( wp ), parameter :: b118 = 1.38472174110756949611966846419084262312633249684929784010383708600379765979254809143e0_wp real ( wp ), parameter :: b119 = 2.38689153107685450091794555753665319888363091085120276623574076954818022830367973855e0_wp real ( wp ), parameter :: b1110 = - 1.5000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1_wp real ( wp ), parameter :: b121 = - 4.1407181780829333826951338677923830282957788550316015757490123469403067795923041646e-1_wp real ( wp ), parameter :: b126 = 2.79362329285576366638884698134000509392713675687003189893845038096478481618920557795e0_wp real ( wp ), parameter :: b127 = - 3.9420148894844370214218382106635188284591903158605020970611433089765204398968285433e0_wp real ( wp ), parameter :: b128 = - 1.8050833493703232778218655623536664178736717202844850014226094729833601601906484738e0_wp real ( wp ), parameter :: b129 = - 8.2411175299103457871280197945625000732690195817565658068273621079502124203745163579e-2_wp real ( wp ), parameter :: b1210 = 3.76724363839931467375143823390080271058360595326428259518770377058250406454692000855e0_wp real ( wp ), parameter :: b1211 = 3.66532796680637812441222026292597668018700554869965598789627155511871004748252089945e-1_wp real ( wp ), parameter :: b131 = 2.57118803244482153847626462807856681730780184786345438393372906485058163365316011894e-1_wp real ( wp ), parameter :: b136 = 3.22367498544415690028414563287198307551779583958713835991093894064695605463707833852e0_wp real ( wp ), parameter :: b137 = 3.95644809715768343577645732188103093651324923567481376817610794743631132119165042871e0_wp real ( wp ), parameter :: b138 = 1.90269610866406552179805731106267938194469931412329236667880503143330311252532589886e0_wp real ( wp ), parameter :: b139 = - 5.2391055401717914982701824261828721839527015786103641427597273886467794920713496236e0_wp real ( wp ), parameter :: b1310 = - 2.6899481313272987041207973348420457663574444684767403019558990390373975528574973750e0_wp real ( wp ), parameter :: b1311 = - 1.6326510182468950685438619936368781848861272140333241607130497353632849427158674841e0_wp real ( wp ), parameter :: b1312 = 1.10077025395445846919296783742614641536163480794527995340824137263302194802498793285e0_wp real ( wp ), parameter :: b141 = 4.08583369788787674770196821641246834353608695949114599877074475305978651235285469124e0_wp real ( wp ), parameter :: b146 = - 2.2271040812705511368267126642675337195508778742206509440033684681620630123740836983e1_wp real ( wp ), parameter :: b147 = 2.14948200377041255968873743962135304520531006690258805591495319234107676337073934764e1_wp real ( wp ), parameter :: b148 = - 1.2574667847036709064117981533059871307009863478980024060295805266513615915043138735e1_wp real ( wp ), parameter :: b149 = 2.54025651049869277589813851770135045700861797774341329374584242615333576062269117780e1_wp real ( wp ), parameter :: b1410 = - 2.4865730830721493170953431486117421078941351149011810402690627604263543458446989032e1_wp real ( wp ), parameter :: b1411 = 1.82479073749516085147180202069097519978378918397970543443181892233252604987304701845e1_wp real ( wp ), parameter :: b1412 = - 9.4291787815393124480125158715016538695138573450523345127986553789149287859337960255e0_wp real ( wp ), parameter :: b1413 = 8.25492056472487433062307536805028087460591469502464576121882769983546032147130645121e-1_wp real ( wp ), parameter :: b151 = - 2.0602212042704652199244807912284589395147988173289204904243925620741467390453149503e0_wp real ( wp ), parameter :: b156 = - 2.3055564596876178326198929677498175792624263330011017577312032231421737767030559692e0_wp real ( wp ), parameter :: b157 = - 1.8379647671170325920306936223300488315443940076512542750939032591666020672221106554e1_wp real ( wp ), parameter :: b158 = 9.80063543421329918398827905876150569685353384114341904048681595591515045410441012888e-1_wp real ( wp ), parameter :: b159 = 6.44589158658994320826489839207649833491520903216082715269469597755156737618623074351e0_wp real ( wp ), parameter :: b1510 = 1.69192749452203241565519919050371391213914448119219462829620457478758678378197682618e1_wp real ( wp ), parameter :: b1511 = - 2.0988423575394962681126735718162381051185885412147351718156202906941587529583151802e0_wp real ( wp ), parameter :: b1512 = 1.32027878990329475096946854788916481157084451169381843791872814006897180501111028426e0_wp real ( wp ), parameter :: b1513 = 1.29768753187020321933985725604863066333871547241993002451338834678114639100987388885e-1_wp real ( wp ), parameter :: b1514 = 4.89900743459928848448110776111870354430304809243733908347583718104632373992549620659e-2_wp real ( wp ), parameter :: b161 = - 1.2158274587431439669291103556715073078571331121887250332403319959071088711190342783e-1_wp real ( wp ), parameter :: b166 = - 1.3009191687212087953937489554001604506419126739405937395616109697496506450739882872e1_wp real ( wp ), parameter :: b167 = - 1.0172115280165551555631444224047088737887421449467885159610413901710577571727155577e1_wp real ( wp ), parameter :: b168 = - 9.1376040597684553208500728397293269920338377345009007549988772949417238792208104990e0_wp real ( wp ), parameter :: b169 = 2.20271190656799492286306009834337099718633750373570345566819174880669811072575443296e1_wp real ( wp ), parameter :: b1610 = 6.06122452890837591335001768945892462299766158185132002339883804559430763723850436801e0_wp real ( wp ), parameter :: b1611 = 9.49756499938619826937987552815088909338119306846899551533354213035888156520270940573e0_wp real ( wp ), parameter :: b1612 = - 4.7967103151651448708172582989203880579450635055043503690520505457817795045514591312e0_wp real ( wp ), parameter :: b1613 = 6.51295494211030686568681751222035336828933052420596087187186975501127983652453403424e-1_wp real ( wp ), parameter :: c1 = 2.96275053023277765257147159271391983963018401625397769109581065606146193195367573656e-2_wp real ( wp ), parameter :: c8 = 7.80838132003046860057542718319735163112389396834314055277737601781852412778315993413e-2_wp real ( wp ), parameter :: c9 = 2.07620199958252939386280504658544994598465755307530373969021587633956273026455132933e-1_wp real ( wp ), parameter :: c10 = 1.69689395533794848088161847963068489566652421567777796351282799972583366756393555465e-1_wp real ( wp ), parameter :: c11 = 1.51705614234815145844037646207281350814128482549399473556449026004053183774844489538e-1_wp real ( wp ), parameter :: c12 = 1.44245948285115701641251053349684808091393327368972824014235232832191510849137389325e-1_wp real ( wp ), parameter :: c13 = 1.66761530218905580484076634450811227110090575704792045335148871651256233134779966440e-1_wp real ( wp ), parameter :: c14 = 1.92534285621243594762130197569399694644610012365298208475543983102390200679811369880e-2_wp real ( wp ), parameter :: c15 = 3.30125647043589625485103058545564456472676564190264834875762168569205517930399726031e-2_wp real ( wp ), parameter :: d1 = 2.98603077327271866543455374899994274225585056921637520652930266673233165901602953218e-2_wp real ( wp ), parameter :: d8 = 6.57755975911182224511842125160987804765191941684313617933281553333569953681029565846e-2_wp real ( wp ), parameter :: d9 = 2.13956779658119140898029891022265645728716698807857092033794693592749028494691587115e-1_wp real ( wp ), parameter :: d10 = 1.68721578796992869389907340999574096253253203866862151079585793545930377244267574219e-1_wp real ( wp ), parameter :: d11 = 1.71768360736786458177293485795001832452979570477507671772344473084105210367066149609e-1_wp real ( wp ), parameter :: d12 = 1.25492680790662476798676554483056276508051861757938232565244001424475853044387070116e-1_wp real ( wp ), parameter :: d13 = 1.89263652417235144013217502395309419983557239873730317305944966458721798394126740078e-1_wp real ( wp ), parameter :: d16 = 3.51610422763585016173454752986945211743637253555094213844648898933374204971976269572e-2_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 real ( wp ), parameter :: e15 = c15 real ( wp ), parameter :: e16 = - d16 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b116 * f6 + b117 * f7 + b118 * f8 + b119 * f9 + & b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b126 * f6 + b127 * f7 + b128 * f8 + b129 * f9 + & b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b136 * f6 + b137 * f7 + b138 * f8 + b139 * f9 + & b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b146 * f6 + b147 * f7 + b148 * f8 + b149 * f9 + & b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + h , x + h * ( b151 * f1 + b156 * f6 + b157 * f7 + b158 * f8 + b159 * f9 + & b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b161 * f1 + b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + & b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 ), f16 ) xf = x + h * ( c1 * f1 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 ) xerr = h * ( e1 * f1 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 ) end associate end procedure rks98 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK8(10) method -- a 10th-order method with an embedded 8th-order method. ! !### Reference ! * T. Feagin, \"[A Tenth-Order Runge-Kutta Method with Error Estimate](http://sce.uhcl.edu/feagin/courses/rk10.pdf)\", ! [coefficient file](http://sce.uhcl.edu/rungekutta/rk108.txt) module procedure rkf108 real ( wp ), parameter :: a1 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a2 = 0.539357840802981787532485197881302436857273449701009015505500_wp real ( wp ), parameter :: a3 = 0.809036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a4 = 0.309036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a5 = 0.981074190219795268254879548310562080489056746118724882027805_wp real ( wp ), parameter :: a6 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a7 = 0.354017365856802376329264185948796742115824053807373968324184_wp real ( wp ), parameter :: a8 = 0.882527661964732346425501486979669075182867844268052119663791_wp real ( wp ), parameter :: a9 = 0.642615758240322548157075497020439535959501736363212695909875_wp real ( wp ), parameter :: a10 = 0.357384241759677451842924502979560464040498263636787304090125_wp real ( wp ), parameter :: a11 = 0.117472338035267653574498513020330924817132155731947880336209_wp real ( wp ), parameter :: a12 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a13 = 0.309036761204472681298727796821953655285910174551513523258250_wp real ( wp ), parameter :: a14 = 0.539357840802981787532485197881302436857273449701009015505500_wp real ( wp ), parameter :: a15 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c0 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c1 = 0.0250000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c4 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c6 = 0.0400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0.189237478148923490158306404106012326238162346948625830327194_wp real ( wp ), parameter :: c9 = 0.277429188517743176508360262560654340428504319718040836339472_wp real ( wp ), parameter :: c10 = 0.277429188517743176508360262560654340428504319718040836339472_wp real ( wp ), parameter :: c11 = 0.189237478148923490158306404106012326238162346948625830327194_wp real ( wp ), parameter :: c12 = - 0.0400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c13 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c14 = - 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: c15 = - 0.0250000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c16 = 0.0333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b10 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b20 = - 0.915176561375291440520015019275342154318951387664369720564660_wp real ( wp ), parameter :: b21 = 1.45453440217827322805250021715664459117622483736537873607016_wp real ( wp ), parameter :: b30 = 0.202259190301118170324681949205488413821477543637878380814562_wp real ( wp ), parameter :: b32 = 0.606777570903354510974045847616465241464432630913635142443687_wp real ( wp ), parameter :: b40 = 0.184024714708643575149100693471120664216774047979591417844635_wp real ( wp ), parameter :: b42 = 0.197966831227192369068141770510388793370637287463360401555746_wp real ( wp ), parameter :: b43 = - 0.0729547847313632629185146671595558023015011608914382961421311_wp real ( wp ), parameter :: b50 = 0.0879007340206681337319777094132125475918886824944548534041378_wp real ( wp ), parameter :: b53 = 0.410459702520260645318174895920453426088035325902848695210406_wp real ( wp ), parameter :: b54 = 0.482713753678866489204726942976896106809132737721421333413261_wp real ( wp ), parameter :: b60 = 0.0859700504902460302188480225945808401411132615636600222593880_wp real ( wp ), parameter :: b63 = 0.330885963040722183948884057658753173648240154838402033448632_wp real ( wp ), parameter :: b64 = 0.489662957309450192844507011135898201178015478433790097210790_wp real ( wp ), parameter :: b65 = - 0.0731856375070850736789057580558988816340355615025188195854775_wp real ( wp ), parameter :: b70 = 0.120930449125333720660378854927668953958938996999703678812621_wp real ( wp ), parameter :: b74 = 0.260124675758295622809007617838335174368108756484693361887839_wp real ( wp ), parameter :: b75 = 0.0325402621549091330158899334391231259332716675992700000776101_wp real ( wp ), parameter :: b76 = - 0.0595780211817361001560122202563305121444953672762930724538856_wp real ( wp ), parameter :: b80 = 0.110854379580391483508936171010218441909425780168656559807038_wp real ( wp ), parameter :: b85 = - 0.0605761488255005587620924953655516875526344415354339234619466_wp real ( wp ), parameter :: b86 = 0.321763705601778390100898799049878904081404368603077129251110_wp real ( wp ), parameter :: b87 = 0.510485725608063031577759012285123416744672137031752354067590_wp real ( wp ), parameter :: b90 = 0.112054414752879004829715002761802363003717611158172229329393_wp real ( wp ), parameter :: b95 = - 0.144942775902865915672349828340980777181668499748506838876185_wp real ( wp ), parameter :: b96 = - 0.333269719096256706589705211415746871709467423992115497968724_wp real ( wp ), parameter :: b97 = 0.499269229556880061353316843969978567860276816592673201240332_wp real ( wp ), parameter :: b98 = 0.509504608929686104236098690045386253986643232352989602185060_wp real ( wp ), parameter :: b100 = 0.113976783964185986138004186736901163890724752541486831640341_wp real ( wp ), parameter :: b105 = - 0.0768813364203356938586214289120895270821349023390922987406384_wp real ( wp ), parameter :: b106 = 0.239527360324390649107711455271882373019741311201004119339563_wp real ( wp ), parameter :: b107 = 0.397774662368094639047830462488952104564716416343454639902613_wp real ( wp ), parameter :: b108 = 0.0107558956873607455550609147441477450257136782823280838547024_wp real ( wp ), parameter :: b109 = - 0.327769124164018874147061087350233395378262992392394071906457_wp real ( wp ), parameter :: b110 = 0.0798314528280196046351426864486400322758737630423413945356284_wp real ( wp ), parameter :: b115 = - 0.0520329686800603076514949887612959068721311443881683526937298_wp real ( wp ), parameter :: b116 = - 0.0576954146168548881732784355283433509066159287152968723021864_wp real ( wp ), parameter :: b117 = 0.194781915712104164976306262147382871156142921354409364738090_wp real ( wp ), parameter :: b118 = 0.145384923188325069727524825977071194859203467568236523866582_wp real ( wp ), parameter :: b119 = - 0.0782942710351670777553986729725692447252077047239160551335016_wp real ( wp ), parameter :: b1110 = - 0.114503299361098912184303164290554670970133218405658122674674_wp real ( wp ), parameter :: b120 = 0.985115610164857280120041500306517278413646677314195559520529_wp real ( wp ), parameter :: b123 = 0.330885963040722183948884057658753173648240154838402033448632_wp real ( wp ), parameter :: b124 = 0.489662957309450192844507011135898201178015478433790097210790_wp real ( wp ), parameter :: b125 = - 1.37896486574843567582112720930751902353904327148559471526397_wp real ( wp ), parameter :: b126 = - 0.861164195027635666673916999665534573351026060987427093314412_wp real ( wp ), parameter :: b127 = 5.78428813637537220022999785486578436006872789689499172601856_wp real ( wp ), parameter :: b128 = 3.28807761985103566890460615937314805477268252903342356581925_wp real ( wp ), parameter :: b129 = - 2.38633905093136384013422325215527866148401465975954104585807_wp real ( wp ), parameter :: b1210 = - 3.25479342483643918654589367587788726747711504674780680269911_wp real ( wp ), parameter :: b1211 = - 2.16343541686422982353954211300054820889678036420109999154887_wp real ( wp ), parameter :: b130 = 0.895080295771632891049613132336585138148156279241561345991710_wp real ( wp ), parameter :: b132 = 0.197966831227192369068141770510388793370637287463360401555746_wp real ( wp ), parameter :: b133 = - 0.0729547847313632629185146671595558023015011608914382961421311_wp real ( wp ), parameter :: b135 = - 0.851236239662007619739049371445966793289359722875702227166105_wp real ( wp ), parameter :: b136 = 0.398320112318533301719718614174373643336480918103773904231856_wp real ( wp ), parameter :: b137 = 3.63937263181035606029412920047090044132027387893977804176229_wp real ( wp ), parameter :: b138 = 1.54822877039830322365301663075174564919981736348973496313065_wp real ( wp ), parameter :: b139 = - 2.12221714704053716026062427460427261025318461146260124401561_wp real ( wp ), parameter :: b1310 = - 1.58350398545326172713384349625753212757269188934434237975291_wp real ( wp ), parameter :: b1311 = - 1.71561608285936264922031819751349098912615880827551992973034_wp real ( wp ), parameter :: b1312 = - 0.0244036405750127452135415444412216875465593598370910566069132_wp real ( wp ), parameter :: b140 = - 0.915176561375291440520015019275342154318951387664369720564660_wp real ( wp ), parameter :: b141 = 1.45453440217827322805250021715664459117622483736537873607016_wp real ( wp ), parameter :: b144 = - 0.777333643644968233538931228575302137803351053629547286334469_wp real ( wp ), parameter :: b146 = - 0.0910895662155176069593203555807484200111889091770101799647985_wp real ( wp ), parameter :: b1412 = 0.0910895662155176069593203555807484200111889091770101799647985_wp real ( wp ), parameter :: b1413 = 0.777333643644968233538931228575302137803351053629547286334469_wp real ( wp ), parameter :: b150 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b152 = - 0.157178665799771163367058998273128921867183754126709419409654_wp real ( wp ), parameter :: b1514 = 0.157178665799771163367058998273128921867183754126709419409654_wp real ( wp ), parameter :: b160 = 0.181781300700095283888472062582262379650443831463199521664945_wp real ( wp ), parameter :: b161 = 0.675000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b162 = 0.342758159847189839942220553413850871742338734703958919937260_wp real ( wp ), parameter :: b164 = 0.259111214548322744512977076191767379267783684543182428778156_wp real ( wp ), parameter :: b165 = - 0.358278966717952089048961276721979397739750634673268802484271_wp real ( wp ), parameter :: b166 = - 1.04594895940883306095050068756409905131588123172378489286080_wp real ( wp ), parameter :: b167 = 0.930327845415626983292300564432428777137601651182965794680397_wp real ( wp ), parameter :: b168 = 1.77950959431708102446142106794824453926275743243327790536000_wp real ( wp ), parameter :: b169 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b1610 = - 0.282547569539044081612477785222287276408489375976211189952877_wp real ( wp ), parameter :: b1611 = - 0.159327350119972549169261984373485859278031542127551931461821_wp real ( wp ), parameter :: b1612 = - 0.145515894647001510860991961081084111308650130578626404945571_wp real ( wp ), parameter :: b1613 = - 0.259111214548322744512977076191767379267783684543182428778156_wp real ( wp ), parameter :: b1614 = - 0.342758159847189839942220553413850871742338734703958919937260_wp real ( wp ), parameter :: b1615 = - 0.675000000000000000000000000000000000000000000000000000000000_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 )) call me % f ( t , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b50 * f0 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b105 * f5 + b106 * f6 + b107 * f7 + b108 * f8 + & b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b115 * f5 + b116 * f6 + b117 * f7 + b118 * f8 + & b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + & b127 * f7 + b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b132 * f2 + b133 * f3 + b135 * f5 + b136 * f6 + & b137 * f7 + b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b144 * f4 + b146 * f6 + b1412 * f12 + & b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b152 * f2 + b1514 * f14 ), f15 ) call me % f ( t + h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b164 * f4 + b165 * f5 + & b166 * f6 + b167 * f7 + b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) xf = x + h * ( c0 * f0 + c1 * f1 + c2 * f2 + c4 * f4 + c6 * f6 + c8 * f8 + c9 * f9 + & c10 * f10 + c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 ) xerr = ( 1.0_wp / 36 0.0_wp ) * h * ( f1 - f15 ) end associate end procedure rkf108 !***************************************************************************************** !***************************************************************************************** !> ! A modification of Curtis' order 10 Runge-Kutta scheme with an order 8 embedded scheme ! !### Reference ! * A.R.Curtis, \"High-order Explicit Runge-Kutta Formulae, Their uses, and Limitations\", ! J. Inst. Maths Applics (1975) 16, 35-55. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK10/RKcoeff10a(8)_2.pdf) module procedure rkc108 real ( wp ), parameter :: a2 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: a3 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: a4 = . 2178778440474225776426322793155049980471766876994920591257703112975964683410769510101_wp real ( wp ), parameter :: a5 = . 5446946101185564441065806982887624951179417192487301478144257782439911708526923775252_wp real ( wp ), parameter :: a6 = . 6536335321422677329278968379465149941415300630984761773773109338927894050232308530303_wp real ( wp ), parameter :: a7 = . 2746594919905254008808021630247618520892150865127407293922085868737635475402543533498_wp real ( wp ), parameter :: a8 = . 7735775201106609448405825008093973718589542913426807556412662673054607938029043386501_wp real ( wp ), parameter :: a9 = . 5801831400829957086304368756070480288942157185070105667309497004790955953521782539876_wp real ( wp ), parameter :: a10 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a11 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a12 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a13 = . 1174723380352676535744985130203309248171321557319478803362088220814723414805867429383_wp real ( wp ), parameter :: a14 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a15 = . 3573842417596774518429245029795604640404982636367873040901247917361510345429002009092_wp real ( wp ), parameter :: a16 = . 6426157582403225481570754970204395359595017363632126959098752082638489654570997990908_wp real ( wp ), parameter :: a17 = . 8825276619647323464255014869796690751828678442680521196637911779185276585194132570617_wp real ( wp ), parameter :: a18 = 1 real ( wp ), parameter :: a19 = . 3510848126232741617357001972386587771203155818540433925049309664694280078895463510848_wp real ( wp ), parameter :: a20 = . 6157407407407407407407407407407407407407407407407407407407407407407407407407407407407_wp real ( wp ), parameter :: a21 = 1 real ( wp ), parameter :: b21 = . 1452518960316150517617548528770033320314511251329947060838468741983976455607179673401_wp real ( wp ), parameter :: b31 = . 726259480158075258808774264385016660157255625664973530419234370991988227803589836700 3e-1_wp real ( wp ), parameter :: b32 = . 726259480158075258808774264385016660157255625664973530419234370991988227803589836700 3e-1_wp real ( wp ), parameter :: b41 = . 544694610118556444106580698288762495117941719248730147814425778243991170852692377525 2e-1_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 1634083830355669332319742094866287485353825157746190443443277334731973512558077132576_wp real ( wp ), parameter :: b51 = . 5446946101185564441065806982887624951179417192487301478144257782439911708526923775252_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = - 2.042604787944586665399677618582859356692281447182738054304096668414966890697596415720_wp real ( wp ), parameter :: b54 = 2.042604787944586665399677618582859356692281447182738054304096668414966890697596415720_wp real ( wp ), parameter :: b61 = . 653633532142267732927896837946514994141530063098476177377310933892789405023230853030 3e-1_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 3268167660711338664639484189732574970707650315492380886886554669463947025116154265151_wp real ( wp ), parameter :: b65 = . 2614534128569070931711587351786059976566120252393904709509243735571157620092923412121_wp real ( wp ), parameter :: b71 = . 823370775748271658517345434431012529606681431852174224176231905177296362769595526303 4e-1_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = . 2119171963202803561687843468555305553175658807629274312902985594840086570224567152664_wp real ( wp ), parameter :: b75 = - . 399734350805421831157793255006132016237984004981634780763011878610767447785020657962 8e-1_wp real ( wp ), parameter :: b76 = . 203786531759600619760625982267432454347794630627593537605880247331019990193401512494 1e-1_wp real ( wp ), parameter :: b81 = . 859530577900734383156202778677108190954393657047423061823629185894956437558782598500 1e-1_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = 0 real ( wp ), parameter :: b86 = . 2911769478058850960337179621761553399856026049598393013981874594942289837064329700000_wp real ( wp ), parameter :: b87 = . 3964475145147024104912442607655312127779123206780991480607158892217361663405931088001_wp real ( wp ), parameter :: b91 = . 861209348560696754998304737229211917889851457158843809991253461648657524350889595762 8e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 1397464826824442089036313891001189801074425314582326737716288563521183595455090268480_wp real ( wp ), parameter :: b97 = . 3951098495815674599900526056001284215294125840404176924334653987770478924197803010468_wp real ( wp ), parameter :: b98 = - . 407941270370856357630775928161205645316245427075241804732699008149364090482000334835 0e-1_wp real ( wp ), parameter :: b101 = . 723314442233794807761634822911932631558293087108902073309290089120612938193779520477 8e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = . 2200276284689998102140972735735070061373242800181187459951219347361114857342828430157_wp real ( wp ), parameter :: b107 = . 878953342543673401336978026479257363795222648775329641682384687621704079568848937133 4e-1_wp real ( wp ), parameter :: b108 = - . 444538399626035086399067488061110898683286064819603000058000469000226810898423864173 0e-1_wp real ( wp ), parameter :: b109 = - . 2183282289488754689095532966861839909872150913926337371522805434288481649401165594213_wp real ( wp ), parameter :: b111 = . 894710093673111422878544196677383616907103839088285721105726915852270497158536584522 3e-1_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = . 3946008170285561860741397654755022300929434262701385530048127140223687993778661654316_wp real ( wp ), parameter :: b117 = . 3443011367963333487713764986067104675654371857504670290688086760696354596195596354011_wp real ( wp ), parameter :: b118 = - . 794668266429266129069493811311943099705381514086377232876415086658249242589223139578 0e-1_wp real ( wp ), parameter :: b119 = - . 3915218947895966123834967996391962853380545808840091268064277812752553499114569444180_wp real ( wp ), parameter :: b1110 = 0 real ( wp ), parameter :: b121 = . 321000687796320921294528273607224188674142531429853240021692726261948847918621452331 2e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = - . 184637599751205014183516388175322791099632320474976922665546407804876950520952529975 2e-3_wp real ( wp ), parameter :: b129 = . 1560894025313219860759149162557283383430181475726228517203663063649626288079337909898_wp real ( wp ), parameter :: b1210 = . 1934496857654560252749984220385188727138526287670744309970093278715606577140084022992_wp real ( wp ), parameter :: b1211 = . 2611612387636636496908928477536452288263163392010050661129958478089356710938164130987_wp real ( wp ), parameter :: b131 = . 442374932852499632703538841779268815443317313329489228529575645756127631564847723373 2e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = . 464077443453903963640622216878198161653411564320811445568969878911994173244485704779 8e-2_wp real ( wp ), parameter :: b139 = . 470466028261513653213092721817239057090323098141415934790427794653792000182490327658 6e-1_wp real ( wp ), parameter :: b1310 = . 862074994801148816036944516741600279920531739701361904439127070633956170028152652970 3e-1_wp real ( wp ), parameter :: b1311 = - . 260798302468213809323325407906668762314868242631739511171929964139011865280294960003 5e-1_wp real ( wp ), parameter :: b1312 = - . 385802017439662153249327763915949958133323507653129897782009313981339939013776885094 0e-1_wp real ( wp ), parameter :: b141 = . 231804671742941156700604353961327560794075802170933256972935299077733639015831163052 9e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = . 3197856784116367067302124322582100058864027838197120089129330601737324659881765852593_wp real ( wp ), parameter :: b149 = . 5933233331841898686063939886797828376866051205773280426848164018120869674204443797948_wp real ( wp ), parameter :: b1410 = - 1.937519548878479314706815782408229952008442222624773168771865465659822020582450444783_wp real ( wp ), parameter :: b1411 = . 1803950557030502357344063195737827904476240180662764468232042537858892203518134072359_wp real ( wp ), parameter :: b1412 = - . 4554014298857220726863505256926549022316460712353658688873150702827663762861750674926_wp real ( wp ), parameter :: b1413 = 2.158764106255762807077594619172645539322916635447781333204724468181634037726021280742_wp real ( wp ), parameter :: b151 = . 262436432579810589152773398585855239172355303071914406584454488049818855383926394444 7e-1_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = . 486313942386726610652684391360922599625307372738196154441526323943157158604362233276 0e-1_wp real ( wp ), parameter :: b159 = . 427438253834647886763694242942172436759186658577414418021512266098082212398815113221 3e-1_wp real ( wp ), parameter :: b1510 = - . 4862259869465547771298976981868643277396586803130813159599600102115609499827986711663_wp real ( wp ), parameter :: b1511 = . 1326047194917652331781527125743684254490968718259563958293167893998110899691451568372_wp real ( wp ), parameter :: b1512 = - . 940296215294651565163483165814293485238379164167138774103460637137808220961693868522 5e-1_wp real ( wp ), parameter :: b1513 = . 6993864679941022534190304512277131176659196396138275832136258135631963192299339871223_wp real ( wp ), parameter :: b1514 = - . 119702001302886097649278493431224303667065845119539794872610451106204252159212591259 9e-1_wp real ( wp ), parameter :: b161 = . 556806664153621646109082306891780343606636580436190353212534947455147612081355812583 0e-1_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = - . 4324853319508358432896036654421685136736530810118924113940744870078036705505610668088_wp real ( wp ), parameter :: b169 = - . 9979726994172038714656907882931844552238093285811791155499130927685987422432191170216_wp real ( wp ), parameter :: b1610 = 2.707893755718926115778725270396739994070337972517006747100005607751792006959604868323_wp real ( wp ), parameter :: b1611 = - 1.024823023512132929313567156576969954855232272749038347671818195935585095295127839150_wp real ( wp ), parameter :: b1612 = 1.334565206642246959252239602313589265188981560552694580059808406200559397799055652161_wp real ( wp ), parameter :: b1613 = - 2.587748998830690939658228913150922979184368065866213469477796089200252812362701917187_wp real ( wp ), parameter :: b1614 = . 899277369634835584643043830611118122341463259828585430092442325135273320518708773267 8e-1_wp real ( wp ), parameter :: b1615 = 1.497578446211167333777988534023066333042434967475357134513165331964695787890042760189_wp real ( wp ), parameter :: b171 = - . 843489119968637763912518839198567131838385864141351714310416218808846862744751517298 2e-3_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = . 7602144218856081893754106886111596435015500427480120290148318740899211421773423234728_wp real ( wp ), parameter :: b179 = 1.769083927820959377467464871522349066447068428702073590698445112684989184432409492025_wp real ( wp ), parameter :: b1710 = - 4.499239797622297101452915424261016593995695456495268863455643396071539024609271033574_wp real ( wp ), parameter :: b1711 = 1.490558190212043468817221563278239942209691100326719140478588601720867838040211450448_wp real ( wp ), parameter :: b1712 = - 2.552203480132132516997563217309689292804518121743365818482497611667126218719069737195_wp real ( wp ), parameter :: b1713 = 4.795167551528575994217413424533259845001657006088189480440731104737960266616292993321_wp real ( wp ), parameter :: b1714 = - . 916185440176948223667141409238791747068625171419223669392006113898420238120910924855 3e-1_wp real ( wp ), parameter :: b1715 = - 1.525735678746850818217653470352135651821164556169070505816135230784807058389577753184_wp real ( wp ), parameter :: b1716 = . 7371445601564892133467497107205798584829803038168267854389817508169123996459113657504_wp real ( wp ), parameter :: b181 = . 1017366974111576638766809656369828971944080018220332809259398740674738807023371082700_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = - 1.696217553209432810711666838709742166182992092906177246174096517233561845662947862824_wp real ( wp ), parameter :: b189 = - 3.825235846211624254528740857512255693551264719132875740261231165548583482101116676418_wp real ( wp ), parameter :: b1810 = 9.754768979885866648856431516333641627109105703674164986615824197909762854575668793816_wp real ( wp ), parameter :: b1811 = - 2.520767789227152291196336314591227486393143379933686189126240710041836742414125694941_wp real ( wp ), parameter :: b1812 = 5.472417145227780046950992000565734793413395536531652419585004300790370984185945495978_wp real ( wp ), parameter :: b1813 = - 9.781098113458736121002383874108051372067873053264954833376114258940736444388841687929_wp real ( wp ), parameter :: b1814 = . 3189152692455334369024560213486753019540464785641163242047782111839399471147176681561_wp real ( wp ), parameter :: b1815 = 3.447227036527756718156475010324322155277035924051392880570525223655410460762027138915_wp real ( wp ), parameter :: b1816 = - . 6051983612219277832241707671295607127814820499715293613761402732652780120810041653591_wp real ( wp ), parameter :: b1817 = . 3334525350307787459202631378414806560287636505658634784117511174230383993073398823363_wp real ( wp ), parameter :: b191 = - . 1012987737478284424676828232882617689682012456457322189102956361570156443805900941944_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = - . 240938932894877540130465938066304314716789792846730824435996265963393361732653328582 2e-1_wp real ( wp ), parameter :: b197 = - . 6679880790275182076676283582867036095782150170801495251932447614617249253864579543857_wp real ( wp ), parameter :: b198 = 1.600262798493100648047998296908183265688507618079976446601985464092263571149154964705_wp real ( wp ), parameter :: b199 = 3.706958893826695766827011000213884379914407774639901049574259778345288538246990591819_wp real ( wp ), parameter :: b1910 = - 8.581755560147929325446798534254342948628755672447282004336563881429983605741487870996_wp real ( wp ), parameter :: b1911 = . 560731497430095398655964469909989725358450176760309198248414146861949322131058228187 7e-1_wp real ( wp ), parameter :: b1912 = - 4.547761497422899514520768375507009011918601407646237921467449197008085790456674001879_wp real ( wp ), parameter :: b1913 = 9.255775439941294621826928846245618922061242300726600002589630404152665447900428712156_wp real ( wp ), parameter :: b1914 = - . 3450876657451631707159097079770789925142348071643902737346329921538351794816584861003_wp real ( wp ), parameter :: b1915 = 0 real ( wp ), parameter :: b1916 = 0 real ( wp ), parameter :: b1917 = 0 real ( wp ), parameter :: b1918 = 0 real ( wp ), parameter :: b201 = . 382690972381263860900125964181804019382810531457949242283638898546847956723756124733 6e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = . 7786978965202527814624406274393101840018332461648638653990700950184871893714491273096_wp real ( wp ), parameter :: b207 = . 4859454140913448249612202172501868752761599132465501266008866131088163955018926230543_wp real ( wp ), parameter :: b208 = 1.814925350154666364151014269029611427420766367555858499108920245656959783343309816408_wp real ( wp ), parameter :: b209 = 4.551165245704657956889158854062833952834232753889932986749613143631480116805870313264_wp real ( wp ), parameter :: b2010 = - 7.173770670344544101351160462586215092596352548535380880420409450623251883641801862305_wp real ( wp ), parameter :: b2011 = - . 3943009017000923237232456850787591816773705728833192412204243696911216045268772747196_wp real ( wp ), parameter :: b2012 = - 6.036544185898100312430357626685382432626027303329497026597513524312479466987506315664_wp real ( wp ), parameter :: b2013 = 7.338904299721887701527380004651998686389416058019429466200740313593568240326087171554_wp real ( wp ), parameter :: b2014 = - . 4143158595971836110248598960027762194900538872022960061452263646470675916118824501965_wp real ( wp ), parameter :: b2015 = 0 real ( wp ), parameter :: b2016 = 0 real ( wp ), parameter :: b2017 = 0 real ( wp ), parameter :: b2018 = 0 real ( wp ), parameter :: b2019 = - . 3732349451502749258108621577582478607301443393311959731632798508493352335121760204375_wp real ( wp ), parameter :: b211 = . 216233904602204586687862878555058802678057855249460809793119888227679196291224467484 0e-1_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = . 4611834700744369218866370212060318930941322187829670117414118166503940620998117275429_wp real ( wp ), parameter :: b217 = . 1940797759547798743610542713744618433967649025379792966207862125676964319674160574624_wp real ( wp ), parameter :: b218 = . 7041001229739959807963554405302474570280838416767002383409508232534658577705201658489_wp real ( wp ), parameter :: b219 = 2.877431096792763528910415905652149398266490601780194388811216042455337979365709745445_wp real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = - . 4332742088749107411735902392606181444105337491234912425673655059805456011404518143074_wp real ( wp ), parameter :: b2112 = - 2.234178753588834452567105459024473991729105867012210449973082203886376638514123583334_wp real ( wp ), parameter :: b2113 = . 2235678086885984010238782832657956960650576194069632574873732156942360146780276407657_wp real ( wp ), parameter :: b2114 = . 1293532338308457711442786069651741293532338308457711442786069651741293532338308457711_wp real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = 0 real ( wp ), parameter :: b2118 = 0 real ( wp ), parameter :: b2119 = . 1418136968194278394808045812385429206355105705182818920178205766092934777719870449624_wp real ( wp ), parameter :: b2120 = - 1.085699633131323582531514699802817081967439754938101617737029931360398856861850276906_wp real ( wp ), parameter :: c1 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c2 = 0 real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0 real ( wp ), parameter :: c7 = 0 real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0 real ( wp ), parameter :: c10 = 0 real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = . 1387145942588715882541801312803271702142521598590204181697361204933422401935856968980_wp real ( wp ), parameter :: c13 = . 1892374781489234901583064041060123262381623469486258303271944256799821862794952728707_wp real ( wp ), parameter :: c14 = . 946187390744617450791532020530061631190811734743129151635972128399910931397476364353 3e-1_wp real ( wp ), parameter :: c15 = . 2774291885177431765083602625606543404285043197180408363394722409866844803871713937960_wp real ( wp ), parameter :: c16 = . 1387145942588715882541801312803271702142521598590204181697361204933422401935856968980_wp real ( wp ), parameter :: c17 = . 946187390744617450791532020530061631190811734743129151635972128399910931397476364353 3e-1_wp real ( wp ), parameter :: c18 = . 333333333333333333333333333333333333333333333333333333333333333333333333333333333333 3e-1_wp real ( wp ), parameter :: c19 = 0 real ( wp ), parameter :: c20 = 0 real ( wp ), parameter :: c21 = 0 real ( wp ), parameter :: d1 = . 333982989593133757227194581542298863372888341322754330355409842920273107740948831842 1e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = . 502450980392156862745098039215686274509803921568627450980392156862745098039215686274 5e-1_wp real ( wp ), parameter :: d10 = - . 1423859191318858946753152353981644782061337055184060977838998119673893661279423564924_wp real ( wp ), parameter :: d11 = . 2126013199429258434998789109063801828540550730541648287733608913970804891935883227446_wp real ( wp ), parameter :: d12 = . 3254854965632843133622967470840062095221514741629108993207015882688341071771214986692_wp real ( wp ), parameter :: d13 = . 3312629399585921325051759834368530020703933747412008281573498964803312629399585921325_wp real ( wp ), parameter :: d14 = . 1887845809230650005639203350759631573314744764356665687950807917985316096487827551997_wp real ( wp ), parameter :: d15 = 0 real ( wp ), parameter :: d16 = 0 real ( wp ), parameter :: d17 = 0 real ( wp ), parameter :: d18 = 0 real ( wp ), parameter :: d19 = . 615981109428714460440450884767920076156915483969870153340677975367599950638846296207 0e-1_wp real ( wp ), parameter :: d20 = - . 944010966059408803795779163614783008227502309802105312099976393585931547874485055295 9e-1_wp real ( wp ), parameter :: d21 = . 334111704085589770823468247038497058468487634185483104797562858661432363140386118436 9e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * & f19 + b2120 * f20 ), f21 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + & c19 * f19 + c20 * f20 + c21 * f21 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + & e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + & e19 * f19 + e20 * f20 + e21 * f21 ) end associate end procedure rkc108 !***************************************************************************************** !***************************************************************************************** !> ! Baker 10(9) method. ! !### Reference ! * Tom Baker, University of Teeside, \"RK-Aid software: RK10921M\". ! [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK10/RKcoeff10c_1.pdf) module procedure rkb109 real ( wp ), parameter :: a2 = . 2232129192123735665527132860096509572180113541116006004801774831897914255866976731834_wp real ( wp ), parameter :: a3 = . 3348193788185603498290699290144764358270170311674009007202662247846871383800465097751_wp real ( wp ), parameter :: a4 = . 5022290682278405247436048935217146537405255467511013510803993371770307075700697646627_wp real ( wp ), parameter :: a5 = . 1176948756548443596524604744040430749724814058786280779261159420482531581524139111558_wp real ( wp ), parameter :: a6 = . 6425923677604462086219057105219705193480713109262431864517703346402040737649802005250_wp real ( wp ), parameter :: a7 = . 181826565311210497_wp real ( wp ), parameter :: a8 = . 4341610334077954337462856744299909865481150413847250582144329859884319977831972426112_wp real ( wp ), parameter :: a9 = . 7122335424182418496009012272374473135415214567547251841147975874613222331084545787886_wp real ( wp ), parameter :: a10 = . 1894400309592476109308204841234726559856268372193596062465558450034952083309882121192_wp real ( wp ), parameter :: a11 = . 4943921538691045853333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a12 = . 6403413702953303301268868454436798781085931758963391614454137298592697657577711636312_wp real ( wp ), parameter :: a13 = . 741588230803656878_wp real ( wp ), parameter :: a14 = . 382911329862520855_wp real ( wp ), parameter :: a15 = . 107157755822487322_wp real ( wp ), parameter :: a16 = . 875691376241245711_wp real ( wp ), parameter :: a17 = . 964069299370187816_wp real ( wp ), parameter :: a18 = . 281729610523717922_wp real ( wp ), parameter :: a19 = . 631145492177176748_wp real ( wp ), parameter :: a20 = . 973803039377034607_wp real ( wp ), parameter :: b21 = . 2232129192123735665527132860096509572180113541116006004801774831897914255866976731834_wp real ( wp ), parameter :: b31 = . 837048447046400874572674822536191089567542577918502251800665561961717845950116274437 8e-1_wp real ( wp ), parameter :: b32 = . 2511145341139202623718024467608573268702627733755506755401996685885153537850348823314_wp real ( wp ), parameter :: b41 = . 1255572670569601311859012233804286634351313866877753377700998342942576768925174411657_wp real ( wp ), parameter :: b43 = . 3766718011708803935577036701412859903053941600633260133102995028827730306775523234970_wp real ( wp ), parameter :: b51 = . 864501263186028304309582758844308034258998816820951820303015617265404005372645736304 0e-1_wp real ( wp ), parameter :: b53 = . 523624379173028414750495946538195060444162228648130777490593076320073850167922523929 2e-1_wp real ( wp ), parameter :: b54 = - . 211176885810613122535473961342072344978346986682801818532449273102946274016429148675 1e-1_wp real ( wp ), parameter :: b61 = - . 263925772136691765502071903900853781431267565390504446708396785469349452158436732514 5e-1_wp real ( wp ), parameter :: b64 = . 3321586951309942525210016931443520748342752809336835485070926725007327816351124496012_wp real ( wp ), parameter :: b65 = . 3368262498431211326511112077677038226569227865316100826155173406864062373457114241753_wp real ( wp ), parameter :: b71 = . 421448143012889192459020716163930792519314409898305586957258755919601384233430863433 7e-1_wp real ( wp ), parameter :: b75 = . 1395091008993089985837339976891755843541033762656629420011519949721775047502000865276_wp real ( wp ), parameter :: b76 = . 172650110612579170363930694431336393965182744506499303122129435862356826456827128998 4e-3_wp real ( wp ), parameter :: b81 = . 1913223517063317850561878098464623128757461736096094048517648270556161690028960671678_wp real ( wp ), parameter :: b85 = - . 6549476653170516368338607340883454058106339891146285998978549868910881698171713079544_wp real ( wp ), parameter :: b86 = . 175587632374250272523847156824623515097259785921710186690210854577399810813602475068 3e-1_wp real ( wp ), parameter :: b87 = . 8802275837810902582715738829894117279732768782975732345915020603661640175161122358910_wp real ( wp ), parameter :: b91 = . 581951950625117397017610122222420099234545147557220004144276349408978174371274068202 9e-1_wp real ( wp ), parameter :: b96 = . 1647908558976784212367930935320516004070340774715814512653291320117464889726338996259_wp real ( wp ), parameter :: b97 = . 2562758618556534830885936612274458691344630164445656645146446091037555911278059725788_wp real ( wp ), parameter :: b98 = . 2329716296023982055737534602557078340765698480828560679203962114049223355708872997637_wp real ( wp ), parameter :: b101 = . 660980896975180518643211436369192785262166963279782182749385474668322550174544656025 2e-1_wp real ( wp ), parameter :: b106 = . 499379830360793631585200008806019224699735709657701255254852721720043040308063052441 4e-1_wp real ( wp ), parameter :: b107 = . 1536216094454890707317822140262379594167730891287251273659790090180235843883503581847_wp real ( wp ), parameter :: b108 = - . 541413038199431689952989313717755593993763342373300034530540054729713949757850833112 8e-1_wp real ( wp ), parameter :: b109 = - . 260763473998957058285039430485109450279601849657838614667929781803935401298378336008 9e-1_wp real ( wp ), parameter :: b111 = . 597728141306745562226483860053504696015505954794882736054839566619901513192570911873 3e-1_wp real ( wp ), parameter :: b118 = . 1656649460691327819663527933964608353435263909407310250007028968559622442637053740488_wp real ( wp ), parameter :: b119 = - . 127046707721932236148017716311096663537955863131744051303799985407134913802461122309 9e-2_wp real ( wp ), parameter :: b1110 = . 2702248607465165695058123310946329950236359055444314752401844796694522868883954793203_wp real ( wp ), parameter :: b121 = . 571464634692772654361729268328911733002025708306407765764068206612847678451094944317 2e-1_wp real ( wp ), parameter :: b129 = . 170664733327914003189390778907049759266551766971754150769662620079614481540947192356 9e-1_wp real ( wp ), parameter :: b1210 = . 2853767151165243146804641383356191775396044057521502467001987179873305495674085297549_wp real ( wp ), parameter :: b1211 = . 2807517183767373496913107023844645513421310226163727230918419292026930001911584202089_wp real ( wp ), parameter :: b131 = . 571369077066741124588875490466570144861997949456488820236659968850857120123548360966 0e-1_wp real ( wp ), parameter :: b139 = . 866214607590509014973828812624136179171026395578417304739154883362752488864918575790 1e-1_wp real ( wp ), parameter :: b1310 = . 2854329582389984323634810972884390808440109342965556282630983683305184760043391707767_wp real ( wp ), parameter :: b1311 = . 2797633923959254653770985744082321055561046971559230633717557229339774187704436927395_wp real ( wp ), parameter :: b1312 = . 326335117030079663031498979942581811965819340440306958675644235141431443263704428081 5e-1_wp real ( wp ), parameter :: b141 = . 579215421795851084663284650829842180072767559706641424431976631964876973126836729480 2e-1_wp real ( wp ), parameter :: b149 = - . 1168598764394854203108670771355968386139754171212251879659829443523204385801129100146_wp real ( wp ), parameter :: b1410 = . 2791270024477207066381851603610170508129292534731657465038373367821947287200953472810_wp real ( wp ), parameter :: b1411 = . 552348231215889703061817826805045073168095010362442570457734054216862735724310636445 4e-1_wp real ( wp ), parameter :: b1412 = . 331382142023044816358617520023651316159236714998414394450275698672015562197812580628 4e-1_wp real ( wp ), parameter :: b1413 = . 743496243508070082643099170087259308610362351413096025281469690847501827551215680781 3e-1_wp real ( wp ), parameter :: b151 = . 542434913126604890603356407741020202588950328267678340831345616242129408186590538924 8e-1_wp real ( wp ), parameter :: b159 = . 255574403648401901704549399726186583859417590536714249640018578678519160403139724321 8e-1_wp real ( wp ), parameter :: b1510 = . 1065318948685044129706483445621162791089602467505369099004177225283624953902959013228_wp real ( wp ), parameter :: b1511 = . 1494739176822617600298548318084537294306548147599349812604239821749187453609545343658_wp real ( wp ), parameter :: b1512 = - . 754141815082168684049889189623970408425066722266200183955632884011909334181039746513 6e-1_wp real ( wp ), parameter :: b1513 = . 118366271697470617369516184510635365805481883570886818758516420584483580788051263815 0e-2_wp real ( wp ), parameter :: b1514 = - . 154418469614537368_wp real ( wp ), parameter :: b161 = - . 313007335562516539987106399997136768293979997917068871152337323286847382920412230544 5e-1_wp real ( wp ), parameter :: b169 = - . 4393041016682237597697452523147415408933247130414835042917723489831082747083637622576_wp real ( wp ), parameter :: b1610 = - . 2971894957150042139937620479069507765251785957115322181603409909075380714667735160813_wp real ( wp ), parameter :: b1611 = . 1262980195755398451585609791771777378208362550125140868265029793320289593624402155837_wp real ( wp ), parameter :: b1612 = - . 135223566338950139303681395630991830902816180107641705719839343973101710038772948537 9e-1_wp real ( wp ), parameter :: b1613 = . 6695605432945227295340251006073274395173466715429726933128280272846122961086155806635_wp real ( wp ), parameter :: b1614 = . 398926850454282556_wp real ( wp ), parameter :: b1615 = . 462222650490275222_wp real ( wp ), parameter :: b171 = . 425460845603334494562225785459373628413149973566227601027127346321687262570249777086 6e-1_wp real ( wp ), parameter :: b179 = - . 1821182296512653493976221650402057582117417514147759470622260585285199838506585092559_wp real ( wp ), parameter :: b1710 = . 1693488568788993457692776359468516487310835997985566768493328170663073221084671579068_wp real ( wp ), parameter :: b1711 = - . 281293231138042309750553235900503928597130591046954156154312605238769034322851297538 8e-2_wp real ( wp ), parameter :: b1712 = . 4367359500435692592480947784835035112081291953371300785838045346974343617081011595250_wp real ( wp ), parameter :: b1713 = . 964962325350119096172823201464816790172423788486478672286726536468965926879323963404 2e-2_wp real ( wp ), parameter :: b1714 = . 1827541189026459104590716992261562936435133038172843022420870171219768684076842803782_wp real ( wp ), parameter :: b1715 = . 816399262978844696334164508237280127139345441636110872140941628245625872014353934424 0e-1_wp real ( wp ), parameter :: b1716 = . 2263259013959999629673163223583858004580131789671757969088706528737681492423808136362_wp real ( wp ), parameter :: b181 = - . 616278619970676395505256880874324775116572954244464654496172250162895228899656717728 0e-1_wp real ( wp ), parameter :: b189 = . 263081981642497549684070691257708860303098413076161334265174672263236241659272933806 5e-1_wp real ( wp ), parameter :: b1810 = - . 6563819353303824389148917307603424726525093364227772615481314402265589817962663323807_wp real ( wp ), parameter :: b1811 = - . 4996969738639946601661934398570589720521936732243676171454742217015940903119194293034_wp real ( wp ), parameter :: b1812 = - . 712301562559679825036405600599915445458680943354385949563286393536818574928195610436 1e-1_wp real ( wp ), parameter :: b1813 = . 1945887064918253295880838290230513152388881501421435771759995471289411971821731631008_wp real ( wp ), parameter :: b1814 = . 7502438829684451516052952921664213906375154664124515160998662893556068266252405773932_wp real ( wp ), parameter :: b1815 = . 6778525665536439867432200838066450041417881571145524785032579156045245492715999778952_wp real ( wp ), parameter :: b1816 = - . 1046057647455310786652080097009039359249473747848876107492887123406055065619567484248_wp real ( wp ), parameter :: b1817 = . 262789485384974988954531543438408066386741592151538446431990193233337618079867311553 9e-1_wp real ( wp ), parameter :: b191 = . 379652163287426120118620343684120943055969565576864412234621073327238240343703180529 4e-1_wp real ( wp ), parameter :: b199 = - . 2594056416058702079475722192315214454017994671360402614116801042085357278273610676615_wp real ( wp ), parameter :: b1910 = . 6023088303591701879982724849459819049819908747310071139535368513067871259409896536125_wp real ( wp ), parameter :: b1911 = . 6119387226913542078978281038711879095845432514371708320113689988639552031445275756169_wp real ( wp ), parameter :: b1912 = - . 8557593281472216275173535332798856826091404689475696899046474643882545069592793853088_wp real ( wp ), parameter :: b1913 = 1.016014044479150879819181655935044451622873646716581194764492422092270586935018600847_wp real ( wp ), parameter :: b1914 = . 4174635465318728144170599907012271233953357864579855698710555478932012900105054820193_wp real ( wp ), parameter :: b1915 = - . 314206874829401155038829880152262739856810650717809171088453183455363502576191712774 5e-2_wp real ( wp ), parameter :: b1916 = - . 3113859536805386540643212859648902182769708893494791481799285293081168071417215791223_wp real ( wp ), parameter :: b1917 = . 747532318200261148649063008884235649808579160720223055531427215976715849674379794157 7e-1_wp real ( wp ), parameter :: b1918 = - . 6996051078512155679294752334324570751847195000321862661699180193471489380787256603442_wp real ( wp ), parameter :: b201 = . 635424785800416205783320997390464879042378988764011084759720194471846747333551391545 7e-1_wp real ( wp ), parameter :: b209 = . 1335709427214855386564319367816597150656631989678512452281616080142611136536750546091_wp real ( wp ), parameter :: b2010 = . 3491939710685402856556370077059343902437022368395394555525545826876029022896488736825_wp real ( wp ), parameter :: b2011 = - . 1284299219085288104043584513269729325317465049017238832115899338924554224999281557779_wp real ( wp ), parameter :: b2012 = . 5820143454609020234416665664957204705761540086346612646427774305741185500271652747165_wp real ( wp ), parameter :: b2013 = - . 703229574906196771960975751775261973697011010221716091022663281906171047476349456204 6e-1_wp real ( wp ), parameter :: b2014 = . 4108572358925710179476579003323188290642373757595878674150744283920916547885055706399_wp real ( wp ), parameter :: b2015 = - . 251065477923996246626962790750376350565539055120967623263390583137650353073686722051 2e-1_wp real ( wp ), parameter :: b2016 = . 1223166254706007785807460575472930729088496060945489634909944334258869465746143128690_wp real ( wp ), parameter :: b2017 = . 471237457263974216685075221753341656576709345866663795460789669893321838765481764107 8e-1_wp real ( wp ), parameter :: b2018 = - . 2035773172368828280351383367281992122282011746329188150975183458730713499142844139626_wp real ( wp ), parameter :: b2019 = - . 3073795611150731392306884484695711542343125736903452146138998032605691134742962145162_wp real ( wp ), parameter :: b211 = . 1189924137880676460852663367282125023346761041034714988771622602337896848257576311721_wp real ( wp ), parameter :: b219 = 1.567065389218647018255284948985537561396036403483411695550932448674279128530361565244_wp real ( wp ), parameter :: b2110 = 1.062742213102872753657741254837796588064400661866785937264672961506012193460062190291_wp real ( wp ), parameter :: b2111 = - . 7051696022721412819771965938099389611228930171636494130149946862206926743626267591091_wp real ( wp ), parameter :: b2112 = . 9907825344767892999287937933800084396119601938859814415204705439463102044422773242413_wp real ( wp ), parameter :: b2113 = . 2507980962931107922266871779870423357231706420300879746540980799200371363012966217081_wp real ( wp ), parameter :: b2114 = 1.972591757153629542226038011120263810650524345125694323573613060238829589123920677616_wp real ( wp ), parameter :: b2115 = - . 3262628387941532893880299499584174546880007304318604226454131079685364715701264155684_wp real ( wp ), parameter :: b2116 = - . 7195961905900189101450624277119790470362703727002334732811111315403329989928142118605_wp real ( wp ), parameter :: b2117 = . 5802031535291661528133435810283051023192180079596550160030993013203826047471987749923_wp real ( wp ), parameter :: b2118 = - 1.503104563178041688806298917914932279967077722444117887454135595533548208509663052219_wp real ( wp ), parameter :: b2119 = - 2.082917406986733532241895178393857460921252779279252368270349439324592549474879051363_wp real ( wp ), parameter :: b2120 = - . 2061249557411945026346720362780411363644917364359743227780446952519376385207652951444_wp real ( wp ), parameter :: c1 = . 307444093579320767588351793898414978641199543864621136604968790192986473672636039670 1e-1_wp real ( wp ), parameter :: c12 = . 4447886124335158463373029422601699728444313324875120673928896655863659883998986985001_wp real ( wp ), parameter :: c13 = - . 771447289867255102723642741207568993324193730424966783048608900256792659207057832809 9e-1_wp real ( wp ), parameter :: c14 = . 1895969236666960081782143661904924178003392273539755384045555627359634132139704039829_wp real ( wp ), parameter :: c15 = . 1696794742660741325357704245298007854728500376148224262050684467711119689665579207267_wp real ( wp ), parameter :: c16 = . 3107725327623489988155072749206969138501610275590999188855016092183529050525521871700_wp real ( wp ), parameter :: c17 = - 1.052173416444910172223599400939351222118848154980691993896969290833000795415995203779_wp real ( wp ), parameter :: c18 = . 1098353169596310609348506603862869818226618225743191040640071521542528953059954349550_wp real ( wp ), parameter :: c19 = - . 1334572232187388442842841059278351057902328711498735111118805829160094435254500793407_wp real ( wp ), parameter :: c20 = 1.154026328574134208065260150796827370454610532524502151460002781580501491609214462821_wp real ( wp ), parameter :: c21 = - . 1466682293699578048454932174861727128676735353276311367588113332911578050533016457222_wp real ( wp ), parameter :: d1 = . 306993588915105633978419848815291723759470195906443111383956636605349614374098980658 0e-1_wp real ( wp ), parameter :: d12 = . 4501037370765134863000400416812391552231563060566733706571606677666390164501322407860_wp real ( wp ), parameter :: d13 = - . 651475793363240012117756657281013338890712956281021752710358335108286842767731781817 1e-1_wp real ( wp ), parameter :: d14 = . 1916476309177840038043731680068457542540807928558914659725060136615214781805707317846_wp real ( wp ), parameter :: d15 = . 1699093037015861786030207592719576231809404332930270025745281206261397945871067257969_wp real ( wp ), parameter :: d16 = . 2831822563446878149008449047225439184357774091336334653238641676396106848038134341285_wp real ( wp ), parameter :: d17 = - . 7938273328067640993878535581971311480056976834520424653124835645605083935506842817243_wp real ( wp ), parameter :: d18 = . 1085805168491408111596918257428235537727685528809234551377846603272747280143198404809_wp real ( wp ), parameter :: d19 = - . 1442902422009048623094173280045594665841429401482516755746485620108546739010869727583_wp real ( wp ), parameter :: d20 = . 8718101111217405681350791198631736702436128801469513492598526664004710882551915616216_wp real ( wp ), parameter :: d21 = - . 102667760558970463391845252240320899007371474729348103905924_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b106 * f6 + b107 * f7 + b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + h , x + h * ( b211 * f1 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) xf = x + h * ( c1 * f1 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + & c17 * f17 + c18 * f18 + c19 * f19 + c20 * f20 + c21 * f21 ) xerr = h * ( e1 * f1 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + & e17 * f17 + e18 * f18 + e19 * f19 + e20 * f20 + e21 * f21 ) end associate end procedure rkb109 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK12(10) method -- a 12th-order method with an embedded 10th-order method. ! !### Reference ! * [coefficient file](http://sce.uhcl.edu/rungekutta/rk1210.txt) module procedure rkf1210 real ( wp ), parameter :: a0 = 0 real ( wp ), parameter :: a1 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a2 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a3 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a4 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a6 = 0.671835709170513812712245661002797570438953420568682550710222_wp real ( wp ), parameter :: a7 = 0.288724941110620201935458488967024976908118598341806976469674_wp real ( wp ), parameter :: a8 = 0.562500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a9 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a10 = 0.947695431179199287562380162101836721649589325892740646458322_wp real ( wp ), parameter :: a11 = 0.0548112876863802643887753674810754475842153612931128785028369_wp real ( wp ), parameter :: a12 = 0.0848880518607165350639838930162674302064148175640019542045934_wp real ( wp ), parameter :: a13 = 0.265575603264642893098114059045616835297201264164077621448665_wp real ( wp ), parameter :: a14 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a15 = 0.734424396735357106901885940954383164702798735835922378551335_wp real ( wp ), parameter :: a16 = 0.915111948139283464936016106983732569793585182435998045795407_wp real ( wp ), parameter :: a17 = 0.947695431179199287562380162101836721649589325892740646458322_wp real ( wp ), parameter :: a18 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a19 = 0.288724941110620201935458488967024976908118598341806976469674_wp real ( wp ), parameter :: a20 = 0.671835709170513812712245661002797570438953420568682550710222_wp real ( wp ), parameter :: a21 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a22 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a23 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a24 = 1 real ( wp ), parameter :: c0 = 0.0238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: c1 = 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0312500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0.0416666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c7 = 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c10 = 0.0714285714285714285714285714285714285714285714285714285714286_wp real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = 0.138413023680782974005350203145033146748813640089941234591267_wp real ( wp ), parameter :: c13 = 0.215872690604931311708935511140681138965472074195773051123019_wp real ( wp ), parameter :: c14 = 0.243809523809523809523809523809523809523809523809523809523810_wp real ( wp ), parameter :: c15 = 0.215872690604931311708935511140681138965472074195773051123019_wp real ( wp ), parameter :: c16 = 0.138413023680782974005350203145033146748813640089941234591267_wp real ( wp ), parameter :: c17 = - 0.0714285714285714285714285714285714285714285714285714285714286_wp real ( wp ), parameter :: c18 = - 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c19 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c20 = - 0.0500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c21 = - 0.0416666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: c22 = - 0.0312500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c23 = - 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c24 = 0.0238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: b10 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b20 = - 0.216049382716049382716049382716049382716049382716049382716049_wp real ( wp ), parameter :: b21 = 0.771604938271604938271604938271604938271604938271604938271605_wp real ( wp ), parameter :: b30 = 0.208333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b31 = 0 real ( wp ), parameter :: b32 = 0.625000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b40 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b41 = 0 real ( wp ), parameter :: b42 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b43 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b50 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b51 = 0 real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = 0.400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b54 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b60 = 0.103364471650010477570395435690481791543342708330349879244197_wp real ( wp ), parameter :: b61 = 0 real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0.124053094528946761061581889237115328211074784955180298044074_wp real ( wp ), parameter :: b64 = 0.483171167561032899288836480451962508724109257517289177302380_wp real ( wp ), parameter :: b65 = - 0.0387530245694763252085681443767620580395733302341368038804290_wp real ( wp ), parameter :: b70 = 0.124038261431833324081904585980175168140024670698633612292480_wp real ( wp ), parameter :: b71 = 0 real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0.217050632197958486317846256953159942875916353757734167684657_wp real ( wp ), parameter :: b75 = 0.0137455792075966759812907801835048190594443990939408530842918_wp real ( wp ), parameter :: b76 = - 0.0661095317267682844455831341498149531672668252085016565917546_wp real ( wp ), parameter :: b80 = 0.0914774894856882983144991846980432197088832099976660100090486_wp real ( wp ), parameter :: b81 = 0 real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 0.00544348523717469689965754944144838611346156873847009178068318_wp real ( wp ), parameter :: b86 = 0.0680716801688453518578515120895103863112751730758794372203952_wp real ( wp ), parameter :: b87 = 0.408394315582641046727306852653894780093303185664924644551239_wp real ( wp ), parameter :: b90 = 0.0890013652502551018954509355423841780143232697403434118692699_wp real ( wp ), parameter :: b91 = 0 real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0.00499528226645532360197793408420692800405891149406814091955810_wp real ( wp ), parameter :: b96 = 0.397918238819828997341739603001347156083435060931424970826304_wp real ( wp ), parameter :: b97 = 0.427930210752576611068192608300897981558240730580396406312359_wp real ( wp ), parameter :: b98 = - 0.0865117637557827005740277475955029103267246394128995965941585_wp real ( wp ), parameter :: b100 = 0.0695087624134907543112693906409809822706021061685544615255758_wp real ( wp ), parameter :: b101 = 0 real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0.129146941900176461970759579482746551122871751501482634045487_wp real ( wp ), parameter :: b106 = 1.53073638102311295076342566143214939031177504112433874313011_wp real ( wp ), parameter :: b107 = 0.577874761129140052546751349454576715334892100418571882718036_wp real ( wp ), parameter :: b108 = - 0.951294772321088980532340837388859453930924498799228648050949_wp real ( wp ), parameter :: b109 = - 0.408276642965631951497484981519757463459627174520978426909934_wp real ( wp ), parameter :: b110 = 0.0444861403295135866269453507092463581620165501018684152933313_wp real ( wp ), parameter :: b111 = 0 real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = - 0.00380476867056961731984232686574547203016331563626856065717964_wp real ( wp ), parameter :: b116 = 0.0106955064029624200721262602809059154469206077644957399593972_wp real ( wp ), parameter :: b117 = 0.0209616244499904333296674205928919920806734650660039898074652_wp real ( wp ), parameter :: b118 = - 0.0233146023259321786648561431551978077665337818756053603898847_wp real ( wp ), parameter :: b119 = 0.00263265981064536974369934736325334761174975280887405725010964_wp real ( wp ), parameter :: b1110 = 0.00315472768977025060103545855572111407955208306374459723959783_wp real ( wp ), parameter :: b120 = 0.0194588815119755475588801096525317761242073762016273186231215_wp real ( wp ), parameter :: b121 = 0 real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0.0000678512949171812509306121653452367476194364781259165332321534_wp real ( wp ), parameter :: b129 = - 0.0000429795859049273623271005330230162343568863387724883603675550_wp real ( wp ), parameter :: b1210 = 0.0000176358982260285155407485928953302139937553442829975734148981_wp real ( wp ), parameter :: b1211 = 0.0653866627415027051009595231385181033549511358787382098351924_wp real ( wp ), parameter :: b130 = 0.206836835664277105916828174798272361078909196043446411598231_wp real ( wp ), parameter :: b131 = 0 real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0.0166796067104156472828045866664696450306326505094792505215514_wp real ( wp ), parameter :: b139 = - 0.00879501563200710214457024178249986591130234990219959208704979_wp real ( wp ), parameter :: b1310 = 0.00346675455362463910824462315246379209427513654098596403637231_wp real ( wp ), parameter :: b1311 = - 0.861264460105717678161432562258351242030270498966891201799225_wp real ( wp ), parameter :: b1312 = 0.908651882074050281096239478469262145034957129939256789178785_wp real ( wp ), parameter :: b140 = 0.0203926084654484010091511314676925686038504449562413004562382_wp real ( wp ), parameter :: b141 = 0 real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0.0869469392016685948675400555583947505833954460930940959577347_wp real ( wp ), parameter :: b149 = - 0.0191649630410149842286436611791405053287170076602337673587681_wp real ( wp ), parameter :: b1410 = 0.00655629159493663287364871573244244516034828755253746024098838_wp real ( wp ), parameter :: b1411 = 0.0987476128127434780903798528674033899738924968006632201445462_wp real ( wp ), parameter :: b1412 = 0.00535364695524996055083260173615567408717110247274021056118319_wp real ( wp ), parameter :: b1413 = 0.301167864010967916837091303817051676920059229784957479998077_wp real ( wp ), parameter :: b150 = 0.228410433917778099547115412893004398779136994596948545722283_wp real ( wp ), parameter :: b151 = 0 real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = - 0.498707400793025250635016567442511512138603770959682292383042_wp real ( wp ), parameter :: b159 = 0.134841168335724478552596703792570104791700727205981058201689_wp real ( wp ), parameter :: b1510 = - 0.0387458244055834158439904226924029230935161059142806805674360_wp real ( wp ), parameter :: b1511 = - 1.27473257473474844240388430824908952380979292713250350199641_wp real ( wp ), parameter :: b1512 = 1.43916364462877165201184452437038081875299303577911839630524_wp real ( wp ), parameter :: b1513 = - 0.214007467967990254219503540827349569639028092344812795499026_wp real ( wp ), parameter :: b1514 = 0.958202417754430239892724139109781371059908874605153648768037_wp real ( wp ), parameter :: b160 = 2.00222477655974203614249646012506747121440306225711721209798_wp real ( wp ), parameter :: b161 = 0 real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 2.06701809961524912091954656438138595825411859673341600679555_wp real ( wp ), parameter :: b169 = 0.623978136086139541957471279831494466155292316167021080663140_wp real ( wp ), parameter :: b1610 = - 0.0462283685500311430283203554129062069391947101880112723185773_wp real ( wp ), parameter :: b1611 = - 8.84973288362649614860075246727118949286604835457092701094630_wp real ( wp ), parameter :: b1612 = 7.74257707850855976227437225791835589560188590785037197433615_wp real ( wp ), parameter :: b1613 = - 0.588358519250869210993353314127711745644125882130941202896436_wp real ( wp ), parameter :: b1614 = - 1.10683733362380649395704708016953056176195769617014899442903_wp real ( wp ), parameter :: b1615 = - 0.929529037579203999778397238291233214220788057511899747507074_wp real ( wp ), parameter :: b170 = 3.13789533412073442934451608989888796808161259330322100268310_wp real ( wp ), parameter :: b171 = 0 real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0.129146941900176461970759579482746551122871751501482634045487_wp real ( wp ), parameter :: b176 = 1.53073638102311295076342566143214939031177504112433874313011_wp real ( wp ), parameter :: b177 = 0.577874761129140052546751349454576715334892100418571882718036_wp real ( wp ), parameter :: b178 = 5.42088263055126683050056840891857421941300558851862156403363_wp real ( wp ), parameter :: b179 = 0.231546926034829304872663800877643660904880180835945693836936_wp real ( wp ), parameter :: b1710 = 0.0759292995578913560162301311785251873561801342333194895292058_wp real ( wp ), parameter :: b1711 = - 1 2.3729973380186513287414553402595806591349822617535905976253_wp real ( wp ), parameter :: b1712 = 9.85455883464769543935957209317369202080367765721777101906955_wp real ( wp ), parameter :: b1713 = 0.0859111431370436529579357709052367772889980495122329601159540_wp real ( wp ), parameter :: b1714 = - 5.65242752862643921117182090081762761180392602644189218673969_wp real ( wp ), parameter :: b1715 = - 1.94300935242819610883833776782364287728724899124166920477873_wp real ( wp ), parameter :: b1716 = - 0.128352601849404542018428714319344620742146491335612353559923_wp real ( wp ), parameter :: b180 = 1.38360054432196014878538118298167716825163268489922519995564_wp real ( wp ), parameter :: b181 = 0 real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0.00499528226645532360197793408420692800405891149406814091955810_wp real ( wp ), parameter :: b186 = 0.397918238819828997341739603001347156083435060931424970826304_wp real ( wp ), parameter :: b187 = 0.427930210752576611068192608300897981558240730580396406312359_wp real ( wp ), parameter :: b188 = - 1.30299107424475770916551439123047573342071475998399645982146_wp real ( wp ), parameter :: b189 = 0.661292278669377029097112528107513072734573412294008071500699_wp real ( wp ), parameter :: b1810 = - 0.144559774306954349765969393688703463900585822441545655530145_wp real ( wp ), parameter :: b1811 = - 6.96576034731798203467853867461083919356792248105919255460819_wp real ( wp ), parameter :: b1812 = 6.65808543235991748353408295542210450632193197576935120716437_wp real ( wp ), parameter :: b1813 = - 1.66997375108841486404695805725510845049807969199236227575796_wp real ( wp ), parameter :: b1814 = 2.06413702318035263832289040301832647130604651223986452170089_wp real ( wp ), parameter :: b1815 = - 0.674743962644306471862958129570837723192079875998405058648892_wp real ( wp ), parameter :: b1816 = - 0.00115618834794939500490703608435907610059605754935305582045729_wp real ( wp ), parameter :: b1817 = - 0.00544057908677007389319819914241631024660726585015012485938593_wp real ( wp ), parameter :: b190 = 0.951236297048287669474637975894973552166903378983475425758226_wp real ( wp ), parameter :: b191 = 0 real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0.217050632197958486317846256953159942875916353757734167684657_wp real ( wp ), parameter :: b195 = 0.0137455792075966759812907801835048190594443990939408530842918_wp real ( wp ), parameter :: b196 = - 0.0661095317267682844455831341498149531672668252085016565917546_wp real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0.152281696736414447136604697040747131921486432699422112099617_wp real ( wp ), parameter :: b199 = - 0.337741018357599840802300793133998004354643424457539667670080_wp real ( wp ), parameter :: b1910 = - 0.0192825981633995781534949199286824400469353110630787982121133_wp real ( wp ), parameter :: b1911 = - 3.68259269696866809932409015535499603576312120746888880201882_wp real ( wp ), parameter :: b1912 = 3.16197870406982063541533528419683854018352080342887002331312_wp real ( wp ), parameter :: b1913 = - 0.370462522106885290716991856022051125477943482284080569177386_wp real ( wp ), parameter :: b1914 = - 0.0514974200365440434996434456698127984941168616474316871020314_wp real ( wp ), parameter :: b1915 = - 0.000829625532120152946787043541792848416659382675202720677536554_wp real ( wp ), parameter :: b1916 = 0.00000279801041419278598986586589070027583961355402640879503213503_wp real ( wp ), parameter :: b1917 = 0.0418603916412360287969841020776788461794119440689356178942252_wp real ( wp ), parameter :: b1918 = 0.279084255090877355915660874555379649966282167560126269290222_wp real ( wp ), parameter :: b200 = 0.103364471650010477570395435690481791543342708330349879244197_wp real ( wp ), parameter :: b201 = 0 real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0.124053094528946761061581889237115328211074784955180298044074_wp real ( wp ), parameter :: b204 = 0.483171167561032899288836480451962508724109257517289177302380_wp real ( wp ), parameter :: b205 = - 0.0387530245694763252085681443767620580395733302341368038804290_wp real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = - 0.438313820361122420391059788940960176420682836652600698580091_wp real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = - 0.218636633721676647685111485017151199362509373698288330593486_wp real ( wp ), parameter :: b2010 = - 0.0312334764394719229981634995206440349766174759626578122323015_wp real ( wp ), parameter :: b2011 = 0 real ( wp ), parameter :: b2012 = 0 real ( wp ), parameter :: b2013 = 0 real ( wp ), parameter :: b2014 = 0 real ( wp ), parameter :: b2015 = 0 real ( wp ), parameter :: b2016 = 0 real ( wp ), parameter :: b2017 = 0.0312334764394719229981634995206440349766174759626578122323015_wp real ( wp ), parameter :: b2018 = 0.218636633721676647685111485017151199362509373698288330593486_wp real ( wp ), parameter :: b2019 = 0.438313820361122420391059788940960176420682836652600698580091_wp real ( wp ), parameter :: b210 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b211 = 0 real ( wp ), parameter :: b212 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b213 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0.0984256130499315928152900286856048243348202521491288575952143_wp real ( wp ), parameter :: b217 = - 0.196410889223054653446526504390100417677539095340135532418849_wp real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0.436457930493068729391826122587949137609670676712525034763317_wp real ( wp ), parameter :: b2110 = 0.0652613721675721098560370939805555698350543810708414716730270_wp real ( wp ), parameter :: b2111 = 0 real ( wp ), parameter :: b2112 = 0 real ( wp ), parameter :: b2113 = 0 real ( wp ), parameter :: b2114 = 0 real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = - 0.0652613721675721098560370939805555698350543810708414716730270_wp real ( wp ), parameter :: b2118 = - 0.436457930493068729391826122587949137609670676712525034763317_wp real ( wp ), parameter :: b2119 = 0.196410889223054653446526504390100417677539095340135532418849_wp real ( wp ), parameter :: b2120 = - 0.0984256130499315928152900286856048243348202521491288575952143_wp real ( wp ), parameter :: b220 = - 0.216049382716049382716049382716049382716049382716049382716049_wp real ( wp ), parameter :: b221 = 0.771604938271604938271604938271604938271604938271604938271605_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = - 0.666666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = - 0.390696469295978451446999802258495981249099665294395945559163_wp real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = 0 real ( wp ), parameter :: b2213 = 0 real ( wp ), parameter :: b2214 = 0 real ( wp ), parameter :: b2215 = 0 real ( wp ), parameter :: b2216 = 0 real ( wp ), parameter :: b2217 = 0 real ( wp ), parameter :: b2218 = 0 real ( wp ), parameter :: b2219 = 0 real ( wp ), parameter :: b2220 = 0.390696469295978451446999802258495981249099665294395945559163_wp real ( wp ), parameter :: b2221 = 0.666666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b230 = 0.200000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b231 = 0 real ( wp ), parameter :: b232 = - 0.164609053497942386831275720164609053497942386831275720164609_wp real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = 0 real ( wp ), parameter :: b2312 = 0 real ( wp ), parameter :: b2313 = 0 real ( wp ), parameter :: b2314 = 0 real ( wp ), parameter :: b2315 = 0 real ( wp ), parameter :: b2316 = 0 real ( wp ), parameter :: b2317 = 0 real ( wp ), parameter :: b2318 = 0 real ( wp ), parameter :: b2319 = 0 real ( wp ), parameter :: b2320 = 0 real ( wp ), parameter :: b2321 = 0 real ( wp ), parameter :: b2322 = 0.164609053497942386831275720164609053497942386831275720164609_wp real ( wp ), parameter :: b240 = 1.47178724881110408452949550989023611293535315518571691939396_wp real ( wp ), parameter :: b241 = 0.787500000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b242 = 0.421296296296296296296296296296296296296296296296296296296296_wp real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0.348600717628329563206854421629657569274689947367847465753757_wp real ( wp ), parameter :: b247 = 0.229499544768994849582890233710555447073823569666506700662510_wp real ( wp ), parameter :: b248 = 5.79046485790481979159831978177003471098279506036722411333192_wp real ( wp ), parameter :: b249 = 0.418587511856506868874073759426596207226461447604248151080016_wp real ( wp ), parameter :: b2410 = 0.307039880222474002649653817490106690389251482313213999386651_wp real ( wp ), parameter :: b2411 = - 4.68700905350603332214256344683853248065574415794742040470287_wp real ( wp ), parameter :: b2412 = 3.13571665593802262152038152399873856554395436199962915429076_wp real ( wp ), parameter :: b2413 = 1.40134829710965720817510506275620441055845017313930508348898_wp real ( wp ), parameter :: b2414 = - 5.52931101439499023629010306005764336421276055777658156400910_wp real ( wp ), parameter :: b2415 = - 0.853138235508063349309546894974784906188927508039552519557498_wp real ( wp ), parameter :: b2416 = 0.103575780373610140411804607167772795518293914458500175573749_wp real ( wp ), parameter :: b2417 = - 0.140474416950600941142546901202132534870665923700034957196546_wp real ( wp ), parameter :: b2418 = - 0.418587511856506868874073759426596207226461447604248151080016_wp real ( wp ), parameter :: b2419 = - 0.229499544768994849582890233710555447073823569666506700662510_wp real ( wp ), parameter :: b2420 = - 0.348600717628329563206854421629657569274689947367847465753757_wp real ( wp ), parameter :: b2421 = - 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b2422 = - 0.421296296296296296296296296296296296296296296296296296296296_wp real ( wp ), parameter :: b2423 = - 0.787500000000000000000000000000000000000000000000000000000000_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 ), & f17 => me % funcs (:, 18 ), & f18 => me % funcs (:, 19 ), & f19 => me % funcs (:, 20 ), & f20 => me % funcs (:, 21 ), & f21 => me % funcs (:, 22 ), & f22 => me % funcs (:, 23 ), & f23 => me % funcs (:, 24 ), & f24 => me % funcs (:, 25 )) call me % f ( t + a0 * h , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b50 * f0 + b51 * f1 + b52 * f2 + b53 * f3 + & b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b61 * f1 + b62 * f2 + b63 * f3 + & b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b71 * f1 + b72 * f2 + b73 * f3 + & b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b81 * f1 + b82 * f2 + b83 * f3 + & b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b91 * f1 + b92 * f2 + b93 * f3 + & b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b101 * f1 + b102 * f2 + b103 * f3 + & b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b111 * f1 + b112 * f2 + b113 * f3 + & b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b121 * f1 + b122 * f2 + b123 * f3 + & b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b131 * f1 + b132 * f2 + b133 * f3 + & b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b142 * f2 + b143 * f3 + & b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b151 * f1 + b152 * f2 + b153 * f3 + & b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b163 * f3 + & b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b170 * f0 + b171 * f1 + b172 * f2 + b173 * f3 + & b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + & b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + & b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b180 * f0 + b181 * f1 + b182 * f2 + b183 * f3 + & b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + & b1812 * f12 + b1813 * f13 + b1814 * f14 + b1815 * f15 + & b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b190 * f0 + b191 * f1 + b192 * f2 + b193 * f3 + & b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + & b1912 * f12 + b1913 * f13 + b1914 * f14 + b1915 * f15 + & b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b200 * f0 + b201 * f1 + b202 * f2 + b203 * f3 + & b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + & b2012 * f12 + b2013 * f13 + b2014 * f14 + b2015 * f15 + & b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b210 * f0 + b211 * f1 + b212 * f2 + b213 * f3 + & b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + & b2112 * f12 + b2113 * f13 + b2114 * f14 + b2115 * f15 + & b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b220 * f0 + b221 * f1 + b222 * f2 + b223 * f3 + & b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + & b2212 * f12 + b2213 * f13 + b2214 * f14 + b2215 * f15 + & b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b230 * f0 + b231 * f1 + b232 * f2 + b233 * f3 + & b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + & b2312 * f12 + b2313 * f13 + b2314 * f14 + b2315 * f15 + & b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b240 * f0 + b241 * f1 + b242 * f2 + b243 * f3 + & b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + & b2412 * f12 + b2413 * f13 + b2414 * f14 + b2415 * f15 + & b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) xf = x + h * ( c0 * f0 + & c1 * f1 + & c2 * f2 + & c3 * f3 + & c4 * f4 + & c5 * f5 + & c6 * f6 + & c7 * f7 + & c8 * f8 + & c9 * f9 + & c10 * f10 + & c11 * f11 + & c12 * f12 + & c13 * f13 + & c14 * f14 + & c15 * f15 + & c16 * f16 + & c17 * f17 + & c18 * f18 + & c19 * f19 + & c20 * f20 + & c21 * f21 + & c22 * f22 + & c23 * f23 + & c24 * f24 ) xerr = ( 4 9.0_wp / 64 0.0_wp ) * h * ( f1 - f23 ) end associate end procedure rkf1210 !***************************************************************************************** !***************************************************************************************** !> ! Feagin's RK14(12) - a 14th-order method with an embedded 12th-order method. ! !### Reference ! * [coefficient file](http://sce.uhcl.edu/rungekutta/rk1412.txt) module procedure rkf1412 real ( wp ), parameter :: a0 = 0 real ( wp ), parameter :: a1 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: a2 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a3 = 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a4 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a6 = 0.669986979272772921764683785505998513938845229638460353285142_wp real ( wp ), parameter :: a7 = 0.297068384213818357389584716808219413223332094698915687379168_wp real ( wp ), parameter :: a8 = 0.727272727272727272727272727272727272727272727272727272727273_wp real ( wp ), parameter :: a9 = 0.140152799042188765276187487966946717629806463082532936287323_wp real ( wp ), parameter :: a10 = 0.700701039770150737151099854830749337941407049265546408969222_wp real ( wp ), parameter :: a11 = 0.363636363636363636363636363636363636363636363636363636363636_wp real ( wp ), parameter :: a12 = 0.263157894736842105263157894736842105263157894736842105263158_wp real ( wp ), parameter :: a13 = 0.0392172246650270859125196642501208648863714315266128052078483_wp real ( wp ), parameter :: a14 = 0.812917502928376762983393159278036506189612372617238550774312_wp real ( wp ), parameter :: a15 = 0.166666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: a16 = 0.900000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: a17 = 0.0641299257451966923312771193896682809481096651615083225402924_wp real ( wp ), parameter :: a18 = 0.204149909283428848927744634301023405027149505241333751628870_wp real ( wp ), parameter :: a19 = 0.395350391048760565615671369827324372352227297456659450554577_wp real ( wp ), parameter :: a20 = 0.604649608951239434384328630172675627647772702543340549445423_wp real ( wp ), parameter :: a21 = 0.795850090716571151072255365698976594972850494758666248371130_wp real ( wp ), parameter :: a22 = 0.935870074254803307668722880610331719051890334838491677459708_wp real ( wp ), parameter :: a23 = 0.166666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: a24 = 0.812917502928376762983393159278036506189612372617238550774312_wp real ( wp ), parameter :: a25 = 0.0392172246650270859125196642501208648863714315266128052078483_wp real ( wp ), parameter :: a26 = 0.363636363636363636363636363636363636363636363636363636363636_wp real ( wp ), parameter :: a27 = 0.700701039770150737151099854830749337941407049265546408969222_wp real ( wp ), parameter :: a28 = 0.140152799042188765276187487966946717629806463082532936287323_wp real ( wp ), parameter :: a29 = 0.297068384213818357389584716808219413223332094698915687379168_wp real ( wp ), parameter :: a30 = 0.669986979272772921764683785505998513938845229638460353285142_wp real ( wp ), parameter :: a31 = 0.333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a32 = 0.555555555555555555555555555555555555555555555555555555555556_wp real ( wp ), parameter :: a33 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: c0 = 0.0178571428571428571428571428571428571428571428571428571428571_wp real ( wp ), parameter :: c1 = 0.00585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c2 = 0.0117187500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0.0175781250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c7 = 0.0292968750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0.0351562500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c10 = 0.0410156250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c11 = 0.0468750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = 0.0527343750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c14 = 0.0585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c15 = 0.0644531250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c16 = 0 real ( wp ), parameter :: c17 = 0.105352113571753019691496032887878162227673083080523884041670_wp real ( wp ), parameter :: c18 = 0.170561346241752182382120338553874085887555487802790804737501_wp real ( wp ), parameter :: c19 = 0.206229397329351940783526485701104894741914286259542454077972_wp real ( wp ), parameter :: c20 = 0.206229397329351940783526485701104894741914286259542454077972_wp real ( wp ), parameter :: c21 = 0.170561346241752182382120338553874085887555487802790804737501_wp real ( wp ), parameter :: c22 = 0.105352113571753019691496032887878162227673083080523884041670_wp real ( wp ), parameter :: c23 = - 0.0644531250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c24 = - 0.0585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c25 = - 0.0527343750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c26 = - 0.0468750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c27 = - 0.0410156250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c28 = - 0.0351562500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c29 = - 0.0292968750000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c30 = - 0.0234375000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c31 = - 0.0175781250000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c32 = - 0.0117187500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c33 = - 0.00585937500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: c34 = 0.0178571428571428571428571428571428571428571428571428571428571_wp real ( wp ), parameter :: b10 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: b20 = - 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b21 = 1.38888888888888888888888888888888888888888888888888888888889_wp real ( wp ), parameter :: b30 = 0.208333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b31 = 0 real ( wp ), parameter :: b32 = 0.625000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b40 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b41 = 0 real ( wp ), parameter :: b42 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b43 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b50 = 0.100000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b51 = 0 real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = 0.400000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b54 = 0.500000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b60 = 0.103484561636679776672993546511910344499744798201971316606663_wp real ( wp ), parameter :: b61 = 0 real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0.122068887306407222589644082868962077139592714834162134741275_wp real ( wp ), parameter :: b64 = 0.482574490331246622475134780125688112865919023850168049679402_wp real ( wp ), parameter :: b65 = - 0.0381409600015606999730886240005620205664113072478411477421970_wp real ( wp ), parameter :: b70 = 0.124380526654094412881516420868799316268491466359671423163289_wp real ( wp ), parameter :: b71 = 0 real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0.226120282197584301422238662979202901196752320742633143965145_wp real ( wp ), parameter :: b75 = 0.0137885887618080880607695837016477814530969417491493385363543_wp real ( wp ), parameter :: b76 = - 0.0672210133996684449749399507414305856950086341525382182856200_wp real ( wp ), parameter :: b80 = 0.0936919065659673815530885456083005933866349695217750085655603_wp real ( wp ), parameter :: b81 = 0 real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 0.00613406843450510987229498995641664735620914507128858871007099_wp real ( wp ), parameter :: b86 = 0.216019825625503063708860097659866573490979433278117320188668_wp real ( wp ), parameter :: b87 = 0.423695063515761937337619073960976753205867469544123532683116_wp real ( wp ), parameter :: b90 = 0.0838479812409052664616968791372814085980533139224911131069335_wp real ( wp ), parameter :: b91 = 0 real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = - 0.0117949367100973814319755056031295775367961960590736150777613_wp real ( wp ), parameter :: b96 = - 0.247299020568812652339473838743194598325992840353340132697498_wp real ( wp ), parameter :: b97 = 0.0978080858367729012259313014081291665503740655476733940756599_wp real ( wp ), parameter :: b98 = 0.217590689243420631360008651767860318344168120024782176879989_wp real ( wp ), parameter :: b100 = 0.0615255359769428227954562389614314714333423969064821107453940_wp real ( wp ), parameter :: b101 = 0 real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0.00592232780324503308042990005798046524738389560444257136834990_wp real ( wp ), parameter :: b106 = 0.470326159963841112217224303205894113455362530746108825010848_wp real ( wp ), parameter :: b107 = 0.299688863848679000853981837096192399136831121671781279184194_wp real ( wp ), parameter :: b108 = - 0.247656877593994914689992276329810825853958069263947095548189_wp real ( wp ), parameter :: b109 = 0.110895029771437682893999851839061714522445173600678718208625_wp real ( wp ), parameter :: b110 = 0.0419700073362782579861792864787277787213483656543104611245994_wp real ( wp ), parameter :: b111 = 0 real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = - 0.00317987696266205093901912847692712407988609169703103952205634_wp real ( wp ), parameter :: b116 = 0.806397714906192077260821711520379506393543111567419750119748_wp real ( wp ), parameter :: b117 = 0.0975983126412388979093522850684288851314672048003054550357187_wp real ( wp ), parameter :: b118 = 0.778575578158398909027512446452927238999763460594181964958853_wp real ( wp ), parameter :: b119 = 0.204890423831599428189499202098105603312029235081420653574829_wp real ( wp ), parameter :: b1110 = - 1.56261579627468188307070943950527825211462892236424360892806_wp real ( wp ), parameter :: b120 = 0.0437726782233730163574465242495339811688214967071614123256973_wp real ( wp ), parameter :: b121 = 0 real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0.00624365027520195208794358628580933625281631216903095917201250_wp real ( wp ), parameter :: b129 = 0.200043097109577314994435165469647856829066232218264969608768_wp real ( wp ), parameter :: b1210 = - 0.00805328367804983036823857162048902911923392887337029314844206_wp real ( wp ), parameter :: b1211 = 0.0211517528067396521915711903523399601316877825157550573051221_wp real ( wp ), parameter :: b130 = 0.0283499250363514563095023591920717312247137654896477097768495_wp real ( wp ), parameter :: b131 = 0 real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0.00249163204855817407538949148805995149459884653585417680098222_wp real ( wp ), parameter :: b139 = 0.0230138787854593149638399846373742768772087122638142234223658_wp real ( wp ), parameter :: b1310 = - 0.00322155956692977098724476092467120878189463604760620461043308_wp real ( wp ), parameter :: b1311 = 0.00988442549447664668946335414487885256040819982786014648129297_wp real ( wp ), parameter :: b1312 = - 0.0213010771328887351384307642875927384886634565429572466632092_wp real ( wp ), parameter :: b140 = 0.343511894290243001049432234735147943083353174980701426268122_wp real ( wp ), parameter :: b141 = 0 real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0.210451912023627385609097011999010655788807405225626700040882_wp real ( wp ), parameter :: b149 = 1.03427452057230411936482926828825709938667999698324740166559_wp real ( wp ), parameter :: b1410 = 0.00600303645864422487051240448206640574939078092406156945568306_wp real ( wp ), parameter :: b1411 = 0.855938125099619537578012106002407728915062652616416005816477_wp real ( wp ), parameter :: b1412 = - 0.977235005036766810872264852372525633013107656892839677696022_wp real ( wp ), parameter :: b1413 = - 0.660026980479294694616225013856327693720573981219974874776419_wp real ( wp ), parameter :: b150 = - 0.0143574001672168069538206399935076366657755954378399880691949_wp real ( wp ), parameter :: b151 = 0 real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = - 0.0366253270049039970293685796848974791733119081733552207318285_wp real ( wp ), parameter :: b159 = 0.0350254975636213681976849406979846524346789082471103574920148_wp real ( wp ), parameter :: b1510 = 0.0360946016362113508931786658758335239823689929864237671348749_wp real ( wp ), parameter :: b1511 = - 0.0265219967553681106351595946834601923649627012457464284442911_wp real ( wp ), parameter :: b1512 = 0.0445699011305698119638911537508839908104336323082226770910408_wp real ( wp ), parameter :: b1513 = 0.124343093331358243286225595741786448038973408895106741855721_wp real ( wp ), parameter :: b1514 = 0.00413829693239480694403512496204335960426192908674476033832967_wp real ( wp ), parameter :: b160 = 0.356032404425120290975609116398089176264106222379748802654822_wp real ( wp ), parameter :: b161 = 0 real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = - 0.450192758947562595966821779075956175110645100214763601190349_wp real ( wp ), parameter :: b169 = 0.430527907083710898626656292808782917793030154094709462877146_wp real ( wp ), parameter :: b1610 = 0.511973029011022237668556960394071692077125787030651386389972_wp real ( wp ), parameter :: b1611 = 0.908303638886404260390159124638110213997496214819904630546596_wp real ( wp ), parameter :: b1612 = - 1.23921093371933931757372469151534028854413889248605726186520_wp real ( wp ), parameter :: b1613 = - 0.649048661671761465141672348879062553905402831967191097656668_wp real ( wp ), parameter :: b1614 = 0.251708904586819292210480529948970541404887852931447491219418_wp real ( wp ), parameter :: b1615 = 0.779906470345586398810756795282334476023540593411550187024263_wp real ( wp ), parameter :: b170 = 0.0130935687406513066406881206418834980127470438213192487844956_wp real ( wp ), parameter :: b171 = 0 real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 0 real ( wp ), parameter :: b1710 = 0 real ( wp ), parameter :: b1711 = 0 real ( wp ), parameter :: b1712 = - 0.0000932053067985113945908461962767108237858631509684667142124826_wp real ( wp ), parameter :: b1713 = 0.0505374334262299359640090443138590726770942344716122381702746_wp real ( wp ), parameter :: b1714 = 8.04470341944487979109579109610197797641311868930865361048975e-7_wp real ( wp ), parameter :: b1715 = 0.000591726029494171190528755742777717259844340971924321528178248_wp real ( wp ), parameter :: b1716 = - 4.01614722154557337064691684906375587732264247950093804676867e-7_wp real ( wp ), parameter :: b180 = 0.0207926484466053012541944544000765652167255206144373407979758_wp real ( wp ), parameter :: b181 = 0 real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = 0 real ( wp ), parameter :: b189 = 0 real ( wp ), parameter :: b1810 = 0 real ( wp ), parameter :: b1811 = 0 real ( wp ), parameter :: b1812 = 0.000582695918800085915101902697837284108951406103029871570103075_wp real ( wp ), parameter :: b1813 = - 0.00801700732358815939083342186525852746640558465919633524655451_wp real ( wp ), parameter :: b1814 = 4.03847643847136940375170821743560570484117290330895506618968e-6_wp real ( wp ), parameter :: b1815 = 0.0854609998055506144225056114567535602510114622033622491802597_wp real ( wp ), parameter :: b1816 = - 2.04486480935804242706707569691004307904442837552677456232848e-6_wp real ( wp ), parameter :: b1817 = 0.105328578824431893399799402979093997354240904235172843146582_wp real ( wp ), parameter :: b190 = 1.40153449795736021415446247355771306718486452917597731683689_wp real ( wp ), parameter :: b191 = 0 real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = 0 real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0 real ( wp ), parameter :: b199 = 0 real ( wp ), parameter :: b1910 = 0 real ( wp ), parameter :: b1911 = 0 real ( wp ), parameter :: b1912 = - 0.230252000984221261616272410367415621261130298274455611733277_wp real ( wp ), parameter :: b1913 = - 7.21106840466912905659582237106874247165856493509961561958267_wp real ( wp ), parameter :: b1914 = 0.00372901560694836335236995327852132340217759566678662385552634_wp real ( wp ), parameter :: b1915 = - 4.71415495727125020678778179392224757011323373221820091641216_wp real ( wp ), parameter :: b1916 = - 0.00176367657545349242053841995032797673574903886695600132759652_wp real ( wp ), parameter :: b1917 = 7.64130548038698765563029310880237651185173367813936997648198_wp real ( wp ), parameter :: b1918 = 3.50602043659751834989896082949744710968212949893375368243588_wp real ( wp ), parameter :: b200 = 1 1.9514650694120686799372385830716401674473610826553517297976_wp real ( wp ), parameter :: b201 = 0 real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = 0 real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = 0 real ( wp ), parameter :: b2010 = 0 real ( wp ), parameter :: b2011 = 0 real ( wp ), parameter :: b2012 = 7.79480932108175968783516700231764388220284279598980948538579_wp real ( wp ), parameter :: b2013 = - 5 6.4501393867325792523560991120904281440468100061340556540132_wp real ( wp ), parameter :: b2014 = 0.0912376306930644901344530449290276645709607450403673704844997_wp real ( wp ), parameter :: b2015 = - 1 2.7336279925434886201945524309199275038162717529918963305155_wp real ( wp ), parameter :: b2016 = - 0.0396895921904719712313542810939736674712383070433147873009352_wp real ( wp ), parameter :: b2017 = 5 4.4392141883570886996225765155307791861438378423305337073797_wp real ( wp ), parameter :: b2018 = - 3.64411637921569236846406990361350645806721478409266709351203_wp real ( wp ), parameter :: b2019 = - 0.804503249910509910899030787958579499315694913210787878260459_wp real ( wp ), parameter :: b210 = - 14 8.809426507100488427838868268647625561930612082148597076690_wp real ( wp ), parameter :: b211 = 0 real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0 real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0 real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = 0 real ( wp ), parameter :: b2112 = - 9 1.7295278291256484357935662402321623495228729036354276506427_wp real ( wp ), parameter :: b2113 = 70 7.656144971598359834575719286335716154821128966649565194286_wp real ( wp ), parameter :: b2114 = - 1.10563611857482440905296961311590930801338308942637769555540_wp real ( wp ), parameter :: b2115 = 17 6.134591883811372587859898076055660406999516762301689616841_wp real ( wp ), parameter :: b2116 = 0.491384824214880662268898345164454557416884631402764792538746_wp real ( wp ), parameter :: b2117 = - 68 4.278000449814944358237535610895081956077167893600278300805_wp real ( wp ), parameter :: b2118 = 2 7.9910604998398258984224332124380407446002518400668657974589_wp real ( wp ), parameter :: b2119 = 1 3.1939710030282333443670964371153238435064159623744975073252_wp real ( wp ), parameter :: b2120 = 1.25128781283980445450114974148056006317268830077396406361417_wp real ( wp ), parameter :: b220 = - 9.67307946948196763644126118433219395839951408571877262880482_wp real ( wp ), parameter :: b221 = 0 real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = 0 real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = - 4.46990150858505531443846227701960360497830681408751431146712_wp real ( wp ), parameter :: b2213 = 4 5.5127128690952681968241950400052751178905907817398483534845_wp real ( wp ), parameter :: b2214 = - 0.0713085086183826912791492024438246129930559805352394367050813_wp real ( wp ), parameter :: b2215 = 1 1.2273614068412741582590624479939384207826800776794485051540_wp real ( wp ), parameter :: b2216 = 0.126244376717622724516237912909138809361786889819105426371393_wp real ( wp ), parameter :: b2217 = - 4 3.5439339549483313605810624907242107623814304467621407753424_wp real ( wp ), parameter :: b2218 = 0.787174307543058978398792994996550902064546091443233850464377_wp real ( wp ), parameter :: b2219 = 0.532264696744684215669300708603886690785395776821503851830821_wp real ( wp ), parameter :: b2220 = 0.422422733996325326010225127471388772575086538809603346825334_wp real ( wp ), parameter :: b2221 = 0.0859131249503067107308438031499859443441115056294154956487671_wp real ( wp ), parameter :: b230 = - 1 0.0664032447054702403396606900426891472202824757968765569183_wp real ( wp ), parameter :: b231 = 0 real ( wp ), parameter :: b232 = 0 real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = - 0.0366253270049039970293685796848974791733119081733552207318285_wp real ( wp ), parameter :: b239 = 0.0350254975636213681976849406979846524346789082471103574920148_wp real ( wp ), parameter :: b2310 = 0.0360946016362113508931786658758335239823689929864237671348749_wp real ( wp ), parameter :: b2311 = - 0.0265219967553681106351595946834601923649627012457464284442911_wp real ( wp ), parameter :: b2312 = - 6.27088972181464143590553149478871603839356122957396018530209_wp real ( wp ), parameter :: b2313 = 4 8.2079237442562989090702103008195063923492593141636117832993_wp real ( wp ), parameter :: b2314 = - 0.0694471689136165640882395180583732834557754169149088630301342_wp real ( wp ), parameter :: b2315 = 1 2.6810690204850295698341370913609807066108483811412127009785_wp real ( wp ), parameter :: b2316 = 0.0119671168968323754838161435501011294100927813964199613229864_wp real ( wp ), parameter :: b2317 = - 4 6.7249764992482408003358268242662695593201321659795608950429_wp real ( wp ), parameter :: b2318 = 1.33029613326626711314710039298216591399033511191227101321435_wp real ( wp ), parameter :: b2319 = 1.00766787503398298353438903619926657771162717793661719708370_wp real ( wp ), parameter :: b2320 = 0.0209512051933665091664122388475480702892770753864487241177616_wp real ( wp ), parameter :: b2321 = 0.0210134706331264177317735424331396407424412188443757490871603_wp real ( wp ), parameter :: b2322 = 0.00952196014417121794175101542454575907376360233658356240547761_wp real ( wp ), parameter :: b240 = - 40 9.478081677743708772589097409370357624424341606752069725341_wp real ( wp ), parameter :: b241 = 0 real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0.210451912023627385609097011999010655788807405225626700040882_wp real ( wp ), parameter :: b249 = 1.03427452057230411936482926828825709938667999698324740166559_wp real ( wp ), parameter :: b2410 = 0.00600303645864422487051240448206640574939078092406156945568306_wp real ( wp ), parameter :: b2411 = 0.855938125099619537578012106002407728915062652616416005816477_wp real ( wp ), parameter :: b2412 = - 25 0.516998547447860492777657729316130386584050420782075966990_wp real ( wp ), parameter :: b2413 = 194 6.42466652388427766053750328264758595829850895761428240231_wp real ( wp ), parameter :: b2414 = - 3.04503882102310365506105809086860882786950544097602101685174_wp real ( wp ), parameter :: b2415 = 49 0.626379528281713521208265299168083841598542274061671576230_wp real ( wp ), parameter :: b2416 = 1.56647589531270907115484067013597445739595615245966775329993_wp real ( wp ), parameter :: b2417 = - 188 1.97428994011173362217267377035870619215906638453056643641_wp real ( wp ), parameter :: b2418 = 7 5.2592224724847175278837713643303149821620618914245864351135_wp real ( wp ), parameter :: b2419 = 3 4.5734356980331067622434344736554689696728644793551014989002_wp real ( wp ), parameter :: b2420 = 3.21147679440968961435417361847073755169022966748891627882572_wp real ( wp ), parameter :: b2421 = - 0.460408041738414391307201404237058848867245095265382820823055_wp real ( wp ), parameter :: b2422 = - 0.0870718339841810522431884137957986245724252047388936572215438_wp real ( wp ), parameter :: b2423 = - 7.39351814158303067567016952195521063999185773249132944724553_wp real ( wp ), parameter :: b250 = 3.43347475853550878921093496257596781120623891072008459930197_wp real ( wp ), parameter :: b251 = 0 real ( wp ), parameter :: b252 = 0 real ( wp ), parameter :: b253 = 0 real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = 0 real ( wp ), parameter :: b257 = 0 real ( wp ), parameter :: b258 = 0.00249163204855817407538949148805995149459884653585417680098222_wp real ( wp ), parameter :: b259 = 0.0230138787854593149638399846373742768772087122638142234223658_wp real ( wp ), parameter :: b2510 = - 0.00322155956692977098724476092467120878189463604760620461043308_wp real ( wp ), parameter :: b2511 = 0.00988442549447664668946335414487885256040819982786014648129297_wp real ( wp ), parameter :: b2512 = 2.16252799377922507788307841904757354045759225335732707916530_wp real ( wp ), parameter :: b2513 = - 1 6.2699864546457421328065640660139489006987552040228852402716_wp real ( wp ), parameter :: b2514 = - 0.128534502120524552843583417470935010538029037542654506231743_wp real ( wp ), parameter :: b2515 = - 8.98915042666504253089307820833379330486511746063552853023189_wp real ( wp ), parameter :: b2516 = - 0.00348595363232025333387080201851013650192401767250513765000963_wp real ( wp ), parameter :: b2517 = 1 5.7936194113339807536235187388695574135853387025139738341334_wp real ( wp ), parameter :: b2518 = - 0.574403330914095065628165482017335820148383663195675408024658_wp real ( wp ), parameter :: b2519 = - 0.345602039021393296692722496608124982535237228827655306030152_wp real ( wp ), parameter :: b2520 = - 0.00662241490206585091731619991383757781133067992707418687587487_wp real ( wp ), parameter :: b2521 = - 0.00777788129242204164032546458607364309759347209626759111946150_wp real ( wp ), parameter :: b2522 = - 0.00356084192402274913338827232697437364675240818791706587952939_wp real ( wp ), parameter :: b2523 = 4.79282506449930799649797749629840189457296934139359048988332_wp real ( wp ), parameter :: b2524 = 0.153725464873068577844576387402512082757034273069877432944621_wp real ( wp ), parameter :: b260 = 3 2.3038520871985442326994734440031535091364975047784630088983_wp real ( wp ), parameter :: b261 = 0 real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = - 0.00317987696266205093901912847692712407988609169703103952205634_wp real ( wp ), parameter :: b266 = 0.806397714906192077260821711520379506393543111567419750119748_wp real ( wp ), parameter :: b267 = 0.0975983126412388979093522850684288851314672048003054550357187_wp real ( wp ), parameter :: b268 = 0.778575578158398909027512446452927238999763460594181964958853_wp real ( wp ), parameter :: b269 = 0.204890423831599428189499202098105603312029235081420653574829_wp real ( wp ), parameter :: b2610 = - 1.56261579627468188307070943950527825211462892236424360892806_wp real ( wp ), parameter :: b2611 = 0 real ( wp ), parameter :: b2612 = 1 6.3429891882310570648504243973927174708753353504154550405647_wp real ( wp ), parameter :: b2613 = - 15 4.544555293543621230730189631471036399316683669609116705323_wp real ( wp ), parameter :: b2614 = 1.56971088703334872692034283417621761466263593582497085955201_wp real ( wp ), parameter :: b2615 = 3.27685545087248131321429817269900731165522404974733504794135_wp real ( wp ), parameter :: b2616 = - 0.0503489245193653176348040727199783626534081095691632396802451_wp real ( wp ), parameter :: b2617 = 15 3.321151858041665070593767885914694011224363102594556731397_wp real ( wp ), parameter :: b2618 = 7.17568186327720495846766484814784143567826308034865369443637_wp real ( wp ), parameter :: b2619 = - 2.94036748675300481945917659896930989215320594380777597403592_wp real ( wp ), parameter :: b2620 = - 0.0665845946076803144470749676022628870281920493197256887985612_wp real ( wp ), parameter :: b2621 = - 0.0462346054990843661229248668562217261176966514016859284197145_wp real ( wp ), parameter :: b2622 = - 0.0204198733585679401539388228617269778848579774821581777675337_wp real ( wp ), parameter :: b2623 = - 5 3.3523106438735850515953441165998107974045090495791591218714_wp real ( wp ), parameter :: b2624 = - 1.35548714715078654978732186705996404017554501614191325114947_wp real ( wp ), parameter :: b2625 = - 1.57196275801232751882901735171459249177687219114442583461866_wp real ( wp ), parameter :: b270 = - 1 6.6451467486341512872031294403931758764560371130818978459405_wp real ( wp ), parameter :: b271 = 0 real ( wp ), parameter :: b272 = 0 real ( wp ), parameter :: b273 = 0 real ( wp ), parameter :: b274 = 0 real ( wp ), parameter :: b275 = 0.00592232780324503308042990005798046524738389560444257136834990_wp real ( wp ), parameter :: b276 = 0.470326159963841112217224303205894113455362530746108825010848_wp real ( wp ), parameter :: b277 = 0.299688863848679000853981837096192399136831121671781279184194_wp real ( wp ), parameter :: b278 = - 0.247656877593994914689992276329810825853958069263947095548189_wp real ( wp ), parameter :: b279 = 0.110895029771437682893999851839061714522445173600678718208625_wp real ( wp ), parameter :: b2710 = 0 real ( wp ), parameter :: b2711 = - 0.491719043846229147070666628704194097678081907210673044988866_wp real ( wp ), parameter :: b2712 = - 1 1.4743154427289496968389492564352536350842454130853175250727_wp real ( wp ), parameter :: b2713 = 8 0.2593166576230272541702485886484400152793366623589989106256_wp real ( wp ), parameter :: b2714 = - 0.384132303980042847625312526759029103746926841342088219165648_wp real ( wp ), parameter :: b2715 = 7.28147667468107583471326950926136115767612581862877764249646_wp real ( wp ), parameter :: b2716 = - 0.132699384612248379510571708176035274836827341616751884314074_wp real ( wp ), parameter :: b2717 = - 8 1.0799832525730726674679289752255240006070716633632990308935_wp real ( wp ), parameter :: b2718 = - 1.25037492835620639521768185656179119962253747492403205797494_wp real ( wp ), parameter :: b2719 = 2.59263594969543681023776379504377324994226447359296887778718_wp real ( wp ), parameter :: b2720 = - 0.301440298346404539830163997260526875264431537275641495291993_wp real ( wp ), parameter :: b2721 = 0.221384460789832337451706451572773791695246839057318414301020_wp real ( wp ), parameter :: b2722 = 0.0827577274771892931955989870974693152996276435429809890551210_wp real ( wp ), parameter :: b2723 = 1 8.9960662040611520464672450037243263998175161412237156872211_wp real ( wp ), parameter :: b2724 = 0.269231946409639685623468015128334167460051910348912845121977_wp real ( wp ), parameter :: b2725 = 1.62674827447066537462989364929628933988125029284183680279020_wp real ( wp ), parameter :: b2726 = 0.491719043846229147070666628704194097678081907210673044988866_wp real ( wp ), parameter :: b280 = 0.0838479812409052664616968791372814085980533139224911131069335_wp real ( wp ), parameter :: b281 = 0 real ( wp ), parameter :: b282 = 0 real ( wp ), parameter :: b283 = 0 real ( wp ), parameter :: b284 = 0 real ( wp ), parameter :: b285 = - 0.0117949367100973814319755056031295775367961960590736150777613_wp real ( wp ), parameter :: b286 = - 0.247299020568812652339473838743194598325992840353340132697498_wp real ( wp ), parameter :: b287 = 0.0978080858367729012259313014081291665503740655476733940756599_wp real ( wp ), parameter :: b288 = 0.217590689243420631360008651767860318344168120024782176879989_wp real ( wp ), parameter :: b289 = 0 real ( wp ), parameter :: b2810 = 0.137585606763325224865659632196787746647447222975084865975440_wp real ( wp ), parameter :: b2811 = 0.0439870229715046685058790092341545026046103890294261359042581_wp real ( wp ), parameter :: b2812 = 0 real ( wp ), parameter :: b2813 = - 0.513700813768193341957004456618630303738757363641964030086972_wp real ( wp ), parameter :: b2814 = 0.826355691151315508644211308399153458701423158616168576922372_wp real ( wp ), parameter :: b2815 = 2 5.7018139719811832625873882972519939511136556341960074626615_wp real ( wp ), parameter :: b2816 = 0 real ( wp ), parameter :: b2817 = 0 real ( wp ), parameter :: b2818 = 0 real ( wp ), parameter :: b2819 = 0 real ( wp ), parameter :: b2820 = 0 real ( wp ), parameter :: b2821 = 0 real ( wp ), parameter :: b2822 = 0 real ( wp ), parameter :: b2823 = - 2 5.7018139719811832625873882972519939511136556341960074626615_wp real ( wp ), parameter :: b2824 = - 0.826355691151315508644211308399153458701423158616168576922372_wp real ( wp ), parameter :: b2825 = 0.513700813768193341957004456618630303738757363641964030086972_wp real ( wp ), parameter :: b2826 = - 0.0439870229715046685058790092341545026046103890294261359042581_wp real ( wp ), parameter :: b2827 = - 0.137585606763325224865659632196787746647447222975084865975440_wp real ( wp ), parameter :: b290 = 0.124380526654094412881516420868799316268491466359671423163289_wp real ( wp ), parameter :: b291 = 0 real ( wp ), parameter :: b292 = 0 real ( wp ), parameter :: b293 = 0 real ( wp ), parameter :: b294 = 0.226120282197584301422238662979202901196752320742633143965145_wp real ( wp ), parameter :: b295 = 0.0137885887618080880607695837016477814530969417491493385363543_wp real ( wp ), parameter :: b296 = - 0.0672210133996684449749399507414305856950086341525382182856200_wp real ( wp ), parameter :: b297 = 0 real ( wp ), parameter :: b298 = 0 real ( wp ), parameter :: b299 = - 0.856238975085428354755349769879501772112121597411563802855067_wp real ( wp ), parameter :: b2910 = - 1.96337522866858908928262850028093813988180440518267404553576_wp real ( wp ), parameter :: b2911 = - 0.232332822724119401237246257308921847250108199230419994978218_wp real ( wp ), parameter :: b2912 = 0 real ( wp ), parameter :: b2913 = 4.30660719086453349461668936876562947772432562053478092626764_wp real ( wp ), parameter :: b2914 = - 2.92722963249465482659787911202390446687687394950633612630592_wp real ( wp ), parameter :: b2915 = - 8 2.3131666397858944454492334105458707735761966428138676971041_wp real ( wp ), parameter :: b2916 = 0 real ( wp ), parameter :: b2917 = 0 real ( wp ), parameter :: b2918 = 0 real ( wp ), parameter :: b2919 = 0 real ( wp ), parameter :: b2920 = 0 real ( wp ), parameter :: b2921 = 0 real ( wp ), parameter :: b2922 = 0 real ( wp ), parameter :: b2923 = 8 2.3131666397858944454492334105458707735761966428138676971041_wp real ( wp ), parameter :: b2924 = 2.92722963249465482659787911202390446687687394950633612630592_wp real ( wp ), parameter :: b2925 = - 4.30660719086453349461668936876562947772432562053478092626764_wp real ( wp ), parameter :: b2926 = 0.232332822724119401237246257308921847250108199230419994978218_wp real ( wp ), parameter :: b2927 = 1.96337522866858908928262850028093813988180440518267404553576_wp real ( wp ), parameter :: b2928 = 0.856238975085428354755349769879501772112121597411563802855067_wp real ( wp ), parameter :: b300 = 0.103484561636679776672993546511910344499744798201971316606663_wp real ( wp ), parameter :: b301 = 0 real ( wp ), parameter :: b302 = 0 real ( wp ), parameter :: b303 = 0.122068887306407222589644082868962077139592714834162134741275_wp real ( wp ), parameter :: b304 = 0.482574490331246622475134780125688112865919023850168049679402_wp real ( wp ), parameter :: b305 = - 0.0381409600015606999730886240005620205664113072478411477421970_wp real ( wp ), parameter :: b306 = 0 real ( wp ), parameter :: b307 = - 0.550499525310802324138388507020508177411414311000037561712836_wp real ( wp ), parameter :: b308 = 0 real ( wp ), parameter :: b309 = - 0.711915811585189227887648262043794387578291882406745570495765_wp real ( wp ), parameter :: b3010 = - 0.584129605671551340432988730158480872095335329645227595707052_wp real ( wp ), parameter :: b3011 = 0 real ( wp ), parameter :: b3012 = 0 real ( wp ), parameter :: b3013 = 2.11046308125864932128717300046622750300375054278936987850718_wp real ( wp ), parameter :: b3014 = - 0.0837494736739572135525742023001037992695260175335123517729291_wp real ( wp ), parameter :: b3015 = 5.10021499072320914075295969043344113107545060862804249161191_wp real ( wp ), parameter :: b3016 = 0 real ( wp ), parameter :: b3017 = 0 real ( wp ), parameter :: b3018 = 0 real ( wp ), parameter :: b3019 = 0 real ( wp ), parameter :: b3020 = 0 real ( wp ), parameter :: b3021 = 0 real ( wp ), parameter :: b3022 = 0 real ( wp ), parameter :: b3023 = - 5.10021499072320914075295969043344113107545060862804249161191_wp real ( wp ), parameter :: b3024 = 0.0837494736739572135525742023001037992695260175335123517729291_wp real ( wp ), parameter :: b3025 = - 2.11046308125864932128717300046622750300375054278936987850718_wp real ( wp ), parameter :: b3026 = 0 real ( wp ), parameter :: b3027 = 0.584129605671551340432988730158480872095335329645227595707052_wp real ( wp ), parameter :: b3028 = 0.711915811585189227887648262043794387578291882406745570495765_wp real ( wp ), parameter :: b3029 = 0.550499525310802324138388507020508177411414311000037561712836_wp real ( wp ), parameter :: b310 = 0.193333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b311 = 0 real ( wp ), parameter :: b312 = 0.220000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b313 = - 0.0800000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b314 = 0 real ( wp ), parameter :: b315 = 0 real ( wp ), parameter :: b316 = 0.109993425580724703919462404865068340845119058295846426463652_wp real ( wp ), parameter :: b317 = - 0.254297048076270161384068506997153122141835626976703920846242_wp real ( wp ), parameter :: b318 = 0 real ( wp ), parameter :: b319 = 0.865570777116694254343770343821098281832847401233011859346737_wp real ( wp ), parameter :: b3110 = 3.32416449114093083106799552786572018336860092936986407160200_wp real ( wp ), parameter :: b3111 = 0 real ( wp ), parameter :: b3112 = 0 real ( wp ), parameter :: b3113 = - 1 2.0102223315977933882352385148661841260301942633996815127277_wp real ( wp ), parameter :: b3114 = 0.476601466242493239430442776862061899602963782003580209476163_wp real ( wp ), parameter :: b3115 = - 2 9.0243011221036390525802623213654099596251221332470910692353_wp real ( wp ), parameter :: b3116 = 0 real ( wp ), parameter :: b3117 = 0 real ( wp ), parameter :: b3118 = 0 real ( wp ), parameter :: b3119 = 0 real ( wp ), parameter :: b3120 = 0 real ( wp ), parameter :: b3121 = 0 real ( wp ), parameter :: b3122 = 0 real ( wp ), parameter :: b3123 = 2 9.0243011221036390525802623213654099596251221332470910692353_wp real ( wp ), parameter :: b3124 = - 0.476601466242493239430442776862061899602963782003580209476163_wp real ( wp ), parameter :: b3125 = 1 2.0102223315977933882352385148661841260301942633996815127277_wp real ( wp ), parameter :: b3126 = 0 real ( wp ), parameter :: b3127 = - 3.32416449114093083106799552786572018336860092936986407160200_wp real ( wp ), parameter :: b3128 = - 0.865570777116694254343770343821098281832847401233011859346737_wp real ( wp ), parameter :: b3129 = 0.254297048076270161384068506997153122141835626976703920846242_wp real ( wp ), parameter :: b3130 = - 0.109993425580724703919462404865068340845119058295846426463652_wp real ( wp ), parameter :: b320 = - 0.833333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: b321 = 1.38888888888888888888888888888888888888888888888888888888889_wp real ( wp ), parameter :: b322 = 0 real ( wp ), parameter :: b323 = 0 real ( wp ), parameter :: b324 = - 0.750000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b325 = 0 real ( wp ), parameter :: b326 = - 0.492529543718026304422682049114021320200214681580657784719074_wp real ( wp ), parameter :: b327 = 0 real ( wp ), parameter :: b328 = 0 real ( wp ), parameter :: b329 = 0 real ( wp ), parameter :: b3210 = 0 real ( wp ), parameter :: b3211 = 0 real ( wp ), parameter :: b3212 = 0 real ( wp ), parameter :: b3213 = 0 real ( wp ), parameter :: b3214 = 0 real ( wp ), parameter :: b3215 = 0 real ( wp ), parameter :: b3216 = 0 real ( wp ), parameter :: b3217 = 0 real ( wp ), parameter :: b3218 = 0 real ( wp ), parameter :: b3219 = 0 real ( wp ), parameter :: b3220 = 0 real ( wp ), parameter :: b3221 = 0 real ( wp ), parameter :: b3222 = 0 real ( wp ), parameter :: b3223 = 0 real ( wp ), parameter :: b3224 = 0 real ( wp ), parameter :: b3225 = 0 real ( wp ), parameter :: b3226 = 0 real ( wp ), parameter :: b3227 = 0 real ( wp ), parameter :: b3228 = 0 real ( wp ), parameter :: b3229 = 0 real ( wp ), parameter :: b3230 = 0.492529543718026304422682049114021320200214681580657784719074_wp real ( wp ), parameter :: b3231 = 0.750000000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b330 = 0.111111111111111111111111111111111111111111111111111111111111_wp real ( wp ), parameter :: b331 = 0 real ( wp ), parameter :: b332 = - 0.222222222222222222222222222222222222222222222222222222222222_wp real ( wp ), parameter :: b333 = 0 real ( wp ), parameter :: b334 = 0 real ( wp ), parameter :: b335 = 0 real ( wp ), parameter :: b336 = 0 real ( wp ), parameter :: b337 = 0 real ( wp ), parameter :: b338 = 0 real ( wp ), parameter :: b339 = 0 real ( wp ), parameter :: b3310 = 0 real ( wp ), parameter :: b3311 = 0 real ( wp ), parameter :: b3312 = 0 real ( wp ), parameter :: b3313 = 0 real ( wp ), parameter :: b3314 = 0 real ( wp ), parameter :: b3315 = 0 real ( wp ), parameter :: b3316 = 0 real ( wp ), parameter :: b3317 = 0 real ( wp ), parameter :: b3318 = 0 real ( wp ), parameter :: b3319 = 0 real ( wp ), parameter :: b3320 = 0 real ( wp ), parameter :: b3321 = 0 real ( wp ), parameter :: b3322 = 0 real ( wp ), parameter :: b3323 = 0 real ( wp ), parameter :: b3324 = 0 real ( wp ), parameter :: b3325 = 0 real ( wp ), parameter :: b3326 = 0 real ( wp ), parameter :: b3327 = 0 real ( wp ), parameter :: b3328 = 0 real ( wp ), parameter :: b3329 = 0 real ( wp ), parameter :: b3330 = 0 real ( wp ), parameter :: b3331 = 0 real ( wp ), parameter :: b3332 = 0.222222222222222222222222222222222222222222222222222222222222_wp real ( wp ), parameter :: b340 = 0.285835140388971558796088842163836414852927537894596466840753_wp real ( wp ), parameter :: b341 = 0.291666666666666666666666666666666666666666666666666666666667_wp real ( wp ), parameter :: b342 = 0.218750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b343 = 0 real ( wp ), parameter :: b344 = 0.164062500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b345 = 0 real ( wp ), parameter :: b346 = 0.218194354945556658327188241581352107093288824322187941141516_wp real ( wp ), parameter :: b347 = 0.180392898478697766863635221946775437719620053641849228562435_wp real ( wp ), parameter :: b348 = 0 real ( wp ), parameter :: b349 = 0.205713839404845018859120755122929542277570094982808905393991_wp real ( wp ), parameter :: b3410 = 0.242715791581770239970282927959446515762745971386670541948576_wp real ( wp ), parameter :: b3411 = 0.246465780813629305833609291181891407799228103869305705137021_wp real ( wp ), parameter :: b3412 = - 3.44991940790890824979834154601622662060370460614931644223924_wp real ( wp ), parameter :: b3413 = 0.228875562160036081760729060738458584294220372552740218459295_wp real ( wp ), parameter :: b3414 = 0.283290599702151415321527419056733335978436595493855789831434_wp real ( wp ), parameter :: b3415 = 3.21085125837766640960131490544236787005557320332238705967955_wp real ( wp ), parameter :: b3416 = - 0.223538777364845699920233756214162507964125230083674032084065_wp real ( wp ), parameter :: b3417 = - 0.707121157204419073518727286207487212130091231955206160635271_wp real ( wp ), parameter :: b3418 = 3.21123345150287080408174729202856500893260034443022374267639_wp real ( wp ), parameter :: b3419 = 1.40954348309669766030414474301123175769045945573548986335553_wp real ( wp ), parameter :: b3420 = - 0.151362053443742613121602276742518111090963026203676055891793_wp real ( wp ), parameter :: b3421 = 0.372350574527014276454724080214619984397121028202148298716575_wp real ( wp ), parameter :: b3422 = 0.252978746406361336722199907762141285915775728129414319261111_wp real ( wp ), parameter :: b3423 = - 3.21085125837766640960131490544236787005557320332238705967955_wp real ( wp ), parameter :: b3424 = - 0.283290599702151415321527419056733335978436595493855789831434_wp real ( wp ), parameter :: b3425 = - 0.228875562160036081760729060738458584294220372552740218459295_wp real ( wp ), parameter :: b3426 = - 0.246465780813629305833609291181891407799228103869305705137021_wp real ( wp ), parameter :: b3427 = - 0.242715791581770239970282927959446515762745971386670541948576_wp real ( wp ), parameter :: b3428 = - 0.205713839404845018859120755122929542277570094982808905393991_wp real ( wp ), parameter :: b3429 = - 0.180392898478697766863635221946775437719620053641849228562435_wp real ( wp ), parameter :: b3430 = - 0.218194354945556658327188241581352107093288824322187941141516_wp real ( wp ), parameter :: b3431 = - 0.164062500000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b3432 = - 0.218750000000000000000000000000000000000000000000000000000000_wp real ( wp ), parameter :: b3433 = - 0.291666666666666666666666666666666666666666666666666666666667_wp associate ( f0 => me % funcs (:, 1 ), & f1 => me % funcs (:, 2 ), & f2 => me % funcs (:, 3 ), & f3 => me % funcs (:, 4 ), & f4 => me % funcs (:, 5 ), & f5 => me % funcs (:, 6 ), & f6 => me % funcs (:, 7 ), & f7 => me % funcs (:, 8 ), & f8 => me % funcs (:, 9 ), & f9 => me % funcs (:, 10 ), & f10 => me % funcs (:, 11 ), & f11 => me % funcs (:, 12 ), & f12 => me % funcs (:, 13 ), & f13 => me % funcs (:, 14 ), & f14 => me % funcs (:, 15 ), & f15 => me % funcs (:, 16 ), & f16 => me % funcs (:, 17 ), & f17 => me % funcs (:, 18 ), & f18 => me % funcs (:, 19 ), & f19 => me % funcs (:, 20 ), & f20 => me % funcs (:, 21 ), & f21 => me % funcs (:, 22 ), & f22 => me % funcs (:, 23 ), & f23 => me % funcs (:, 24 ), & f24 => me % funcs (:, 25 ), & f25 => me % funcs (:, 26 ), & f26 => me % funcs (:, 27 ), & f27 => me % funcs (:, 28 ), & f28 => me % funcs (:, 29 ), & f29 => me % funcs (:, 30 ), & f30 => me % funcs (:, 31 ), & f31 => me % funcs (:, 32 ), & f32 => me % funcs (:, 33 ), & f33 => me % funcs (:, 34 ), & f34 => me % funcs (:, 35 )) call me % f ( t + a0 * h , x , f0 ) call me % f ( t + a1 * h , x + h * ( b10 * f0 ), f1 ) call me % f ( t + a2 * h , x + h * ( b20 * f0 + b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b30 * f0 + b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b40 * f0 + b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + h , x + h * ( b50 * f0 + b51 * f1 + b52 * f2 + b53 * f3 + & b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b60 * f0 + b61 * f1 + b62 * f2 + b63 * f3 + & b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b70 * f0 + b71 * f1 + b72 * f2 + b73 * f3 + & b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b80 * f0 + b81 * f1 + b82 * f2 + b83 * f3 + & b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b90 * f0 + b91 * f1 + b92 * f2 + b93 * f3 + & b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + & b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b100 * f0 + b101 * f1 + b102 * f2 + b103 * f3 + & b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b110 * f0 + b111 * f1 + b112 * f2 + b113 * f3 + & b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b120 * f0 + b121 * f1 + b122 * f2 + b123 * f3 + & b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b130 * f0 + b131 * f1 + b132 * f2 + b133 * f3 + & b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + & b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b140 * f0 + b141 * f1 + b142 * f2 + b143 * f3 + & b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + & b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b150 * f0 + b151 * f1 + b152 * f2 + b153 * f3 + & b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + & b1512 * f12 + b1513 * f13 + b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b160 * f0 + b161 * f1 + b162 * f2 + b163 * f3 + & b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + & b1612 * f12 + b1613 * f13 + b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b170 * f0 + b171 * f1 + b172 * f2 + b173 * f3 + & b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + & b1712 * f12 + b1713 * f13 + b1714 * f14 + b1715 * f15 + & b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b180 * f0 + b181 * f1 + b182 * f2 + b183 * f3 + & b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + & b1812 * f12 + b1813 * f13 + b1814 * f14 + b1815 * f15 + & b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b190 * f0 + b191 * f1 + b192 * f2 + b193 * f3 + & b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + & b1912 * f12 + b1913 * f13 + b1914 * f14 + b1915 * f15 + & b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b200 * f0 + b201 * f1 + b202 * f2 + b203 * f3 + & b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + & b2012 * f12 + b2013 * f13 + b2014 * f14 + b2015 * f15 + & b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b210 * f0 + b211 * f1 + b212 * f2 + b213 * f3 + & b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + & b2112 * f12 + b2113 * f13 + b2114 * f14 + b2115 * f15 + & b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b220 * f0 + b221 * f1 + b222 * f2 + b223 * f3 + & b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + & b2212 * f12 + b2213 * f13 + b2214 * f14 + b2215 * f15 + & b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b230 * f0 + b231 * f1 + b232 * f2 + b233 * f3 + & b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + & b2312 * f12 + b2313 * f13 + b2314 * f14 + b2315 * f15 + & b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b240 * f0 + b241 * f1 + b242 * f2 + b243 * f3 + & b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + & b2412 * f12 + b2413 * f13 + b2414 * f14 + b2415 * f15 + & b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + a25 * h , x + h * ( b250 * f0 + b251 * f1 + b252 * f2 + b253 * f3 + & b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + & b2512 * f12 + b2513 * f13 + b2514 * f14 + b2515 * f15 + & b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + & b2524 * f24 ), f25 ) call me % f ( t + a26 * h , x + h * ( b260 * f0 + b261 * f1 + b262 * f2 + b263 * f3 + & b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + & b2612 * f12 + b2613 * f13 + b2614 * f14 + b2615 * f15 + & b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + & b2624 * f24 + b2625 * f25 ), f26 ) call me % f ( t + a27 * h , x + h * ( b270 * f0 + b271 * f1 + b272 * f2 + b273 * f3 + & b274 * f4 + b275 * f5 + b276 * f6 + b277 * f7 + & b278 * f8 + b279 * f9 + b2710 * f10 + b2711 * f11 + & b2712 * f12 + b2713 * f13 + b2714 * f14 + b2715 * f15 + & b2716 * f16 + b2717 * f17 + b2718 * f18 + b2719 * f19 + & b2720 * f20 + b2721 * f21 + b2722 * f22 + b2723 * f23 + & b2724 * f24 + b2725 * f25 + b2726 * f26 ), f27 ) call me % f ( t + a28 * h , x + h * ( b280 * f0 + b281 * f1 + b282 * f2 + b283 * f3 + & b284 * f4 + b285 * f5 + b286 * f6 + b287 * f7 + & b288 * f8 + b289 * f9 + b2810 * f10 + b2811 * f11 + & b2812 * f12 + b2813 * f13 + b2814 * f14 + b2815 * f15 + & b2816 * f16 + b2817 * f17 + b2818 * f18 + b2819 * f19 + & b2820 * f20 + b2821 * f21 + b2822 * f22 + b2823 * f23 + & b2824 * f24 + b2825 * f25 + b2826 * f26 + b2827 * f27 ), f28 ) call me % f ( t + a29 * h , x + h * ( b290 * f0 + b291 * f1 + b292 * f2 + b293 * f3 + & b294 * f4 + b295 * f5 + b296 * f6 + b297 * f7 + & b298 * f8 + b299 * f9 + b2910 * f10 + b2911 * f11 + & b2912 * f12 + b2913 * f13 + b2914 * f14 + b2915 * f15 + & b2916 * f16 + b2917 * f17 + b2918 * f18 + b2919 * f19 + & b2920 * f20 + b2921 * f21 + b2922 * f22 + b2923 * f23 + & b2924 * f24 + b2925 * f25 + b2926 * f26 + b2927 * f27 + & b2928 * f28 ), f29 ) call me % f ( t + a30 * h , x + h * ( b300 * f0 + b301 * f1 + b302 * f2 + b303 * f3 + & b304 * f4 + b305 * f5 + b306 * f6 + b307 * f7 + & b308 * f8 + b309 * f9 + b3010 * f10 + b3011 * f11 + & b3012 * f12 + b3013 * f13 + b3014 * f14 + b3015 * f15 + & b3016 * f16 + b3017 * f17 + b3018 * f18 + b3019 * f19 + & b3020 * f20 + b3021 * f21 + b3022 * f22 + b3023 * f23 + & b3024 * f24 + b3025 * f25 + b3026 * f26 + b3027 * f27 + & b3028 * f28 + b3029 * f29 ), f30 ) call me % f ( t + a31 * h , x + h * ( b310 * f0 + b311 * f1 + b312 * f2 + b313 * f3 + & b314 * f4 + b315 * f5 + b316 * f6 + b317 * f7 + & b318 * f8 + b319 * f9 + b3110 * f10 + b3111 * f11 + & b3112 * f12 + b3113 * f13 + b3114 * f14 + b3115 * f15 + & b3116 * f16 + b3117 * f17 + b3118 * f18 + b3119 * f19 + & b3120 * f20 + b3121 * f21 + b3122 * f22 + b3123 * f23 + & b3124 * f24 + b3125 * f25 + b3126 * f26 + b3127 * f27 + & b3128 * f28 + b3129 * f29 + b3130 * f30 ), f31 ) call me % f ( t + a32 * h , x + h * ( b320 * f0 + b321 * f1 + b322 * f2 + b323 * f3 + & b324 * f4 + b325 * f5 + b326 * f6 + b327 * f7 + & b328 * f8 + b329 * f9 + b3210 * f10 + b3211 * f11 + & b3212 * f12 + b3213 * f13 + b3214 * f14 + b3215 * f15 + & b3216 * f16 + b3217 * f17 + b3218 * f18 + b3219 * f19 + & b3220 * f20 + b3221 * f21 + b3222 * f22 + b3223 * f23 + & b3224 * f24 + b3225 * f25 + b3226 * f26 + b3227 * f27 + & b3228 * f28 + b3229 * f29 + b3230 * f30 + b3231 * f31 ), f32 ) call me % f ( t + a33 * h , x + h * ( b330 * f0 + b331 * f1 + b332 * f2 + b333 * f3 + & b334 * f4 + b335 * f5 + b336 * f6 + b337 * f7 + & b338 * f8 + b339 * f9 + b3310 * f10 + b3311 * f11 + & b3312 * f12 + b3313 * f13 + b3314 * f14 + b3315 * f15 + & b3316 * f16 + b3317 * f17 + b3318 * f18 + b3319 * f19 + & b3320 * f20 + b3321 * f21 + b3322 * f22 + b3323 * f23 + & b3324 * f24 + b3325 * f25 + b3326 * f26 + b3327 * f27 + & b3328 * f28 + b3329 * f29 + b3330 * f30 + b3331 * f31 + & b3332 * f32 ), f33 ) call me % f ( t + h , x + h * ( b340 * f0 + b341 * f1 + b342 * f2 + b343 * f3 + & b344 * f4 + b345 * f5 + b346 * f6 + b347 * f7 + & b348 * f8 + b349 * f9 + b3410 * f10 + b3411 * f11 + & b3412 * f12 + b3413 * f13 + b3414 * f14 + b3415 * f15 + & b3416 * f16 + b3417 * f17 + b3418 * f18 + b3419 * f19 + & b3420 * f20 + b3421 * f21 + b3422 * f22 + b3423 * f23 + & b3424 * f24 + b3425 * f25 + b3426 * f26 + b3427 * f27 + & b3428 * f28 + b3429 * f29 + b3430 * f30 + b3431 * f31 + & b3432 * f32 + b3433 * f33 ), f34 ) xf = x + h * ( c0 * f0 + & c1 * f1 + & c2 * f2 + & c3 * f3 + & c4 * f4 + & c5 * f5 + & c6 * f6 + & c7 * f7 + & c8 * f8 + & c9 * f9 + & c10 * f10 + & c11 * f11 + & c12 * f12 + & c13 * f13 + & c14 * f14 + & c15 * f15 + & c16 * f16 + & c17 * f17 + & c18 * f18 + & c19 * f19 + & c20 * f20 + & c21 * f21 + & c22 * f22 + & c23 * f23 + & c24 * f24 + & c25 * f25 + & c26 * f26 + & c27 * f27 + & c28 * f28 + & c29 * f29 + & c30 * f30 + & c31 * f31 + & c32 * f32 + & c33 * f33 + & c34 * f34 ) xerr = ( 1.0_wp / 100 0.0_wp ) * h * ( f1 - f33 ) end associate end procedure rkf1412 !***************************************************************************************** !***************************************************************************************** !> ! A modification of Hiroshi Ono's order 12 Runge-Kutta scheme with an order 9 embedded scheme. ! !### Reference ! * Hiroshi Ono, On the 25 stage 12th order explicit Runge-Kutta method, ! Transactions of the Japan Society for Industrial and applied Mathematics, ! Vol. 6, No. 3, (2006) pages 177 to 186. ! * [Rational coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK12/RKcoeff12h(9)_1.pdf) module procedure rko129 real ( wp ), parameter :: a2 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: a3 = . 4429824561403508771929824561403508771929824561403508771929824561403508771929824561404_wp real ( wp ), parameter :: a4 = . 6644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a5 = . 1069403994175161223216143124609943831911795298522987310172664863740378614520490950697_wp real ( wp ), parameter :: a6 = . 1644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a7 = . 5843251088534107402031930333817126269956458635703918722786647314949201741654571843251_wp real ( wp ), parameter :: a8 = . 638235823582358235823582358235823582358235823582358235823582358235823582358235823582 4e-1_wp real ( wp ), parameter :: a9 = . 2_wp real ( wp ), parameter :: a10 = . 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a11 = . 9446116054065563496847375720237340591364440847545279548637407620203329280139199114088_wp real ( wp ), parameter :: a12 = . 517958468042846103583561546018520744975699682842555186643768358860080707177531652329 9e-1_wp real ( wp ), parameter :: a13 = . 848880518607165350639838930162674302064148175640019542045933939835577399136547623689 3e-1_wp real ( wp ), parameter :: a14 = . 2655756032646428930981140590456168352972012641640776214486652703185222349414361456016_wp real ( wp ), parameter :: a15 = . 5_wp real ( wp ), parameter :: a16 = . 7344243967353571069018859409543831647027987358359223785513347296814777650585638543984_wp real ( wp ), parameter :: a17 = . 9151119481392834649360161069837325697935851824359980457954066060164422600863452376311_wp real ( wp ), parameter :: a18 = . 9446116054065563496847375720237340591364440847545279548637407620203329280139199114088_wp real ( wp ), parameter :: a19 = . 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333_wp real ( wp ), parameter :: a20 = . 2_wp real ( wp ), parameter :: a21 = . 5843251088534107402031930333817126269956458635703918722786647314949201741654571843251_wp real ( wp ), parameter :: a22 = . 1644736842105263157894736842105263157894736842105263157894736842105263157894736842105_wp real ( wp ), parameter :: a23 = . 4429824561403508771929824561403508771929824561403508771929824561403508771929824561404_wp real ( wp ), parameter :: a24 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: a26 = . 4970267001007476028032930885363848318550815967070143979104342007017543082576391973337_wp real ( wp ), parameter :: a27 = . 8043478260869565217391304347826086956521739130434782608695652173913043478260869565217_wp real ( wp ), parameter :: a28 = . 8717948717948717948717948717948717948717948717948717948717948717948717948717948717949_wp real ( wp ), parameter :: b21 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: b31 = . 2175227402212137286104398734798923400326123258875071216675507357419304139407870179368_wp real ( wp ), parameter :: b32 = . 2254597159191371485825425826604585371603701302528437555254317203984204632521954382036_wp real ( wp ), parameter :: b41 = . 1661184210526315789473684210526315789473684210526315789473684210526315789473684210526_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 4983552631578947368421052631578947368421052631578947368421052631578947368421052631579_wp real ( wp ), parameter :: b51 = . 868116319391850886508062971348367434861757015968588067387847640565978467242743420384 0e-1_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = . 345698194816489700073969145264414902686690308557664993660770834466711552923005884794 3e-1_wp real ( wp ), parameter :: b54 = - . 144410520033179363365888992002838505636652026003265750875953611292311405645258354481 3e-1_wp real ( wp ), parameter :: b61 = . 385095150452495257524472652032440486089882384495048449013834354160100060557967490878 0e-1_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 988960436365138246281279890087054828228880214355390339282842353649005342442634557770 9e-4_wp real ( wp ), parameter :: b65 = . 1258652731216402762123982910182735616976625577395859318541619645591514091994326716669_wp real ( wp ), parameter :: b71 = . 5247404461891304721708365639844356354386624470737997647397329116437616959059854701778_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = . 761065142996594199093194619029637366053392213020890064309256066192065214626881542488 5e-1_wp real ( wp ), parameter :: b75 = - 2.135538596825204678401302463372339475781988628449683891486081018353295131152366999963_wp real ( wp ), parameter :: b76 = 2.119016745189825526524339470866652730733632823644186992594087231585247087949150559862_wp real ( wp ), parameter :: b81 = . 357212285662448455541265687141030945465725440295435052935699446623421246269969587909 9e-1_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = . 459620564150930516186348331167536088629302663269296108637431417541052894512993142903 1e-1_wp real ( wp ), parameter :: b86 = - . 180001695771321981237678151321526106635447258200512575934451574464465594713570707049 3e-1_wp real ( wp ), parameter :: b87 = . 140466954030124533364649124878265489865497821813965018490306853581503628884379981869 3e-3_wp real ( wp ), parameter :: b91 = . 188817680918410841368041970623750570428186401597341841315329936466352436434195573491 3e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 838119832974093938375846726868412810663829046917352897587294440924486336538798165765 1e-1_wp real ( wp ), parameter :: b97 = . 903158524143645065933962687778655672713424456919245602077150967097143544457382512132 8e-5_wp real ( wp ), parameter :: b98 = . 972972170255080855749517906239058753340713209039613336537167907512451512672560522492 4e-1_wp real ( wp ), parameter :: b101 = - . 408006770346984638700159900758509441664528517965669688200664569678127494169619133857 0e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = - . 6005539308646711394173617417282635784603029781694346062080009050806164919590318269156_wp real ( wp ), parameter :: b107 = . 158522265836790182309281028999566036555827711428336394628411304404714126967580974148 1e-2_wp real ( wp ), parameter :: b108 = . 3026658851734428583799288358366834830670493200050903757742452562250879940584583879948_wp real ( wp ), parameter :: b109 = . 6704368334008921764176894190107687125274815661799611686408713261126274393811928758984_wp real ( wp ), parameter :: b111 = 6.344326927733666873696263058980778771328558370914152084380122688263116113189631874466_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = 0 real ( wp ), parameter :: b117 = 1.975263319684766813850955500728188106557880392559127720135666889111189136253813975729_wp real ( wp ), parameter :: b118 = - 1 3.82822337504897849061527131653164721900473695395858210726164571154383357718661916508_wp real ( wp ), parameter :: b119 = 1 4.82423926991066347292103944504014293055447712090877566105421769783705551827529470930_wp real ( wp ), parameter :: b1110 = - 8.370994536873562320168249116193728530299734845668945403444620801647194262518201483006_wp real ( wp ), parameter :: b121 = - . 991078378147037573501842470699034248447825996342712119061634343225949328690350107075 0e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = - 1.046319958132641377892211373672215159710875883372049858922517534871447317958500644882_wp real ( wp ), parameter :: b127 = - . 466257880125602996782630170191220860572777682230191692805172265363409063662390261522 1e-3_wp real ( wp ), parameter :: b128 = . 4243518408197806737520879584209906999975132950474577957967837636354467847566731274758_wp real ( wp ), parameter :: b129 = . 8350767448298191909277817680995907515365477233544915021061336714983604939879298121048_wp real ( wp ), parameter :: b1210 = - . 620437956204379562043795620437956204379562043795620437956204379562043795620437956204 4e-1_wp real ( wp ), parameter :: b1211 = . 305110602593440122044241037376048817696414950419527078565980167810831426392067124332 6e-3_wp real ( wp ), parameter :: b131 = . 173163580589370368444882908973494207044556238211674542011409432672270520317477514033 2e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0 real ( wp ), parameter :: b139 = . 869002715988092581179509325633043022018471940490298501076223792730411650263088542591 6e-3_wp real ( wp ), parameter :: b1310 = - . 919804474615846035729014620282877081164234312055184321742077115596890340418258870833 8e-4_wp real ( wp ), parameter :: b1311 = . 183359477734992870613075409243907539524064526807491659006514472049348575819065298105 8e-6_wp real ( wp ), parameter :: b1312 = . 667944881737752552490183811799040102805176211690229124428914281206879159171099292448 0e-1_wp real ( wp ), parameter :: b141 = . 149770228578781725060313414237555152788137481529553294670165997164030370446933325672 2e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0 real ( wp ), parameter :: b149 = . 1299053198125687130806056561360945267563487713700848629960379786258472215118648828622_wp real ( wp ), parameter :: b1410 = . 444425209019342141588047761342888994172858701614389915613543241626514167914966543835 4e-2_wp real ( wp ), parameter :: b1411 = - . 218538033043408559748781885011582476866015532579236943928364536404481781571223990476 5e-5_wp real ( wp ), parameter :: b1412 = . 623577013802556601935174753143266851464739831043727717270587538024958043646831488528 3e-1_wp real ( wp ), parameter :: b1413 = . 538934925040773599876765963768613339986048346758465504718557894028750751588608281209 3e-1_wp real ( wp ), parameter :: b151 = . 1956886038861791180930007029621719896471785620210633245797118818081004119873004962774_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = 0 real ( wp ), parameter :: b159 = 1.132878041352190960246053936692850204846641933665191609652843227265803479941175715645_wp real ( wp ), parameter :: b1510 = . 9754686357770750130309903534180324613492470735016258589778436907188769670738143543989_wp real ( wp ), parameter :: b1511 = . 460763355539339187562505248981887613058458958756669526068004330369976456074483820651 2e-3_wp real ( wp ), parameter :: b1512 = - . 4833419929869440350491944569648386990066349467457051943375195864364996227787596872297_wp real ( wp ), parameter :: b1513 = . 2837255261146423361717978265203569959020643630988946562818139270625464117810614651744_wp real ( wp ), parameter :: b1514 = - 1.604879577498682731680210867877554840351555444499826924680761144749197624460666828087_wp real ( wp ), parameter :: b161 = - . 6628581660952109109950216641584960475848453023977418371554567406302394052049642993363_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 0 real ( wp ), parameter :: b169 = - 5.301219753823165631138506283750981613687493380976143446419698251739201243786272433269_wp real ( wp ), parameter :: b1610 = - 5.493744530005151771950832780438489668352801158207831962667055860430416893664761589330_wp real ( wp ), parameter :: b1611 = . 644810771634385165968511505341032216120419733224730692985978124484387611532001765354 2e-2_wp real ( wp ), parameter :: b1612 = 2.226911096857986220827171118161838780361655511952909244621862410327793805385281866476_wp real ( wp ), parameter :: b1613 = - . 8260094546883369994121948528168152647220748853112540011094140493170779782006783468229_wp real ( wp ), parameter :: b1614 = 9.736973734199539440165209948098457305642565726332220268712929325968631361580234056276_wp real ( wp ), parameter :: b1615 = 1.047923362573352907746375340805459350884588027111516805638308114257144242834404582751_wp real ( wp ), parameter :: b171 = 9.451896878619703179615895147719645120861585484250220485534769741441232402797149004402_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 7 4.07837676951819392708315469048815926453257791083353986411194358002277837032529121349_wp real ( wp ), parameter :: b1710 = 8 0.08971633421252928663933464653279322909492698803384552922422585968931770071180510457_wp real ( wp ), parameter :: b1711 = - . 1241702484260160323471778040612055855620194337087768444994146945534716737633295008233_wp real ( wp ), parameter :: b1712 = - 3 2.04108125365225923900659816438329678215226279318337501510105142207810131441066638158_wp real ( wp ), parameter :: b1713 = 1 5.51919421000708125838831543558938623465692911684926717234376165413330242668122537342_wp real ( wp ), parameter :: b1714 = - 13 6.4444237346563024309541869705527862321862115141467999073204884062451779712319267938_wp real ( wp ), parameter :: b1715 = - 1 1.36109896858298168444633695622136642878717316645309025294277498926997344146696251530_wp real ( wp ), parameter :: b1716 = 1.746701961099335199963616081872403749335232589961167014444435282876535760443759733215_wp real ( wp ), parameter :: b181 = 1.059086740089530572084686602455620391446019980075022020682291957643879144548290466243_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 1.975263319684766813850955500728188106557880392559127720135666889111189136253813975729_wp real ( wp ), parameter :: b188 = - 1 3.82822337504897849061527131653164721900473695395858210726164571154383357718661916508_wp real ( wp ), parameter :: b189 = - 2 6.72676722061492102175215840759265382960786498230207636418025793583833107088763635551_wp real ( wp ), parameter :: b1810 = - 5 3.49798986553787152824955918158085193982743760760492627590775850823540448031315562431_wp real ( wp ), parameter :: b1811 = . 717981248781296867525018164491874351631609958608174867014673299604378314397412860758 7e-1_wp real ( wp ), parameter :: b1812 = 1 8.05559723664965139501142471462605880255358278669785143935434349294122071206578011157_wp real ( wp ), parameter :: b1813 = - 8.765163819232982113792324392383185125858432915348234208512916467037776994687248464210_wp real ( wp ), parameter :: b1814 = 7 6.87522358555575651988028075659565616302805855797883225625477685501643635288672453023_wp real ( wp ), parameter :: b1815 = 6.541007260506904941709851688460080123863085658071943624909334991972860537373864701434_wp real ( wp ), parameter :: b1816 = - . 8461837296739539683436767973109554382501241857205608248520628152174372445350689400749_wp real ( wp ), parameter :: b1817 = . 309633481505235431480265881082365890732523584453131875405006832470925810554333893030 4e-1_wp real ( wp ), parameter :: b191 = - . 977667326004004797671002646962413401446971414164181625318515395837139033495436620610 2e-1_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = - . 6005539308646711394173617417282635784603029781694346062080009050806164919590318269156_wp real ( wp ), parameter :: b197 = . 158522265836790182309281028999566036555827711428336394628411304404714126967580974148 1e-2_wp real ( wp ), parameter :: b198 = . 3026658851734428583799288358366834830670493200050903757742452562250879940584583879948_wp real ( wp ), parameter :: b199 = . 4285248952296136656501504776128834912424841890282487604085652387338305228046948965999_wp real ( wp ), parameter :: b1910 = - . 249493604995642347933171306282182076062638876366185321593642694047474826979191805182 8e-1_wp real ( wp ), parameter :: b1911 = . 201134214987470595063815521774031055513357176867796521793240788543417887235646988879 2e-1_wp real ( wp ), parameter :: b1912 = . 1265809640150575117740069284741749647793461966567090378701137188708013785394651655531_wp real ( wp ), parameter :: b1913 = - . 762550551102193746804436016013344856167480088934055032012054984622078305180050886379 4e-2_wp real ( wp ), parameter :: b1914 = . 2257683215130023640661938534278959810874704491725768321513002364066193853427895981087_wp real ( wp ), parameter :: b1915 = - . 274549248916770848387922618390602486512476729057886427743348622088376076376601754332 1e-1_wp real ( wp ), parameter :: b1916 = . 778376126062793733870554495237063730343726544219823124634854020279442244198684449501 0e-2_wp real ( wp ), parameter :: b1917 = . 168083047626617544413800091016034342342170737856338468723409187958281275132158909532 2e-4_wp real ( wp ), parameter :: b1918 = - . 213554919529537506749522903952587700733958178287380600960480637988488592788599301466 7e-1_wp real ( wp ), parameter :: b201 = . 491872277777421463545469480609547133456447111634637425892020046747560664297566363316 9e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = . 838119832974093938375846726868412810663829046917352897587294440924486336538798165765 1e-1_wp real ( wp ), parameter :: b207 = . 903158524143645065933962687778655672713424456919245602077150967097143544457382512132 8e-5_wp real ( wp ), parameter :: b208 = . 972972170255080855749517906239058753340713209039613336537167907512451512672560522492 4e-1_wp real ( wp ), parameter :: b209 = - . 778070001033292291108309056052095676262776867183891275550117932294589269228927201034 5e-1_wp real ( wp ), parameter :: b2010 = . 2322816011687352870985186646759446719321113455516507860765563208248738749278233611786_wp real ( wp ), parameter :: b2011 = - . 106971352297168569854032832985203844594754477080796496451908806986137557552489055223 0e-1_wp real ( wp ), parameter :: b2012 = - . 1273357855008010164642613326804825893357151796749893640146110897003842493364412495521_wp real ( wp ), parameter :: b2013 = . 1195596306045770335798408097988199315656849089154404333183111529360783290389646594900_wp real ( wp ), parameter :: b2014 = . 1268882175226586102719033232628398791540785498489425981873111782477341389728096676737_wp real ( wp ), parameter :: b2015 = . 204498977505112474437627811860940695296523517382413087934560327198364008179959100204 5e-1_wp real ( wp ), parameter :: b2016 = - . 390985650698424216469115792965503899585893388833492127526005679455728470438544558237 7e-2_wp real ( wp ), parameter :: b2017 = - . 911741011933284210912595303218884069363311931745440171502706220734854263913980365965 1e-5_wp real ( wp ), parameter :: b2018 = . 112609315107745615458562341819751453666234979373757439862630105892338294685204505647 5e-1_wp real ( wp ), parameter :: b2019 = - . 3209868434922071245903287586373535845929558438862699119277778588606558307508436673461_wp real ( wp ), parameter :: b211 = . 5247404461891304721708365639844356354386624470737997647397329116437616959059854701778_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = . 761065142996594199093194619029637366053392213020890064309256066192065214626881542488 5e-1_wp real ( wp ), parameter :: b215 = - 2.135538596825204678401302463372339475781988628449683891486081018353295131152366999963_wp real ( wp ), parameter :: b216 = 2.119016745189825526524339470866652730733632823644186992594087231585247087949150559862_wp real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = - . 6068669292751351984511141135476525247489731841233590933089036540462466843434512014723_wp real ( wp ), parameter :: b2110 = - . 6975023816048118989159659127206041759560640169551283418432821453966450135301718130674_wp real ( wp ), parameter :: b2111 = - . 253955213538338723195880150812537639228321491379197211593757099910733429643646065736 8e-1_wp real ( wp ), parameter :: b2112 = 0 real ( wp ), parameter :: b2113 = 0 real ( wp ), parameter :: b2114 = 0 real ( wp ), parameter :: b2115 = 0 real ( wp ), parameter :: b2116 = 0 real ( wp ), parameter :: b2117 = 0 real ( wp ), parameter :: b2118 = . 253955213538338723195880150812537639228321491379197211593757099910733429643646065736 8e-1_wp real ( wp ), parameter :: b2119 = . 6975023816048118989159659127206041759560640169551283418432821453966450135301718130674_wp real ( wp ), parameter :: b2120 = . 6068669292751351984511141135476525247489731841233590933089036540462466843434512014723_wp real ( wp ), parameter :: b221 = . 385095150452495257524472652032440486089882384495048449013834354160100060557967490878 0e-1_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = . 988960436365138246281279890087054828228880214355390339282842353649005342442634557770 9e-4_wp real ( wp ), parameter :: b225 = . 1258652731216402762123982910182735616976625577395859318541619645591514091994326716669_wp real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = . 1148546657824708136802241649776446744025406100582655444423341878411637297467351936831_wp real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = - . 1299246462925958527077352114079744607750386324042347411360003531859939834460301561195_wp real ( wp ), parameter :: b2210 = - . 3664591598580916638621456622089859363144583004356560608229075984337239720284817960193_wp real ( wp ), parameter :: b2211 = 0 real ( wp ), parameter :: b2212 = 0 real ( wp ), parameter :: b2213 = 0 real ( wp ), parameter :: b2214 = 0 real ( wp ), parameter :: b2215 = 0 real ( wp ), parameter :: b2216 = 0 real ( wp ), parameter :: b2217 = 0 real ( wp ), parameter :: b2218 = 0 real ( wp ), parameter :: b2219 = . 3664591598580916638621456622089859363144583004356560608229075984337239720284817960193_wp real ( wp ), parameter :: b2220 = . 1299246462925958527077352114079744607750386324042347411360003531859939834460301561195_wp real ( wp ), parameter :: b2221 = - . 1148546657824708136802241649776446744025406100582655444423341878411637297467351936831_wp real ( wp ), parameter :: b231 = . 2175227402212137286104398734798923400326123258875071216675507357419304139407870179368_wp real ( wp ), parameter :: b232 = . 2254597159191371485825425826604585371603701302528437555254317203984204632521954382036_wp real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = - . 7003676470588235294117647058823529411764705882352941176470588235294117647058823529412_wp real ( wp ), parameter :: b237 = - . 3841432262252079340469853296205751191707035527677198880717241749265840367609120672261_wp real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = 0 real ( wp ), parameter :: b2312 = 0 real ( wp ), parameter :: b2313 = 0 real ( wp ), parameter :: b2314 = 0 real ( wp ), parameter :: b2315 = 0 real ( wp ), parameter :: b2316 = 0 real ( wp ), parameter :: b2317 = 0 real ( wp ), parameter :: b2318 = 0 real ( wp ), parameter :: b2319 = 0 real ( wp ), parameter :: b2320 = 0 real ( wp ), parameter :: b2321 = . 3841432262252079340469853296205751191707035527677198880717241749265840367609120672261_wp real ( wp ), parameter :: b2322 = . 7003676470588235294117647058823529411764705882352941176470588235294117647058823529412_wp real ( wp ), parameter :: b241 = . 4351851851851851851851851851851851851851851851851851851851851851851851851851851851852_wp real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = - . 4244806610219170956648818689597945762515945523075081224120777274585003570971510665439_wp real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0 real ( wp ), parameter :: b249 = 0 real ( wp ), parameter :: b2410 = 0 real ( wp ), parameter :: b2411 = 0 real ( wp ), parameter :: b2412 = 0 real ( wp ), parameter :: b2413 = 0 real ( wp ), parameter :: b2414 = 0 real ( wp ), parameter :: b2415 = 0 real ( wp ), parameter :: b2416 = 0 real ( wp ), parameter :: b2417 = 0 real ( wp ), parameter :: b2418 = 0 real ( wp ), parameter :: b2419 = 0 real ( wp ), parameter :: b2420 = 0 real ( wp ), parameter :: b2421 = 0 real ( wp ), parameter :: b2422 = 0 real ( wp ), parameter :: b2423 = . 4244806610219170956648818689597945762515945523075081224120777274585003570971510665439_wp real ( wp ), parameter :: b251 = 1 4.54990971513478580914495526598245283940024810265087163382498896386800769812364397026_wp real ( wp ), parameter :: b252 = - 2.609444444444444444444444444444444444444444444444444444444444444444444444444444444444_wp real ( wp ), parameter :: b253 = - 2.016004609236637754870351028563643794559738431497207211298306162299623087053267335725_wp real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = - 1.666875_wp real ( wp ), parameter :: b257 = - 1.840010137609049715480551028603992780751854184812582730319893278211480604766702319850_wp real ( wp ), parameter :: b258 = 0 real ( wp ), parameter :: b259 = 11 2.8850026879393650927243496060343039004107661597559344830054269802155904451112935844_wp real ( wp ), parameter :: b2510 = 12 3.3942086822776167534198661922997568027612066045886506351026838994566451157760161079_wp real ( wp ), parameter :: b2511 = - . 7912126656078716671206667350992937018785263673658058027818457299775466324638082312137_wp real ( wp ), parameter :: b2512 = - 5 0.05149873558555185701853277950418028083920384013973228797374663569746882026502756132_wp real ( wp ), parameter :: b2513 = 2 4.88778291494286023489265916235844707524170235927746532159915897878512972222657954044_wp real ( wp ), parameter :: b2514 = - 21 2.1164197057320847511194729602871445996396409264694299135694995667783941778631290781_wp real ( wp ), parameter :: b2515 = - 1 7.89082255740024165397920079197116480379826062999613139163493416384514698556677051724_wp real ( wp ), parameter :: b2516 = 2.509716434086569985363077956674238286724267256774032757480361264001771307725305753519_wp real ( wp ), parameter :: b2517 = . 1162475886937088360535666476065014131326443901611275096836079807311057386735832665899_wp real ( wp ), parameter :: b2518 = . 5840328281597421751021178306186155103094570763962374837158281176580253234011237044692_wp real ( wp ), parameter :: b2519 = 1.584417806712708397483834073813399023446091584920600008797782958694409008929749703075_wp real ( wp ), parameter :: b2520 = 1.338635006378392645053446531474068534729248229446179562750186952887872256191439757181_wp real ( wp ), parameter :: b2521 = 1.840010137609049715480551028603992780751854184812582730319893278211480604766702319850_wp real ( wp ), parameter :: b2522 = 1.666875_wp real ( wp ), parameter :: b2523 = 2.016004609236637754870351028563643794559738431497207211298306162299623087053267335725_wp real ( wp ), parameter :: b2524 = 2.609444444444444444444444444444444444444444444444444444444444444444444444444444444444_wp real ( wp ), parameter :: b261 = . 4213659219087082450668941175898637044576077571412870755532166081975824639155816025423_wp real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = 0 real ( wp ), parameter :: b266 = 2.360375290413766425107807321597798068298832670876354152068674897991709951684675057597_wp real ( wp ), parameter :: b267 = . 788792681183690214427082447723136543744296285638349185134971336108654256114493596476 0e-1_wp real ( wp ), parameter :: b268 = - 1.881850641776530466652474803895333308262409829541779704822719782535259533895036456964_wp real ( wp ), parameter :: b269 = - 1.304700734906095391371228323883517431348033016096248869612640797091741378769699510853_wp real ( wp ), parameter :: b2610 = . 1146971532060496506611311517441641422873299688900135018999537656144573134542692746612_wp real ( wp ), parameter :: b2611 = - . 522361318294207790717060967691033848091507190600018635121504737374045262350743674601 8e-2_wp real ( wp ), parameter :: b2612 = . 7134840563194221964556259902880063405282394887795535106616674222878805188799073074497_wp real ( wp ), parameter :: b2613 = 0 real ( wp ), parameter :: b2614 = 0 real ( wp ), parameter :: b2615 = 0 real ( wp ), parameter :: b2616 = 0 real ( wp ), parameter :: b2617 = 0 real ( wp ), parameter :: b2618 = 0 real ( wp ), parameter :: b2619 = 0 real ( wp ), parameter :: b2620 = 0 real ( wp ), parameter :: b2621 = 0 real ( wp ), parameter :: b2622 = 0 real ( wp ), parameter :: b2623 = 0 real ( wp ), parameter :: b2624 = 0 real ( wp ), parameter :: b2625 = 0 real ( wp ), parameter :: b271 = - 1.016867684065179179311540011641152067739527559831057381007428484343486238202737995538_wp real ( wp ), parameter :: b272 = 0 real ( wp ), parameter :: b273 = 0 real ( wp ), parameter :: b274 = 0 real ( wp ), parameter :: b275 = 0 real ( wp ), parameter :: b276 = - 7.712044352285817603610736737545203003182107799250377304475316992902646516184627861475_wp real ( wp ), parameter :: b277 = - . 4034008409374858753410643280039779311650023076266296210030337872976327092081717454860_wp real ( wp ), parameter :: b278 = 6.739165476490825275476530741799137001781411805688541615342712456896969009075069743117_wp real ( wp ), parameter :: b279 = 6.014994643407224294180918860565568523540180411761624603152605084567461778121724411633_wp real ( wp ), parameter :: b2710 = - 1.138427387973993086846707441740657423236451007119331997503516596250482644801941463866_wp real ( wp ), parameter :: b2711 = . 500927197318159956344943136218839768557977025174388325193023591680554353918680331124 5e-1_wp real ( wp ), parameter :: b2712 = - 3.113250932564715585587456369457050044282973515833171733791753110672694235302567710668_wp real ( wp ), parameter :: b2713 = 0 real ( wp ), parameter :: b2714 = 0 real ( wp ), parameter :: b2715 = 0 real ( wp ), parameter :: b2716 = 0 real ( wp ), parameter :: b2717 = 0 real ( wp ), parameter :: b2718 = 0 real ( wp ), parameter :: b2719 = 0 real ( wp ), parameter :: b2720 = 0 real ( wp ), parameter :: b2721 = 0 real ( wp ), parameter :: b2722 = 0 real ( wp ), parameter :: b2723 = 0 real ( wp ), parameter :: b2724 = 0 real ( wp ), parameter :: b2725 = 0 real ( wp ), parameter :: b2726 = 1.384086184284282287144691407184059663080846182736441247635994288225760468937471545692_wp real ( wp ), parameter :: b281 = 1.131093475949031458408970675798323789793651098141584053672723684523337489654810813567_wp real ( wp ), parameter :: b282 = 0 real ( wp ), parameter :: b283 = 0 real ( wp ), parameter :: b284 = 0 real ( wp ), parameter :: b285 = 0 real ( wp ), parameter :: b286 = - 1 1.30475611955440577592346561419842170756276153921836803995513790246783417109406727002_wp real ( wp ), parameter :: b287 = . 867350890852937203789454427719536449937527749123110638319872985808628712709248973373 8e-1_wp real ( wp ), parameter :: b288 = 4.971317844154333915807514558966554931901059536397301577948574837963960265600948244094_wp real ( wp ), parameter :: b289 = 1 4.86493772010299652718002500847699984298963300991290479767277341466986550270499895786_wp real ( wp ), parameter :: b2810 = - 5.526130551905351405702373768620234518347747212552226033118137855980983127699224086148_wp real ( wp ), parameter :: b2811 = . 1017790491986200061558195486579246543940163889995857946318495764475820398967567810759_wp real ( wp ), parameter :: b2812 = - 5.412708567655345677389304794550103449135846140313886894023804835964789906470796078495_wp real ( wp ), parameter :: b2813 = 0 real ( wp ), parameter :: b2814 = 0 real ( wp ), parameter :: b2815 = 0 real ( wp ), parameter :: b2816 = 0 real ( wp ), parameter :: b2817 = 0 real ( wp ), parameter :: b2818 = 0 real ( wp ), parameter :: b2819 = 0 real ( wp ), parameter :: b2820 = 0 real ( wp ), parameter :: b2821 = 0 real ( wp ), parameter :: b2822 = 0 real ( wp ), parameter :: b2823 = 0 real ( wp ), parameter :: b2824 = 0 real ( wp ), parameter :: b2825 = 0 real ( wp ), parameter :: b2826 = 2.119905903216124397337756706998226742489167533804374626293399155463227287948398852330_wp real ( wp ), parameter :: b2827 = - . 1603789707964253713820928925063521366431305782887091520824325014403564569409562398070_wp real ( wp ), parameter :: b291 = 4 6.12864603958015905056850990838704062569763496465412763519385202873225169326091596022_wp real ( wp ), parameter :: b292 = 0 real ( wp ), parameter :: b293 = 0 real ( wp ), parameter :: b294 = 0 real ( wp ), parameter :: b295 = 0 real ( wp ), parameter :: b296 = 2 7.91300163119399908845158457840426795358131126287389180101909720743727165524743997096_wp real ( wp ), parameter :: b297 = 1 6.11362689862451240990975288339484000039234961533373225370151713993919933068137837655_wp real ( wp ), parameter :: b298 = - 12 5.4696763444318726329250646477825268481685879278990572088898486327607587168793188547_wp real ( wp ), parameter :: b299 = 7 6.57182020120529497684089567511627659347626021577320126137924234653281598557298427556_wp real ( wp ), parameter :: b2910 = - 4 8.97805558723490361747755876313897556229903489002597907918723603724236906416246304792_wp real ( wp ), parameter :: b2911 = - 1.242830487244052672528847080627776989497284066852925470069357906835696725179561610962_wp real ( wp ), parameter :: b2912 = 1 8.85807213383620068645464308722546866214730809725606975205204214283143331463602851729_wp real ( wp ), parameter :: b2913 = 0 real ( wp ), parameter :: b2914 = 0 real ( wp ), parameter :: b2915 = 0 real ( wp ), parameter :: b2916 = 0 real ( wp ), parameter :: b2917 = 0 real ( wp ), parameter :: b2918 = 0 real ( wp ), parameter :: b2919 = 0 real ( wp ), parameter :: b2920 = 0 real ( wp ), parameter :: b2921 = 0 real ( wp ), parameter :: b2922 = 0 real ( wp ), parameter :: b2923 = 0 real ( wp ), parameter :: b2924 = 0 real ( wp ), parameter :: b2925 = 0 real ( wp ), parameter :: b2926 = - 8.871982194511738170929283011936752038683182063824370821380217475185779921363890310462_wp real ( wp ), parameter :: b2927 = - 2.069534982695615656321598541301254038890059866116256078922522295738656144906973495868_wp real ( wp ), parameter :: b2928 = 2.046912691678016537956965912259391642243284658827565955103431482290288593093460219351_wp real ( wp ), parameter :: c1 = . 238095238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: c2 = - . 11_wp real ( wp ), parameter :: c3 = - . 17_wp real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = - . 19_wp real ( wp ), parameter :: c7 = - . 21_wp real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = - . 23_wp real ( wp ), parameter :: c10 = - . 27_wp real ( wp ), parameter :: c11 = - . 29_wp real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = . 1384130236807829740053502031450331467488136400899412345912671194817223119377730668077_wp real ( wp ), parameter :: c14 = . 2158726906049313117089355111406811389654720741957730511230185948039919737765126474781_wp real ( wp ), parameter :: c15 = . 2438095238095238095238095238095238095238095238095238095238095238095238095238095238095_wp real ( wp ), parameter :: c16 = . 2158726906049313117089355111406811389654720741957730511230185948039919737765126474781_wp real ( wp ), parameter :: c17 = . 1384130236807829740053502031450331467488136400899412345912671194817223119377730668077_wp real ( wp ), parameter :: c18 = . 29_wp real ( wp ), parameter :: c19 = . 27_wp real ( wp ), parameter :: c20 = . 23_wp real ( wp ), parameter :: c21 = . 21_wp real ( wp ), parameter :: c22 = . 19_wp real ( wp ), parameter :: c23 = . 17_wp real ( wp ), parameter :: c24 = . 11_wp real ( wp ), parameter :: c25 = . 238095238095238095238095238095238095238095238095238095238095238095238095238095238095 2e-1_wp real ( wp ), parameter :: c26 = 0 real ( wp ), parameter :: c27 = 0 real ( wp ), parameter :: c28 = 0 real ( wp ), parameter :: c29 = 0 real ( wp ), parameter :: d1 = . 135726736642203669162450857037503992121396140519738354099072927158560857574436722142 2e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = . 1957242608025905233613155193355413222756712243739956539857744660017249157522413539338_wp real ( wp ), parameter :: d10 = . 618886634743560866161606023838034532174057918569826292507244103081046113011822462665 0e-1_wp real ( wp ), parameter :: d11 = . 2356461254963383884566009189531765712282459575681722654363888116993755654359289982043_wp real ( wp ), parameter :: d12 = . 935698127765694817165912535512682288787837057513383327091867540084098892984771252818 9e-1_wp real ( wp ), parameter :: d13 = 0 real ( wp ), parameter :: d14 = 0 real ( wp ), parameter :: d15 = 0 real ( wp ), parameter :: d16 = 0 real ( wp ), parameter :: d17 = 0 real ( wp ), parameter :: d18 = 0 real ( wp ), parameter :: d19 = 0 real ( wp ), parameter :: d20 = 0 real ( wp ), parameter :: d21 = 0 real ( wp ), parameter :: d22 = 0 real ( wp ), parameter :: d23 = 0 real ( wp ), parameter :: d24 = 0 real ( wp ), parameter :: d25 = 0 real ( wp ), parameter :: d26 = . 2788382624223597882496809755901865993371492355322230983832374605891024297949723722505_wp real ( wp ), parameter :: d27 = . 4265887719284871852244002213010235951116369449606049493109912099005098392090245967637_wp real ( wp ), parameter :: d28 = - . 2878025166474501962999477241233861487151201542084751225511851437798538088192303308430_wp real ( wp ), parameter :: d29 = - . 180260539174716242410468526953640205459123198868156419350252614432295277300400340720 3e-1_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 real ( wp ), parameter :: e22 = c22 - d22 real ( wp ), parameter :: e23 = c23 - d23 real ( wp ), parameter :: e24 = c24 - d24 real ( wp ), parameter :: e25 = c25 - d25 real ( wp ), parameter :: e26 = c26 - d26 real ( wp ), parameter :: e27 = c27 - d27 real ( wp ), parameter :: e28 = c28 - d28 real ( wp ), parameter :: e29 = c29 - d29 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 ), & f22 => me % funcs (:, 22 ), & f23 => me % funcs (:, 23 ), & f24 => me % funcs (:, 24 ), & f25 => me % funcs (:, 25 ), & f26 => me % funcs (:, 26 ), & f27 => me % funcs (:, 27 ), & f28 => me % funcs (:, 28 ), & f29 => me % funcs (:, 29 )) call me % f ( t * h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b221 * f1 + b222 * f2 + b223 * f3 + b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + b2212 * f12 + b2213 * f13 + & b2214 * f14 + b2215 * f15 + b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b231 * f1 + b232 * f2 + b233 * f3 + b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + b2312 * f12 + b2313 * f13 + & b2314 * f14 + b2315 * f15 + b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b241 * f1 + b242 * f2 + b243 * f3 + b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + b2412 * f12 + b2413 * f13 + & b2414 * f14 + b2415 * f15 + b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + h , x + h * ( b251 * f1 + b252 * f2 + b253 * f3 + b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + b2512 * f12 + b2513 * f13 + & b2514 * f14 + b2515 * f15 + b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + b2524 * f24 ), f25 ) call me % f ( t + a26 * h , x + h * ( b261 * f1 + b262 * f2 + b263 * f3 + b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + b2612 * f12 + b2613 * f13 + & b2614 * f14 + b2615 * f15 + b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + b2624 * f24 + b2625 * f25 ), f26 ) call me % f ( t + a27 * h , x + h * ( b271 * f1 + b272 * f2 + b273 * f3 + b274 * f4 + b275 * f5 + b276 * f6 + b277 * f7 + & b278 * f8 + b279 * f9 + b2710 * f10 + b2711 * f11 + b2712 * f12 + b2713 * f13 + & b2714 * f14 + b2715 * f15 + b2716 * f16 + b2717 * f17 + b2718 * f18 + b2719 * f19 + & b2720 * f20 + b2721 * f21 + b2722 * f22 + b2723 * f23 + b2724 * f24 + b2725 * f25 + & b2726 * f26 ), f27 ) call me % f ( t + a28 * h , x + h * ( b281 * f1 + b282 * f2 + b283 * f3 + b284 * f4 + b285 * f5 + b286 * f6 + b287 * f7 + & b288 * f8 + b289 * f9 + b2810 * f10 + b2811 * f11 + b2812 * f12 + b2813 * f13 + & b2814 * f14 + b2815 * f15 + b2816 * f16 + b2817 * f17 + b2818 * f18 + b2819 * f19 + & b2820 * f20 + b2821 * f21 + b2822 * f22 + b2823 * f23 + b2824 * f24 + b2825 * f25 + & b2826 * f26 + b2827 * f27 ), f28 ) call me % f ( t + h , x + h * ( b291 * f1 + b292 * f2 + b293 * f3 + b294 * f4 + b295 * f5 + b296 * f6 + b297 * f7 + & b298 * f8 + b299 * f9 + b2910 * f10 + b2911 * f11 + b2912 * f12 + b2913 * f13 + & b2914 * f14 + b2915 * f15 + b2916 * f16 + b2917 * f17 + b2918 * f18 + b2919 * f19 + & b2920 * f20 + b2921 * f21 + b2922 * f22 + b2923 * f23 + b2924 * f24 + b2925 * f25 + & b2926 * f26 + b2927 * f27 + b2928 * f28 ), f29 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + & c11 * f11 + c12 * f12 + c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + & c19 * f19 + c20 * f20 + c21 * f21 + c22 * f22 + c23 * f23 + c24 * f24 + c25 * f25 + c26 * f26 + & c27 * f27 + c28 * f28 + c29 * f29 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + & e11 * f11 + e12 * f12 + e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + & e19 * f19 + e20 * f20 + e21 * f21 + e22 * f22 + e23 * f23 + e24 * f24 + e25 * f25 + e26 * f26 + & e27 * f27 + e28 * f28 + e29 * f29 ) end associate end procedure rko129 !***************************************************************************************** !***************************************************************************************** !> ! Stone's 26 stage combined order 10 and 11 Runge-Kutta scheme ! !### Reference ! * [Coefficients](http://www.peterstone.name/Maplepgs/Maple/nmthds/RKcoeff/Runge_Kutta_schemes/RK11/RKcoeff11_a.pdf) module procedure rks1110a real ( wp ), parameter :: a2 = . 2494510436877389344264053439636521218011835467298426368145366983339993718715373083760_wp real ( wp ), parameter :: a3 = . 3741765655316084016396080159454781827017753200947639552218050475009990578073059625640_wp real ( wp ), parameter :: a4 = . 5612648482974126024594120239182172740526629801421459328327075712514985867109589438460_wp real ( wp ), parameter :: a5 = . 854699529917459291574228990041809293536674086672018395410085218805805116644296101160 9e-1_wp real ( wp ), parameter :: a6 = . 7310788517640473762691237698106576677338584467168049416410984572334277402413648068397_wp real ( wp ), parameter :: a7 = . 1304049416609471516815374056280027453671928620452985586822237474262182566918325326012_wp real ( wp ), parameter :: a8 = . 4712636357202847267558933149451482905659499178473869504545717970436656667382069175430_wp real ( wp ), parameter :: a9 = . 7730997092193940758126470461455964941402897392485301085000777589597371419303943343132_wp real ( wp ), parameter :: a10 = . 2056292271097569160894663338279693801391636310750116019089310570387586267029180604980_wp real ( wp ), parameter :: a11 = . 5366419968074299811348135248875344652445218400812654186620229284574082136119576258888_wp real ( wp ), parameter :: a12 = . 6950637644720240807995723705690567056506824408065743296638976932495337928615038239116_wp real ( wp ), parameter :: a13 = . 8049629952111449717022202873313016978667827601218981279930343926861123204179364388333_wp real ( wp ), parameter :: a14 = . 1913760139217099199372138166733346224093015957152232805822661231536077778241788913071_wp real ( wp ), parameter :: a15 = . 8894442715562032655697860690613313211578199121477983480401175761840408067430713807992_wp real ( wp ), parameter :: a16 = . 4680151547126001101041424878175828807838998612363955308441536427569141462651129332201_wp real ( wp ), parameter :: a17 = . 9908386187455954897815362931642001409443269908386187455954897815362931642001409443270_wp real ( wp ), parameter :: a18 = . 900018828845791752965543212201092073055921672001506307663340237243456976087365844473 7e-1_wp real ( wp ), parameter :: a19 = . 4031478884213807074957145083372292348449431198379304971170328814087579865980988000623_wp real ( wp ), parameter :: a20 = . 2426620464737056665307786384019567876070118222584590297594781899714635140644109253975_wp real ( wp ), parameter :: a21 = . 7208245981830887491264849755415793151642208245981830887491264849755415793151642208246_wp real ( wp ), parameter :: a22 = . 1999681579366342939022448654672822798917369845565992676325425887597516319057474924375_wp real ( wp ), parameter :: a23 = . 9639977912755383765875207067918277194919933738266151297625621203754831584759801214798_wp real ( wp ), parameter :: a24 = . 7436137801734239512538082962268572767752519334426997890789782048277478322006093273963_wp real ( wp ), parameter :: b21 = . 2494510436877389344264053439636521218011835467298426368145366983339993718715373083760_wp real ( wp ), parameter :: b31 = . 935441413829021004099020039863695456754438300236909888054512618752497644518264906410 0e-1_wp real ( wp ), parameter :: b32 = . 2806324241487063012297060119591086370263314900710729664163537856257492933554794719230_wp real ( wp ), parameter :: b41 = . 1403162120743531506148530059795543185131657450355364832081768928128746466777397359615_wp real ( wp ), parameter :: b42 = 0 real ( wp ), parameter :: b43 = . 4209486362230594518445590179386629555394972351066094496245306784386239400332192078845_wp real ( wp ), parameter :: b51 = . 701916467045438208744378660640537427490873918345465227659802518393598213663073072187 0e-1_wp real ( wp ), parameter :: b52 = 0 real ( wp ), parameter :: b53 = . 263117484192442344483472751021664218161405318393402985572452909990879906690068170715 6e-1_wp real ( wp ), parameter :: b54 = - . 110334421320421261653622421620392352115605150066849817822170209578673003708845141741 7e-1_wp real ( wp ), parameter :: b61 = - . 1566211240781183642488518551453027928209011808429926742075994450765608166883593055436_wp real ( wp ), parameter :: b62 = 0 real ( wp ), parameter :: b63 = 0 real ( wp ), parameter :: b64 = . 4022037025415642768212777334976723807953788960750969348079276345083207687523340439985_wp real ( wp ), parameter :: b65 = . 4854962733006014636966978914582880797593807314847006810407702678016677881773900683848_wp real ( wp ), parameter :: b71 = . 311224906518945454097593874910368877564086026801576551787590181963678884162288351471 5e-1_wp real ( wp ), parameter :: b72 = 0 real ( wp ), parameter :: b73 = 0 real ( wp ), parameter :: b74 = 0 real ( wp ), parameter :: b75 = . 992560294647075573097686133374655257801011354337155650115653228952222308368603975046 4e-1_wp real ( wp ), parameter :: b76 = . 264215443450489620094047995003318306831239314253384918994063346281374387432999494419 4e-4_wp real ( wp ), parameter :: b81 = . 7097221158585919779802904970340267773691990074739280896770286766721241217196318737330_wp real ( wp ), parameter :: b82 = 0 real ( wp ), parameter :: b83 = 0 real ( wp ), parameter :: b84 = 0 real ( wp ), parameter :: b85 = - 2.878599621086994245472819276760640913301855954929611359904818127369971660983418731969_wp real ( wp ), parameter :: b86 = . 212944657580320249559301145000067512314681943628335290564408637505260827380671059808 3e-1_wp real ( wp ), parameter :: b87 = 2.618846675190654969292491980171755675267138670940236691625920383990987123263926669799_wp real ( wp ), parameter :: b91 = . 197116276975162265337427903089090189510227126093475256007329866651682059894769406524 5e-1_wp real ( wp ), parameter :: b92 = 0 real ( wp ), parameter :: b93 = 0 real ( wp ), parameter :: b94 = 0 real ( wp ), parameter :: b95 = 0 real ( wp ), parameter :: b96 = . 1314769583961512153957380944910102917010453313237904532896703042317759437588108172284_wp real ( wp ), parameter :: b97 = . 2651026426320722003136425762899652531974839391071893983013696279981183473287139122567_wp real ( wp ), parameter :: b98 = . 3568084804936544335695235850557119302907377562082027313083048400646746448533926641757_wp real ( wp ), parameter :: b101 = . 452000198123696303466615899715814558178752759216811801443752162006850816548332785001 0e-1_wp real ( wp ), parameter :: b102 = 0 real ( wp ), parameter :: b103 = 0 real ( wp ), parameter :: b104 = 0 real ( wp ), parameter :: b105 = 0 real ( wp ), parameter :: b106 = . 400279936896326942445344872603617212970728603525508403353084825194504763885543338106 9e-2_wp real ( wp ), parameter :: b107 = . 1601500636916154116141648988130496051518236572818790559811874215346710453554656819808_wp real ( wp ), parameter :: b108 = - . 694830896113558766055076810880379832567315616309439231397834893941418976920688252096 0e-3_wp real ( wp ), parameter :: b109 = - . 302882486707783652975852687181747312767527254749427901876459405460112896931564511184 9e-2_wp real ( wp ), parameter :: b111 = . 648808887415660154255010100963128242523506631767064355450923234229335037083220188874 1e-1_wp real ( wp ), parameter :: b112 = 0 real ( wp ), parameter :: b113 = 0 real ( wp ), parameter :: b114 = 0 real ( wp ), parameter :: b115 = 0 real ( wp ), parameter :: b116 = 0 real ( wp ), parameter :: b117 = 0 real ( wp ), parameter :: b118 = . 1798223672519538764980931982771653336226267689019203140039759418977874942481337275737_wp real ( wp ), parameter :: b119 = - . 137903885379537465845937593987289145226091895764162798423692696214988529090667638984 2e-2_wp real ( wp ), parameter :: b1110 = . 2933177796677054638696786924539291988218053269602802970971915900988371009464085558176_wp real ( wp ), parameter :: b121 = . 620300949896451215273368260248325280054446546802772369651364966059871393840310546856 3e-1_wp real ( wp ), parameter :: b122 = 0 real ( wp ), parameter :: b123 = 0 real ( wp ), parameter :: b124 = 0 real ( wp ), parameter :: b125 = 0 real ( wp ), parameter :: b126 = 0 real ( wp ), parameter :: b127 = 0 real ( wp ), parameter :: b128 = 0 real ( wp ), parameter :: b129 = . 185249427121668310656673241280125265402870911250618566181316201319034715801814640938 5e-1_wp real ( wp ), parameter :: b1210 = . 3097644836067189024326911104871249008925595428403487952252886015862314098920345337684_wp real ( wp ), parameter :: b1211 = . 3047442431634932257738771099290867502123911521608864408553409749254117720052567713637_wp real ( wp ), parameter :: b131 = . 620197226091689308071142073955897504599448199140401627094283104262129667533253457586 6e-1_wp real ( wp ), parameter :: b132 = 0 real ( wp ), parameter :: b133 = 0 real ( wp ), parameter :: b134 = 0 real ( wp ), parameter :: b135 = 0 real ( wp ), parameter :: b136 = 0 real ( wp ), parameter :: b137 = 0 real ( wp ), parameter :: b138 = 0 real ( wp ), parameter :: b139 = . 940239712631459397691040943260037628464074573939285600649169341473937717675249683025 4e-1_wp real ( wp ), parameter :: b1310 = . 3098255331628556417346604747446843311853795538255778076358109181983411673182996479068_wp real ( wp ), parameter :: b1311 = . 3036714566645797050698936883147468540428250347499812111630779317183972047785244555068_wp real ( wp ), parameter :: b1312 = . 354223115113947543214478225502769993322258942383703864198002981957672098002620213584 5e-1_wp real ( wp ), parameter :: b141 = . 696908934482578755465020457698766652266123986652693124386595687256626658587557438909 0e-1_wp real ( wp ), parameter :: b142 = 0 real ( wp ), parameter :: b143 = 0 real ( wp ), parameter :: b144 = 0 real ( wp ), parameter :: b145 = 0 real ( wp ), parameter :: b146 = 0 real ( wp ), parameter :: b147 = 0 real ( wp ), parameter :: b148 = 0 real ( wp ), parameter :: b149 = - 1.026068398848221434143517600646828432765332980244057389200313887686341269100904144289_wp real ( wp ), parameter :: b1410 = . 1707111685325415936794748807994057363691702390665289122715815578989450621608097471178_wp real ( wp ), parameter :: b1411 = - . 2276426317828345244640899307352560724213609963668371269120350778897604268488707131379_wp real ( wp ), parameter :: b1412 = . 6469733264162559693641327687577763359541689058709531537823573009011020286605375682754_wp real ( wp ), parameter :: b1413 = . 5577116561557104399547116527283603900460440287233664182020166612039997170938506894503_wp real ( wp ), parameter :: b151 = . 562712237629357194913230965344514394930168752026278865175040823274026618061657084551 0e-1_wp real ( wp ), parameter :: b152 = 0 real ( wp ), parameter :: b153 = 0 real ( wp ), parameter :: b154 = 0 real ( wp ), parameter :: b155 = 0 real ( wp ), parameter :: b156 = 0 real ( wp ), parameter :: b157 = 0 real ( wp ), parameter :: b158 = 0 real ( wp ), parameter :: b159 = 0 real ( wp ), parameter :: b1510 = 0 real ( wp ), parameter :: b1511 = . 3678983222850209699517524982831781294240536196092600812178960084767342167600554097921_wp real ( wp ), parameter :: b1512 = - . 519558720880348329935654723427838356118784732660198614667815838883522387738021381423 0e-1_wp real ( wp ), parameter :: b1513 = . 2204300024722190946507889136186101583051939445678464072502258435712922894837870998433_wp real ( wp ), parameter :: b1514 = . 2968005951240623144694870329678754295474339460340838345212732256969638774668653008510_wp real ( wp ), parameter :: b161 = . 563484649734032902616933331075216696684430763271513238111764149038959362851982687853 1e-1_wp real ( wp ), parameter :: b162 = 0 real ( wp ), parameter :: b163 = 0 real ( wp ), parameter :: b164 = 0 real ( wp ), parameter :: b165 = 0 real ( wp ), parameter :: b166 = 0 real ( wp ), parameter :: b167 = 0 real ( wp ), parameter :: b168 = 0 real ( wp ), parameter :: b169 = 0 real ( wp ), parameter :: b1610 = 0 real ( wp ), parameter :: b1611 = . 2154493134975348678816921094538633047666156318059356569827382889198219015749935439823_wp real ( wp ), parameter :: b1612 = - . 1828038597798339032767249818891038294211236603774749922977117870744959009671532402296_wp real ( wp ), parameter :: b1613 = . 1115035565964385314512820745510850004252820806597292903369723111122469246811072381550_wp real ( wp ), parameter :: b1614 = . 2961573176911709124764789850722285989373150621850530267865487559044685065325051431373_wp real ( wp ), parameter :: b1615 = - . 286396382661135886902790324780118635926323293639987747755703410090232218415380206101 6e-1_wp real ( wp ), parameter :: b171 = . 576899419872428903617188258907955120032905331707401573686693560731736805826394789238 8e-1_wp real ( wp ), parameter :: b172 = 0 real ( wp ), parameter :: b173 = 0 real ( wp ), parameter :: b174 = 0 real ( wp ), parameter :: b175 = 0 real ( wp ), parameter :: b176 = 0 real ( wp ), parameter :: b177 = 0 real ( wp ), parameter :: b178 = 0 real ( wp ), parameter :: b179 = 0 real ( wp ), parameter :: b1710 = 0 real ( wp ), parameter :: b1711 = - . 333959415357374613877965725423968746194051846428608976081589395203455257443421103754 0e-1_wp real ( wp ), parameter :: b1712 = . 4007337036063909756966778946251460958783204419363211999098235920936595305217080757252_wp real ( wp ), parameter :: b1713 = - . 2804910522268063380484013221059916164179105523752052409880171087961359378301286147028_wp real ( wp ), parameter :: b1714 = . 2860659865450288214940338791467983472419468134474127404785360793939950768656398860364_wp real ( wp ), parameter :: b1715 = . 3300830129889967277869093004777042822760017064369869377090469066296160876867312632942_wp real ( wp ), parameter :: b1716 = . 2301529673804798738783942876721443945820832328652238487255898956623302521178929654255_wp real ( wp ), parameter :: b181 = . 462834957971902442731717539913173327351129708413920951653512874897559510234846696334 6e-1_wp real ( wp ), parameter :: b182 = 0 real ( wp ), parameter :: b183 = 0 real ( wp ), parameter :: b184 = 0 real ( wp ), parameter :: b185 = 0 real ( wp ), parameter :: b186 = 0 real ( wp ), parameter :: b187 = 0 real ( wp ), parameter :: b188 = 0 real ( wp ), parameter :: b189 = 0 real ( wp ), parameter :: b1810 = 0 real ( wp ), parameter :: b1811 = 1.630450107397975249685538886816283747362802271995334921665631466207136001357816066251_wp real ( wp ), parameter :: b1812 = - 1.519389027110125818833104438792078888366805294218517984315935323689939634346785541266_wp real ( wp ), parameter :: b1813 = 1.451177905612818398158204503782829478002025896171620079182131464615748573245045066933_wp real ( wp ), parameter :: b1814 = . 1115858300886827251108540309774994639792980968086331408518485993004009147049002886661_wp real ( wp ), parameter :: b1815 = - . 6927910549842217223999151167283689307038087310272710650839151778360002928231938996564_wp real ( wp ), parameter :: b1816 = - 1.033967300639154935442351963388333197850853637180263551013370838161871418837432150763_wp real ( wp ), parameter :: b1817 = . 966519267214150347441566645609602021478205938092229943145925457991156032849020846494 0e-1_wp real ( wp ), parameter :: b191 = - . 203045977093901045717986504345754315989068683690894937531312579864021297464072224713 9e-1_wp real ( wp ), parameter :: b192 = 0 real ( wp ), parameter :: b193 = 0 real ( wp ), parameter :: b194 = 0 real ( wp ), parameter :: b195 = 0 real ( wp ), parameter :: b196 = 0 real ( wp ), parameter :: b197 = 0 real ( wp ), parameter :: b198 = 0 real ( wp ), parameter :: b199 = 0 real ( wp ), parameter :: b1910 = 0 real ( wp ), parameter :: b1911 = 5.403684273875123798630962329849980016426640735397844799635504992740247972317943415738_wp real ( wp ), parameter :: b1912 = - 6.547667878535769638577053800139325829335808492655639368966216657633158529493394018748_wp real ( wp ), parameter :: b1913 = 7.013821350363578373165272471360941682153886129098573011050120208706394847104611280659_wp real ( wp ), parameter :: b1914 = . 1870129209851220070917089872488052512865730910524666003812699685036249110639968876355_wp real ( wp ), parameter :: b1915 = - 3.586221630318466310345416445340680667399109825679889726092108094877121092019568725906_wp real ( wp ), parameter :: b1916 = - 2.796807192734124892412016302005787005622243784243008121795193206999340165569504484433_wp real ( wp ), parameter :: b1917 = . 5350966429298067141403865717192268565615462868769074262461851475076297049847405900305_wp real ( wp ), parameter :: b1918 = . 2145339995655007603736693460786443623723658483597653704106017814468824679556810775581_wp real ( wp ), parameter :: b201 = - . 174248591829004420561455485419671045547950455319075200579847596404286261556824993197 9e-1_wp real ( wp ), parameter :: b202 = 0 real ( wp ), parameter :: b203 = 0 real ( wp ), parameter :: b204 = 0 real ( wp ), parameter :: b205 = 0 real ( wp ), parameter :: b206 = 0 real ( wp ), parameter :: b207 = 0 real ( wp ), parameter :: b208 = 0 real ( wp ), parameter :: b209 = 0 real ( wp ), parameter :: b2010 = 0 real ( wp ), parameter :: b2011 = 1.624681387971290566033459737855869526767754661771120924184664522930252560057487715917_wp real ( wp ), parameter :: b2012 = - 2.354176134519334554629765394537690359953484690980299665915399924759933249024433201062_wp real ( wp ), parameter :: b2013 = 2.681464673816256355689049206851920401601461184001531947851310974409875440156813229521_wp real ( wp ), parameter :: b2014 = - . 376915680288753988439402397990322923549765827404134339727828635658845799927369883756 8e-1_wp real ( wp ), parameter :: b2015 = - 1.416558131026522083720211494413873707821785422770559705231460034487688457012423059506_wp real ( wp ), parameter :: b2016 = - . 6949353599391523142082433283060914200352029386004581317085753581959007030993120101233_wp real ( wp ), parameter :: b2017 = . 2176483372495038460388837827561689520877604442565239353657200502175872181787882826377_wp real ( wp ), parameter :: b2018 = . 2697602441781337550421531890140860774876933975825845928799740196946913466182988994464_wp real ( wp ), parameter :: b2019 = - . 301065440446940628144612724774332856174131847296639136359884366311074356623894437380 7e-1_wp real ( wp ), parameter :: b211 = - . 540306963360225910864626964493425695755140459941256145376726807487078366992549801645 7e-2_wp real ( wp ), parameter :: b212 = 0 real ( wp ), parameter :: b213 = 0 real ( wp ), parameter :: b214 = 0 real ( wp ), parameter :: b215 = 0 real ( wp ), parameter :: b216 = 0 real ( wp ), parameter :: b217 = 0 real ( wp ), parameter :: b218 = 0 real ( wp ), parameter :: b219 = 0 real ( wp ), parameter :: b2110 = 0 real ( wp ), parameter :: b2111 = . 4139045320778312241379049484992085439613081939853923740529945110841130228938567470608_wp real ( wp ), parameter :: b2112 = - . 6225569512435124987325753043472442306739960604338314680453027342793707050930404307846_wp real ( wp ), parameter :: b2113 = . 8734771329093316867790902545034150641322140869164058836843523721471009826005087793734_wp real ( wp ), parameter :: b2114 = - . 4460631186034505809671866759278699513326438900110859254673757293843834232949457511945_wp real ( wp ), parameter :: b2115 = - . 4770024428429503264261245457799687730095056727976098627656199278228457764648229288301_wp real ( wp ), parameter :: b2116 = . 3350194037993700956622540574882038342150917200081189888351569726131444997493018243069_wp real ( wp ), parameter :: b2117 = . 750424846866882833513102782733608286417290505294615615517112565251837019201701928589 7e-1_wp real ( wp ), parameter :: b2118 = . 2868602398412017179778096520767496699075337622961506198525486757858393614463244192166_wp real ( wp ), parameter :: b2119 = - . 3105278876109550093409796945938508430591700006793679865817465482241195091701064106306_wp real ( wp ), parameter :: b2120 = . 5980742748031364157936282749945094293392110393839614650861749046057502083978432774641_wp real ( wp ), parameter :: b221 = - . 804063778362985267038625340842747712983903803989522295832710238438234785438722814058 6e-1_wp real ( wp ), parameter :: b222 = 0 real ( wp ), parameter :: b223 = 0 real ( wp ), parameter :: b224 = 0 real ( wp ), parameter :: b225 = 0 real ( wp ), parameter :: b226 = 0 real ( wp ), parameter :: b227 = 0 real ( wp ), parameter :: b228 = 0 real ( wp ), parameter :: b229 = 0 real ( wp ), parameter :: b2210 = 0 real ( wp ), parameter :: b2211 = 1 4.09003825209192451104055534327205557907144506304998967309786817952326707840468519855_wp real ( wp ), parameter :: b2212 = - 1 6.51095452142836096439418777253125778161824307435047496403861839615632359732680906324_wp real ( wp ), parameter :: b2213 = 1 7.13478919889388959512706015258229430254357775856472236246578628732774154201548556949_wp real ( wp ), parameter :: b2214 = . 5162416754963992955466349330401373481541758099272782749146402071285515617224748797349_wp real ( wp ), parameter :: b2215 = - 8.738239054447235555769280431947112005536670926201592356606646679961357074323383907433_wp real ( wp ), parameter :: b2216 = - 7.928763291217204762997981382770542063580344552643223907022402362361688687161033776950_wp real ( wp ), parameter :: b2217 = 1.299607095883618341404631332785395816146491714221581325131902479964394904680531866743_wp real ( wp ), parameter :: b2218 = . 2985974887158637819626343538772133330364013942516888589723607063393086453938726507764_wp real ( wp ), parameter :: b2219 = . 2306899737777788621463004228318904282554044640133218561071121312583287783148540854557_wp real ( wp ), parameter :: b2220 = - . 4162475612748372571090619229550372319146077330570330975546626972398912191287912992344_wp real ( wp ), parameter :: b2221 = . 3046152792810969736488023713665193266324974471792934717484737567812431778577335699415_wp real ( wp ), parameter :: b231 = . 518894406777466491313496588184233863746516753842681259460186640191745312537378044328 8e-1_wp real ( wp ), parameter :: b232 = 0 real ( wp ), parameter :: b233 = 0 real ( wp ), parameter :: b234 = 0 real ( wp ), parameter :: b235 = 0 real ( wp ), parameter :: b236 = 0 real ( wp ), parameter :: b237 = 0 real ( wp ), parameter :: b238 = 0 real ( wp ), parameter :: b239 = 0 real ( wp ), parameter :: b2310 = 0 real ( wp ), parameter :: b2311 = - 1.283277980375441090269741488559725341590001661469261097548681503281119502510781510671_wp real ( wp ), parameter :: b2312 = 3.197031115178587180279278821590157014124289302868827178494105498343258944734856975984_wp real ( wp ), parameter :: b2313 = - 4.925730995528770332329418001427019544036228452951763539493235207541539355193215629707_wp real ( wp ), parameter :: b2314 = . 4556842843249686735202095835169824346358162044635023939110786683727545600555997662146_wp real ( wp ), parameter :: b2315 = 2.672937738349530686900845106745665406421870114003531687061025215633257210063413548721_wp real ( wp ), parameter :: b2316 = - 1.545486350471516022666399706441233218275810264466541860777249858172892030485892221263_wp real ( wp ), parameter :: b2317 = - . 3721987962685219677888284678662933875128991354125828036313277053504464873414697307303_wp real ( wp ), parameter :: b2318 = . 1275610106742831413187042273550361954603324559021122028077942983877428065036205767992_wp real ( wp ), parameter :: b2319 = 1.955690675673468524392185835321028843337157689840864927642297223731192314442172030656_wp real ( wp ), parameter :: b2320 = . 3191081222387442241092001119049884652557628641382080948098270187047261996513219724153_wp real ( wp ), parameter :: b2321 = 1.121546003224352473639037341460033868464982074905347279402236597305066991912121393629_wp real ( wp ), parameter :: b2322 = - . 8107564764218937636489023156262164031679294933798974588613267897756930246095048550015_wp real ( wp ), parameter :: b241 = - . 701170829716883809332007327182423181155551637683933988976878053377220404609805677864 5e-2_wp real ( wp ), parameter :: b242 = 0 real ( wp ), parameter :: b243 = 0 real ( wp ), parameter :: b244 = 0 real ( wp ), parameter :: b245 = 0 real ( wp ), parameter :: b246 = 0 real ( wp ), parameter :: b247 = 0 real ( wp ), parameter :: b248 = 0 real ( wp ), parameter :: b249 = 0 real ( wp ), parameter :: b2410 = 0 real ( wp ), parameter :: b2411 = 1.191430397515656948185785084406871641958062497543742234300725797836945018037271858084_wp real ( wp ), parameter :: b2412 = - 1.828224802245176636695187739870698589078178771180859212263094110856159464053843046402_wp real ( wp ), parameter :: b2413 = 2.587660024998591526533741070898054580235728551249558749988014852858819613806922059203_wp real ( wp ), parameter :: b2414 = - . 4609429033777800137012176300671539646289103914701490781289612317160305665226273519358_wp real ( wp ), parameter :: b2415 = - 1.325931501693639442980805419646217538577342867896123447497177267595031990967256304102_wp real ( wp ), parameter :: b2416 = . 5048216427266366058315103764214691413381451411460686651485736358879672359427752204445_wp real ( wp ), parameter :: b2417 = . 2194255008759965600775266235750828151587685421380286198819468613425068758315070811985_wp real ( wp ), parameter :: b2418 = . 2580087037350744276193737624019399564007443016182003098695556923721330317034140914297_wp real ( wp ), parameter :: b2419 = - . 7820644366919761953621998768725631028114098091524728093576852041863328545044120664888_wp real ( wp ), parameter :: b2420 = . 4981236112353889237817573857026156554544669576903254922783923277260844155420240361688_wp real ( wp ), parameter :: b2421 = - . 2818659230370184110487250730841700637198882434735413160224991411608463306147813033701_wp real ( wp ), parameter :: b2422 = . 1975630649870201406787729762339550948339749510061280462627577046361617264269398213974_wp real ( wp ), parameter :: b2423 = - . 273778905581816435732031706005041179773534093993671254918029317846966743812267114517 8e-1_wp real ( wp ), parameter :: b251 = . 697122315798549144188954346305896833583280092231569622697321426359994641318713375744 1e-1_wp real ( wp ), parameter :: b252 = 0 real ( wp ), parameter :: b253 = 0 real ( wp ), parameter :: b254 = 0 real ( wp ), parameter :: b255 = 0 real ( wp ), parameter :: b256 = 0 real ( wp ), parameter :: b257 = 0 real ( wp ), parameter :: b258 = 0 real ( wp ), parameter :: b259 = 0 real ( wp ), parameter :: b2510 = 0 real ( wp ), parameter :: b2511 = . 8485072933915981598683071881067011723176540155630964375777672731824955304237165117739_wp real ( wp ), parameter :: b2512 = - 1.504790599380062029550479292004278750516583328735111485609300227641118522265117453228_wp real ( wp ), parameter :: b2513 = 2.971661962491066226601618850699945230551598000336030549022007199066569229936095601265_wp real ( wp ), parameter :: b2514 = . 2189212281135321618639152301919425667361998064642432899287016486436734890226912997813_wp real ( wp ), parameter :: b2515 = - 1.363504916136495083863504916136495083863504916136495083863504916136495083863504916136_wp real ( wp ), parameter :: b2516 = 1.535256651208129648912110087693939955244136470648889182343875125782209378315005545886_wp real ( wp ), parameter :: b2517 = . 2255130922481182477299374148203865138344993252214597927624562120740486384043245934395_wp real ( wp ), parameter :: b2518 = - . 1252487725356194666272520523138563196763786809348751670013078003838735310461344402659_wp real ( wp ), parameter :: b2519 = - 1.433947471579772638181105448843590748725989807918463347706781654253234025872206977656_wp real ( wp ), parameter :: b2520 = - . 2653692486145121794045624436138677664647506121922928212398504961979636551101946127078_wp real ( wp ), parameter :: b2521 = - 1.057083353895191276322695714066286715782319071838176809244435034528746563196511305239_wp real ( wp ), parameter :: b2522 = . 5958992342288874679818860848371024166473432615899828093938621236679595663138268737944_wp real ( wp ), parameter :: b2523 = . 564076397400236016584068475950962239377917411088964287712727994971464949756123568222 8e-1_wp real ( wp ), parameter :: b2524 = . 2280650291404422449145227284026716224019757875996592625955056045913295898305255848960_wp real ( wp ), parameter :: b261 = . 584772440750170780050996402766399551980400187047285037921605393360332144893732038287 3e-1_wp real ( wp ), parameter :: b262 = 0 real ( wp ), parameter :: b263 = 0 real ( wp ), parameter :: b264 = 0 real ( wp ), parameter :: b265 = 0 real ( wp ), parameter :: b266 = 0 real ( wp ), parameter :: b267 = 0 real ( wp ), parameter :: b268 = 0 real ( wp ), parameter :: b269 = 0 real ( wp ), parameter :: b2610 = 0 real ( wp ), parameter :: b2611 = . 8482433234853130399472226781516394610296267520150369993929425712656780053034142790857_wp real ( wp ), parameter :: b2612 = - 1.818778337229596341437999685014432821665031881560984595319320029619105771387827231293_wp real ( wp ), parameter :: b2613 = 3.360950949051261986329911895518526801628857587757616068272635548399517354842337530945_wp real ( wp ), parameter :: b2614 = . 1508779656009112841743785043192199515750215073024373320382690391467484988490972888214_wp real ( wp ), parameter :: b2615 = - 1.535625970104296058211732653128688607443092018291498032244748403611478465692632705036_wp real ( wp ), parameter :: b2616 = 1.689710648596447426456373308903510510459502815029443327222583037297243278873766013804_wp real ( wp ), parameter :: b2617 = . 2753763916359371389555315070580325732352897337628204267122697551960198539312003364345_wp real ( wp ), parameter :: b2618 = - . 866399320360343455588069455962531769915158860350794351565513579974269217033207464145 6e-1_wp real ( wp ), parameter :: b2619 = - 1.514109179619982965788582168222695819982704233094238060182049846398573819503074487947_wp real ( wp ), parameter :: b2620 = - . 2731051919432418524342072455220752640028637692479133311886846927223922900302148881433_wp real ( wp ), parameter :: b2621 = - . 7386383863141516263346011834004149434481207761507984915319537912098408949133636097415_wp real ( wp ), parameter :: b2622 = . 6343578675072522696688679414505709253269883958978404947025376176286935002340724649840_wp real ( wp ), parameter :: b2623 = . 221991526800986051063425221368252326988825501687679709007514160539707367422154636492 8e-1_wp real ( wp ), parameter :: b2624 = - . 732965453849356388777981169304047776188807962581791774108414027650862800350429129765 4e-1_wp real ( wp ), parameter :: b2625 = 0 real ( wp ), parameter :: c1 = . 256030042244881864005697373302738151773382407644313695363479840219957968029099366778 5e-1_wp real ( wp ), parameter :: c2 = 0 real ( wp ), parameter :: c3 = 0 real ( wp ), parameter :: c4 = 0 real ( wp ), parameter :: c5 = 0 real ( wp ), parameter :: c6 = 0 real ( wp ), parameter :: c7 = 0 real ( wp ), parameter :: c8 = 0 real ( wp ), parameter :: c9 = 0 real ( wp ), parameter :: c10 = 0 real ( wp ), parameter :: c11 = 0 real ( wp ), parameter :: c12 = 0 real ( wp ), parameter :: c13 = 0 real ( wp ), parameter :: c14 = 0 real ( wp ), parameter :: c15 = . 4518777011767389121126592910724741440985372571238852320538195476794258345326944681173_wp real ( wp ), parameter :: c16 = . 1571644835050410342525892218785914023945906781166129113400861908694541485546171465980_wp real ( wp ), parameter :: c17 = 1.587056574024945279877130621604901273153398820663935100541595105228850005414302839405_wp real ( wp ), parameter :: c18 = . 1457164101207840798598697293357824068221719394674815441268910066025070033320249231167_wp real ( wp ), parameter :: c19 = . 675669099287499336570477790695716612153483886928452443181147440035835137579157526912 5e-1_wp real ( wp ), parameter :: c20 = . 2263702829370636470261171189724674060331565741885612750461048803721449531302274282834_wp real ( wp ), parameter :: c21 = . 9585657493693419066100150421626762898713313017234629340723230525017707321578125838875_wp real ( wp ), parameter :: c22 = - . 573751095225372025124339224139770182418288614522996766037715732537967213247067399918 2e-1_wp real ( wp ), parameter :: c23 = - . 8207294363127299380342111455087248111504033000422844250308430626629630466499721876523_wp real ( wp ), parameter :: c24 = - . 8199946795810496733757980690172928576129340372072025495094374198905045106663577622820_wp real ( wp ), parameter :: c25 = - . 9218218898708361658735554044867437117607070020394289598912304554724677090414683888511_wp real ( wp ), parameter :: c26 = 0 real ( wp ), parameter :: d1 = . 261145356755804717432724505302833646662680661588396191468128133636318997291524554487 3e-1_wp real ( wp ), parameter :: d2 = 0 real ( wp ), parameter :: d3 = 0 real ( wp ), parameter :: d4 = 0 real ( wp ), parameter :: d5 = 0 real ( wp ), parameter :: d6 = 0 real ( wp ), parameter :: d7 = 0 real ( wp ), parameter :: d8 = 0 real ( wp ), parameter :: d9 = 0 real ( wp ), parameter :: d10 = 0 real ( wp ), parameter :: d11 = 0 real ( wp ), parameter :: d12 = 0 real ( wp ), parameter :: d13 = 0 real ( wp ), parameter :: d14 = 0 real ( wp ), parameter :: d15 = . 613078959004402442037534723545751450332216838915461101692410958456725866766942808432 8e-1_wp real ( wp ), parameter :: d16 = . 2225176387207912085954871898906978473895949131807976650805573845853338932568562016822_wp real ( wp ), parameter :: d17 = - . 6452541374509687528609607022885324791758461431623241957335732784511248267767614258399_wp real ( wp ), parameter :: d18 = . 1428813432326775237316522259538641672308222297639395170211160113665720641033224975230_wp real ( wp ), parameter :: d19 = . 199850370351176411605349510612686616431974102322133216722189983150203383389722650760 7e-1_wp real ( wp ), parameter :: d20 = . 2271215662186804051109071916317932366756181626009529050272447503184463361820614170681_wp real ( wp ), parameter :: d21 = . 3555653412963184679461951194576569724124866534036012519458466746801575903667969215385_wp real ( wp ), parameter :: d22 = - . 508414420498458416190831233017756495487706715400107942955977770430294684864492873698 4e-1_wp real ( wp ), parameter :: d23 = . 3451056668568212037936618506732414889276840710489545476476791628380007277211978725437_wp real ( wp ), parameter :: d24 = - . 1182965488838884338743861432044520655991039617854064994056837668531638997325328536863_wp real ( wp ), parameter :: d25 = 0 real ( wp ), parameter :: d26 = . 4137931034482758620689655172413793103448275862068965517241379310344827586206896551724_wp real ( wp ), parameter :: e1 = c1 - d1 real ( wp ), parameter :: e2 = c2 - d2 real ( wp ), parameter :: e3 = c3 - d3 real ( wp ), parameter :: e4 = c4 - d4 real ( wp ), parameter :: e5 = c5 - d5 real ( wp ), parameter :: e6 = c6 - d6 real ( wp ), parameter :: e7 = c7 - d7 real ( wp ), parameter :: e8 = c8 - d8 real ( wp ), parameter :: e9 = c9 - d9 real ( wp ), parameter :: e10 = c10 - d10 real ( wp ), parameter :: e11 = c11 - d11 real ( wp ), parameter :: e12 = c12 - d12 real ( wp ), parameter :: e13 = c13 - d13 real ( wp ), parameter :: e14 = c14 - d14 real ( wp ), parameter :: e15 = c15 - d15 real ( wp ), parameter :: e16 = c16 - d16 real ( wp ), parameter :: e17 = c17 - d17 real ( wp ), parameter :: e18 = c18 - d18 real ( wp ), parameter :: e19 = c19 - d19 real ( wp ), parameter :: e20 = c20 - d20 real ( wp ), parameter :: e21 = c21 - d21 real ( wp ), parameter :: e22 = c22 - d22 real ( wp ), parameter :: e23 = c23 - d23 real ( wp ), parameter :: e24 = c24 - d24 real ( wp ), parameter :: e25 = c25 - d25 real ( wp ), parameter :: e26 = c26 - d26 associate ( f1 => me % funcs (:, 1 ), & f2 => me % funcs (:, 2 ), & f3 => me % funcs (:, 3 ), & f4 => me % funcs (:, 4 ), & f5 => me % funcs (:, 5 ), & f6 => me % funcs (:, 6 ), & f7 => me % funcs (:, 7 ), & f8 => me % funcs (:, 8 ), & f9 => me % funcs (:, 9 ), & f10 => me % funcs (:, 10 ), & f11 => me % funcs (:, 11 ), & f12 => me % funcs (:, 12 ), & f13 => me % funcs (:, 13 ), & f14 => me % funcs (:, 14 ), & f15 => me % funcs (:, 15 ), & f16 => me % funcs (:, 16 ), & f17 => me % funcs (:, 17 ), & f18 => me % funcs (:, 18 ), & f19 => me % funcs (:, 19 ), & f20 => me % funcs (:, 20 ), & f21 => me % funcs (:, 21 ), & f22 => me % funcs (:, 22 ), & f23 => me % funcs (:, 23 ), & f24 => me % funcs (:, 24 ), & f25 => me % funcs (:, 25 ), & f26 => me % funcs (:, 26 )) call me % f ( t + h , x , f1 ) call me % f ( t + a2 * h , x + h * ( b21 * f1 ), f2 ) call me % f ( t + a3 * h , x + h * ( b31 * f1 + b32 * f2 ), f3 ) call me % f ( t + a4 * h , x + h * ( b41 * f1 + b42 * f2 + b43 * f3 ), f4 ) call me % f ( t + a5 * h , x + h * ( b51 * f1 + b52 * f2 + b53 * f3 + b54 * f4 ), f5 ) call me % f ( t + a6 * h , x + h * ( b61 * f1 + b62 * f2 + b63 * f3 + b64 * f4 + b65 * f5 ), f6 ) call me % f ( t + a7 * h , x + h * ( b71 * f1 + b72 * f2 + b73 * f3 + b74 * f4 + b75 * f5 + b76 * f6 ), f7 ) call me % f ( t + a8 * h , x + h * ( b81 * f1 + b82 * f2 + b83 * f3 + b84 * f4 + b85 * f5 + b86 * f6 + b87 * f7 ), f8 ) call me % f ( t + a9 * h , x + h * ( b91 * f1 + b92 * f2 + b93 * f3 + b94 * f4 + b95 * f5 + b96 * f6 + b97 * f7 + b98 * f8 ), f9 ) call me % f ( t + a10 * h , x + h * ( b101 * f1 + b102 * f2 + b103 * f3 + b104 * f4 + b105 * f5 + b106 * f6 + b107 * f7 + & b108 * f8 + b109 * f9 ), f10 ) call me % f ( t + a11 * h , x + h * ( b111 * f1 + b112 * f2 + b113 * f3 + b114 * f4 + b115 * f5 + b116 * f6 + b117 * f7 + & b118 * f8 + b119 * f9 + b1110 * f10 ), f11 ) call me % f ( t + a12 * h , x + h * ( b121 * f1 + b122 * f2 + b123 * f3 + b124 * f4 + b125 * f5 + b126 * f6 + b127 * f7 + & b128 * f8 + b129 * f9 + b1210 * f10 + b1211 * f11 ), f12 ) call me % f ( t + a13 * h , x + h * ( b131 * f1 + b132 * f2 + b133 * f3 + b134 * f4 + b135 * f5 + b136 * f6 + b137 * f7 + & b138 * f8 + b139 * f9 + b1310 * f10 + b1311 * f11 + b1312 * f12 ), f13 ) call me % f ( t + a14 * h , x + h * ( b141 * f1 + b142 * f2 + b143 * f3 + b144 * f4 + b145 * f5 + b146 * f6 + b147 * f7 + & b148 * f8 + b149 * f9 + b1410 * f10 + b1411 * f11 + b1412 * f12 + b1413 * f13 ), f14 ) call me % f ( t + a15 * h , x + h * ( b151 * f1 + b152 * f2 + b153 * f3 + b154 * f4 + b155 * f5 + b156 * f6 + b157 * f7 + & b158 * f8 + b159 * f9 + b1510 * f10 + b1511 * f11 + b1512 * f12 + b1513 * f13 + & b1514 * f14 ), f15 ) call me % f ( t + a16 * h , x + h * ( b161 * f1 + b162 * f2 + b163 * f3 + b164 * f4 + b165 * f5 + b166 * f6 + b167 * f7 + & b168 * f8 + b169 * f9 + b1610 * f10 + b1611 * f11 + b1612 * f12 + b1613 * f13 + & b1614 * f14 + b1615 * f15 ), f16 ) call me % f ( t + a17 * h , x + h * ( b171 * f1 + b172 * f2 + b173 * f3 + b174 * f4 + b175 * f5 + b176 * f6 + b177 * f7 + & b178 * f8 + b179 * f9 + b1710 * f10 + b1711 * f11 + b1712 * f12 + b1713 * f13 + & b1714 * f14 + b1715 * f15 + b1716 * f16 ), f17 ) call me % f ( t + a18 * h , x + h * ( b181 * f1 + b182 * f2 + b183 * f3 + b184 * f4 + b185 * f5 + b186 * f6 + b187 * f7 + & b188 * f8 + b189 * f9 + b1810 * f10 + b1811 * f11 + b1812 * f12 + b1813 * f13 + & b1814 * f14 + b1815 * f15 + b1816 * f16 + b1817 * f17 ), f18 ) call me % f ( t + a19 * h , x + h * ( b191 * f1 + b192 * f2 + b193 * f3 + b194 * f4 + b195 * f5 + b196 * f6 + b197 * f7 + & b198 * f8 + b199 * f9 + b1910 * f10 + b1911 * f11 + b1912 * f12 + b1913 * f13 + & b1914 * f14 + b1915 * f15 + b1916 * f16 + b1917 * f17 + b1918 * f18 ), f19 ) call me % f ( t + a20 * h , x + h * ( b201 * f1 + b202 * f2 + b203 * f3 + b204 * f4 + b205 * f5 + b206 * f6 + b207 * f7 + & b208 * f8 + b209 * f9 + b2010 * f10 + b2011 * f11 + b2012 * f12 + b2013 * f13 + & b2014 * f14 + b2015 * f15 + b2016 * f16 + b2017 * f17 + b2018 * f18 + b2019 * f19 ), f20 ) call me % f ( t + a21 * h , x + h * ( b211 * f1 + b212 * f2 + b213 * f3 + b214 * f4 + b215 * f5 + b216 * f6 + b217 * f7 + & b218 * f8 + b219 * f9 + b2110 * f10 + b2111 * f11 + b2112 * f12 + b2113 * f13 + & b2114 * f14 + b2115 * f15 + b2116 * f16 + b2117 * f17 + b2118 * f18 + b2119 * f19 + & b2120 * f20 ), f21 ) call me % f ( t + a22 * h , x + h * ( b221 * f1 + b222 * f2 + b223 * f3 + b224 * f4 + b225 * f5 + b226 * f6 + b227 * f7 + & b228 * f8 + b229 * f9 + b2210 * f10 + b2211 * f11 + b2212 * f12 + b2213 * f13 + & b2214 * f14 + b2215 * f15 + b2216 * f16 + b2217 * f17 + b2218 * f18 + b2219 * f19 + & b2220 * f20 + b2221 * f21 ), f22 ) call me % f ( t + a23 * h , x + h * ( b231 * f1 + b232 * f2 + b233 * f3 + b234 * f4 + b235 * f5 + b236 * f6 + b237 * f7 + & b238 * f8 + b239 * f9 + b2310 * f10 + b2311 * f11 + b2312 * f12 + b2313 * f13 + & b2314 * f14 + b2315 * f15 + b2316 * f16 + b2317 * f17 + b2318 * f18 + b2319 * f19 + & b2320 * f20 + b2321 * f21 + b2322 * f22 ), f23 ) call me % f ( t + a24 * h , x + h * ( b241 * f1 + b242 * f2 + b243 * f3 + b244 * f4 + b245 * f5 + b246 * f6 + b247 * f7 + & b248 * f8 + b249 * f9 + b2410 * f10 + b2411 * f11 + b2412 * f12 + b2413 * f13 + & b2414 * f14 + b2415 * f15 + b2416 * f16 + b2417 * f17 + b2418 * f18 + b2419 * f19 + & b2420 * f20 + b2421 * f21 + b2422 * f22 + b2423 * f23 ), f24 ) call me % f ( t + h , x + h * ( b251 * f1 + b252 * f2 + b253 * f3 + b254 * f4 + b255 * f5 + b256 * f6 + b257 * f7 + & b258 * f8 + b259 * f9 + b2510 * f10 + b2511 * f11 + b2512 * f12 + b2513 * f13 + & b2514 * f14 + b2515 * f15 + b2516 * f16 + b2517 * f17 + b2518 * f18 + b2519 * f19 + & b2520 * f20 + b2521 * f21 + b2522 * f22 + b2523 * f23 + b2524 * f24 ), f25 ) call me % f ( t + h , x + h * ( b261 * f1 + b262 * f2 + b263 * f3 + b264 * f4 + b265 * f5 + b266 * f6 + b267 * f7 + & b268 * f8 + b269 * f9 + b2610 * f10 + b2611 * f11 + b2612 * f12 + b2613 * f13 + & b2614 * f14 + b2615 * f15 + b2616 * f16 + b2617 * f17 + b2618 * f18 + b2619 * f19 + & b2620 * f20 + b2621 * f21 + b2622 * f22 + b2623 * f23 + b2624 * f24 + b2625 * f25 ), f26 ) xf = x + h * ( c1 * f1 + c2 * f2 + c3 * f3 + c4 * f4 + c5 * f5 + c6 * f6 + c7 * f7 + c8 * f8 + c9 * f9 + c10 * f10 + c11 * f11 + c12 * f12 + & c13 * f13 + c14 * f14 + c15 * f15 + c16 * f16 + c17 * f17 + c18 * f18 + c19 * f19 + c20 * f20 + c21 * f21 + c22 * f22 + & c23 * f23 + c24 * f24 + c25 * f25 + c26 * f26 ) xerr = h * ( e1 * f1 + e2 * f2 + e3 * f3 + e4 * f4 + e5 * f5 + e6 * f6 + e7 * f7 + e8 * f8 + e9 * f9 + e10 * f10 + e11 * f11 + e12 * f12 + & e13 * f13 + e14 * f14 + e15 * f15 + e16 * f16 + e17 * f17 + e18 * f18 + e19 * f19 + e20 * f20 + e21 * f21 + e22 * f22 + & e23 * f23 + e24 * f24 + e25 * f25 + e26 * f26 ) end associate end procedure rks1110a !***************************************************************************************** !***************************************************************************************** end submodule rklib_variable_steps !*****************************************************************************************","tags":"","loc":"sourcefile/rklib_variable_steps.f90.html"},{"title":"rklib_example.f90 – rklib","text":"This file depends on sourcefile~~rklib_example.f90~~EfferentGraph sourcefile~rklib_example.f90 rklib_example.f90 sourcefile~rklib_module.f90 rklib_module.F90 sourcefile~rklib_example.f90->sourcefile~rklib_module.f90 Help × Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Contents Programs rklib_example Source Code rklib_example.f90 Source Code program rklib_example use rklib_module , wp => rk_module_rk use iso_fortran_env , only : output_unit implicit none integer , parameter :: n = 2 !! dimension of the system real ( wp ), parameter :: tol = 1.0e-12_wp !! integration tolerance real ( wp ), parameter :: t0 = 0.0_wp !! initial t value real ( wp ), parameter :: dt = 1.0_wp !! initial step size real ( wp ), parameter :: tf = 10 0.0_wp !! endpoint of integration real ( wp ), dimension ( n ), parameter :: x0 = [ 0.0_wp , 0.1_wp ] !! initial x value real ( wp ), dimension ( n ) :: xf !! final x value type ( rktp86_class ) :: prop character ( len = :), allocatable :: message call prop % initialize ( n = n , f = fvpol , rtol = [ tol ], atol = [ tol ]) call prop % integrate ( t0 , x0 , dt , tf , xf ) call prop % status ( message = message ) write ( output_unit , '(A)' ) message write ( output_unit , '(A,F7.2/,A,2E18.10)' ) & 'tf =' , tf , 'xf =' , xf ( 1 ), xf ( 2 ) contains subroutine fvpol ( me , t , x , f ) !! Right-hand side of van der Pol equation class ( rk_class ), intent ( inout ) :: me real ( wp ), intent ( in ) :: t real ( wp ), dimension (:), intent ( in ) :: x real ( wp ), dimension (:), intent ( out ) :: f f ( 1 ) = x ( 2 ) f ( 2 ) = 0.2_wp * ( 1.0_wp - x ( 1 ) ** 2 ) * x ( 2 ) - x ( 1 ) end subroutine fvpol end program rklib_example","tags":"","loc":"sourcefile/rklib_example.f90.html"}]} \ No newline at end of file diff --git a/type/rk_class.html b/type/rk_class.html index d707e9ec..0691217a 100644 --- a/type/rk_class.html +++ b/type/rk_class.html @@ -359,7 +359,7 @@

Inherited by

- + type~dverk65_class->type~rk_variable_step_class @@ -374,7 +374,7 @@

Inherited by

- + type~dverk78_class->type~rk_variable_step_class @@ -389,7 +389,7 @@

Inherited by

- + type~euler_class->type~rk_fixed_step_class @@ -404,7 +404,7 @@

Inherited by

- + type~heun_class->type~rk_fixed_step_class @@ -419,7 +419,7 @@

Inherited by

- + type~midpoint_class->type~rk_fixed_step_class @@ -434,7 +434,7 @@

Inherited by

- + type~rk3_class->type~rk_fixed_step_class @@ -449,7 +449,7 @@

Inherited by

- + type~rk4_class->type~rk_fixed_step_class @@ -464,7 +464,7 @@

Inherited by

- + type~rk5_class->type~rk_fixed_step_class @@ -479,7 +479,7 @@

Inherited by

- + type~rk7_class->type~rk_fixed_step_class @@ -494,7 +494,7 @@

Inherited by

- + type~rk8_10_class->type~rk_fixed_step_class @@ -509,7 +509,7 @@

Inherited by

- + type~rk8_12_class->type~rk_fixed_step_class @@ -524,7 +524,7 @@

Inherited by

- + type~rk_variable_step_fsal_class->type~rk_variable_step_class @@ -539,7 +539,7 @@

Inherited by

- + type~rkb109_class->type~rk_variable_step_class @@ -554,7 +554,7 @@

Inherited by

- + type~rkb6_class->type~rk_fixed_step_class @@ -569,7 +569,7 @@

Inherited by

- + type~rkbs54_class->type~rk_variable_step_class @@ -584,7 +584,7 @@

Inherited by

- + type~rkc108_class->type~rk_variable_step_class @@ -599,7 +599,7 @@

Inherited by

- + type~rkc5_class->type~rk_fixed_step_class @@ -629,7 +629,7 @@

Inherited by

- + type~rkck54_class->type~rk_variable_step_class @@ -644,7 +644,7 @@

Inherited by

- + type~rkcv8_class->type~rk_fixed_step_class @@ -659,7 +659,7 @@

Inherited by

- + type~rkdp65_class->type~rk_variable_step_class @@ -674,7 +674,7 @@

Inherited by

- + type~rkdp85_class->type~rk_variable_step_class @@ -689,7 +689,7 @@

Inherited by

- + type~rkdp87_class->type~rk_variable_step_class @@ -704,7 +704,7 @@

Inherited by

- + type~rkev87_class->type~rk_variable_step_class @@ -719,7 +719,7 @@

Inherited by

- + type~rkf108_class->type~rk_variable_step_class @@ -734,7 +734,7 @@

Inherited by

- + type~rkf1210_class->type~rk_variable_step_class @@ -749,7 +749,7 @@

Inherited by

- + type~rkf1412_class->type~rk_variable_step_class @@ -764,7 +764,7 @@

Inherited by

- + type~rkf45_class->type~rk_variable_step_class @@ -779,7 +779,7 @@

Inherited by

- + type~rkf78_class->type~rk_variable_step_class @@ -794,7 +794,7 @@

Inherited by

- + type~rkf89_class->type~rk_variable_step_class @@ -809,7 +809,7 @@

Inherited by

- + type~rkh10_class->type~rk_fixed_step_class @@ -824,7 +824,7 @@

Inherited by

- + type~rkk87_class->type~rk_variable_step_class @@ -839,7 +839,7 @@

Inherited by

- + type~rkl5_class->type~rk_fixed_step_class @@ -869,7 +869,7 @@

Inherited by

- + type~rklk5b_class->type~rk_fixed_step_class @@ -884,7 +884,7 @@

Inherited by

- + type~rkls44_class->type~rk_fixed_step_class @@ -899,7 +899,7 @@

Inherited by

- + type~rkls54_class->type~rk_fixed_step_class @@ -914,7 +914,7 @@

Inherited by

- + type~rko10_class->type~rk_fixed_step_class @@ -929,7 +929,7 @@

Inherited by

- + type~rko129_class->type~rk_variable_step_class @@ -944,7 +944,7 @@

Inherited by

- + type~rkr4_class->type~rk_fixed_step_class @@ -959,7 +959,7 @@

Inherited by

- + type~rks1110a_class->type~rk_variable_step_class @@ -974,7 +974,7 @@

Inherited by

- + type~rks4_class->type~rk_fixed_step_class @@ -989,7 +989,7 @@

Inherited by

- + type~rks5_class->type~rk_fixed_step_class @@ -1004,7 +1004,7 @@

Inherited by

- + type~rks98_class->type~rk_variable_step_class @@ -1019,7 +1019,7 @@

Inherited by

- + type~rkss54_class->type~rk_variable_step_class @@ -1034,7 +1034,7 @@

Inherited by

- + type~rkss76_class->type~rk_variable_step_class @@ -1049,7 +1049,7 @@

Inherited by

- + type~rkssp22_class->type~rk_fixed_step_class @@ -1064,7 +1064,7 @@

Inherited by

- + type~rkssp33_class->type~rk_fixed_step_class @@ -1079,7 +1079,7 @@

Inherited by

- + type~rkssp43_class->type~rk_variable_step_class @@ -1094,7 +1094,7 @@

Inherited by

- + type~rkssp53_class->type~rk_fixed_step_class @@ -1109,7 +1109,7 @@

Inherited by

- + type~rkssp54_class->type~rk_fixed_step_class @@ -1124,7 +1124,7 @@

Inherited by

- + type~rkt98a_class->type~rk_variable_step_class @@ -1139,7 +1139,7 @@

Inherited by

- + type~rktmy7_class->type~rk_variable_step_class @@ -1154,7 +1154,7 @@

Inherited by

- + type~rktmy7s_class->type~rk_variable_step_class @@ -1169,7 +1169,7 @@

Inherited by

- + type~rktp64_class->type~rk_variable_step_class @@ -1184,7 +1184,7 @@

Inherited by

- + type~rktp75_class->type~rk_variable_step_class @@ -1199,7 +1199,7 @@

Inherited by

- + type~rktp86_class->type~rk_variable_step_class @@ -1214,7 +1214,7 @@

Inherited by

- + type~rkv65_class->type~rk_variable_step_class @@ -1229,7 +1229,7 @@

Inherited by

- + type~rkv76e_class->type~rk_variable_step_class @@ -1244,7 +1244,7 @@

Inherited by

- + type~rkv76r_class->type~rk_variable_step_class @@ -1259,7 +1259,7 @@

Inherited by

- + type~rkv78_class->type~rk_variable_step_class @@ -1274,7 +1274,7 @@

Inherited by

- + type~rkv87e_class->type~rk_variable_step_class @@ -1289,7 +1289,7 @@

Inherited by

- + type~rkv87r_class->type~rk_variable_step_class @@ -1304,7 +1304,7 @@

Inherited by

- + type~rkv89_class->type~rk_variable_step_class @@ -1319,7 +1319,7 @@

Inherited by

- + type~rkv98e_class->type~rk_variable_step_class @@ -1334,7 +1334,7 @@

Inherited by

- + type~rkv98r_class->type~rk_variable_step_class @@ -1349,7 +1349,7 @@

Inherited by

- + type~rkz10_class->type~rk_fixed_step_class @@ -1364,7 +1364,7 @@

Inherited by

- + type~rkbs32_class->type~rk_variable_step_fsal_class @@ -1379,7 +1379,7 @@

Inherited by

- + type~rkdp54_class->type~rk_variable_step_fsal_class @@ -1394,7 +1394,7 @@

Inherited by

- + type~rkpp54_class->type~rk_variable_step_fsal_class @@ -1409,7 +1409,7 @@

Inherited by

- + type~rkpp54b_class->type~rk_variable_step_fsal_class @@ -1424,7 +1424,7 @@

Inherited by

- + type~rks54_class->type~rk_variable_step_fsal_class @@ -1439,7 +1439,7 @@

Inherited by

- + type~rkt54_class->type~rk_variable_step_fsal_class @@ -1454,7 +1454,7 @@

Inherited by

- + type~rktf65_class->type~rk_variable_step_fsal_class @@ -1469,7 +1469,7 @@

Inherited by

- + type~rkv65e_class->type~rk_variable_step_fsal_class @@ -1484,7 +1484,7 @@

Inherited by

- + type~rkv65r_class->type~rk_variable_step_fsal_class diff --git a/type/rk_fixed_step_class.html b/type/rk_fixed_step_class.html index ba3af017..7ee07f41 100644 --- a/type/rk_fixed_step_class.html +++ b/type/rk_fixed_step_class.html @@ -320,7 +320,7 @@

Inherited by

- + type~euler_class->type~rk_fixed_step_class @@ -335,7 +335,7 @@

Inherited by

- + type~heun_class->type~rk_fixed_step_class @@ -350,7 +350,7 @@

Inherited by

- + type~midpoint_class->type~rk_fixed_step_class @@ -365,7 +365,7 @@

Inherited by

- + type~rk3_class->type~rk_fixed_step_class @@ -380,7 +380,7 @@

Inherited by

- + type~rk4_class->type~rk_fixed_step_class @@ -395,7 +395,7 @@

Inherited by

- + type~rk5_class->type~rk_fixed_step_class @@ -410,7 +410,7 @@

Inherited by

- + type~rk7_class->type~rk_fixed_step_class @@ -425,7 +425,7 @@

Inherited by

- + type~rk8_10_class->type~rk_fixed_step_class @@ -440,7 +440,7 @@

Inherited by

- + type~rk8_12_class->type~rk_fixed_step_class @@ -455,7 +455,7 @@

Inherited by

- + type~rkb6_class->type~rk_fixed_step_class @@ -470,7 +470,7 @@

Inherited by

- + type~rkc5_class->type~rk_fixed_step_class @@ -485,7 +485,7 @@

Inherited by

- + type~rkcv8_class->type~rk_fixed_step_class @@ -500,7 +500,7 @@

Inherited by

- + type~rkh10_class->type~rk_fixed_step_class @@ -515,7 +515,7 @@

Inherited by

- + type~rkl5_class->type~rk_fixed_step_class @@ -545,7 +545,7 @@

Inherited by

- + type~rklk5b_class->type~rk_fixed_step_class @@ -560,7 +560,7 @@

Inherited by

- + type~rkls44_class->type~rk_fixed_step_class @@ -575,7 +575,7 @@

Inherited by

- + type~rkls54_class->type~rk_fixed_step_class @@ -590,7 +590,7 @@

Inherited by

- + type~rko10_class->type~rk_fixed_step_class @@ -605,7 +605,7 @@

Inherited by

- + type~rkr4_class->type~rk_fixed_step_class @@ -620,7 +620,7 @@

Inherited by

- + type~rks4_class->type~rk_fixed_step_class @@ -635,7 +635,7 @@

Inherited by

- + type~rks5_class->type~rk_fixed_step_class @@ -650,7 +650,7 @@

Inherited by

- + type~rkssp22_class->type~rk_fixed_step_class @@ -665,7 +665,7 @@

Inherited by

- + type~rkssp33_class->type~rk_fixed_step_class @@ -680,7 +680,7 @@

Inherited by

- + type~rkssp53_class->type~rk_fixed_step_class @@ -695,7 +695,7 @@

Inherited by

- + type~rkssp54_class->type~rk_fixed_step_class @@ -710,7 +710,7 @@

Inherited by

- + type~rkz10_class->type~rk_fixed_step_class diff --git a/type/rk_variable_step_class.html b/type/rk_variable_step_class.html index 2573acf1..bdd16330 100644 --- a/type/rk_variable_step_class.html +++ b/type/rk_variable_step_class.html @@ -358,7 +358,7 @@

Inherited by

- + type~dverk65_class->type~rk_variable_step_class @@ -373,7 +373,7 @@

Inherited by

- + type~dverk78_class->type~rk_variable_step_class @@ -388,7 +388,7 @@

Inherited by

- + type~rk_variable_step_fsal_class->type~rk_variable_step_class @@ -403,7 +403,7 @@

Inherited by

- + type~rkb109_class->type~rk_variable_step_class @@ -418,7 +418,7 @@

Inherited by

- + type~rkbs54_class->type~rk_variable_step_class @@ -433,7 +433,7 @@

Inherited by

- + type~rkc108_class->type~rk_variable_step_class @@ -463,7 +463,7 @@

Inherited by

- + type~rkck54_class->type~rk_variable_step_class @@ -478,7 +478,7 @@

Inherited by

- + type~rkdp65_class->type~rk_variable_step_class @@ -493,7 +493,7 @@

Inherited by

- + type~rkdp85_class->type~rk_variable_step_class @@ -508,7 +508,7 @@

Inherited by

- + type~rkdp87_class->type~rk_variable_step_class @@ -523,7 +523,7 @@

Inherited by

- + type~rkev87_class->type~rk_variable_step_class @@ -538,7 +538,7 @@

Inherited by

- + type~rkf108_class->type~rk_variable_step_class @@ -553,7 +553,7 @@

Inherited by

- + type~rkf1210_class->type~rk_variable_step_class @@ -568,7 +568,7 @@

Inherited by

- + type~rkf1412_class->type~rk_variable_step_class @@ -583,7 +583,7 @@

Inherited by

- + type~rkf45_class->type~rk_variable_step_class @@ -598,7 +598,7 @@

Inherited by

- + type~rkf78_class->type~rk_variable_step_class @@ -613,7 +613,7 @@

Inherited by

- + type~rkf89_class->type~rk_variable_step_class @@ -628,7 +628,7 @@

Inherited by

- + type~rkk87_class->type~rk_variable_step_class @@ -643,7 +643,7 @@

Inherited by

- + type~rko129_class->type~rk_variable_step_class @@ -658,7 +658,7 @@

Inherited by

- + type~rks1110a_class->type~rk_variable_step_class @@ -673,7 +673,7 @@

Inherited by

- + type~rks98_class->type~rk_variable_step_class @@ -688,7 +688,7 @@

Inherited by

- + type~rkss54_class->type~rk_variable_step_class @@ -703,7 +703,7 @@

Inherited by

- + type~rkss76_class->type~rk_variable_step_class @@ -718,7 +718,7 @@

Inherited by

- + type~rkssp43_class->type~rk_variable_step_class @@ -733,7 +733,7 @@

Inherited by

- + type~rkt98a_class->type~rk_variable_step_class @@ -748,7 +748,7 @@

Inherited by

- + type~rktmy7_class->type~rk_variable_step_class @@ -763,7 +763,7 @@

Inherited by

- + type~rktmy7s_class->type~rk_variable_step_class @@ -778,7 +778,7 @@

Inherited by

- + type~rktp64_class->type~rk_variable_step_class @@ -793,7 +793,7 @@

Inherited by

- + type~rktp75_class->type~rk_variable_step_class @@ -808,7 +808,7 @@

Inherited by

- + type~rktp86_class->type~rk_variable_step_class @@ -823,7 +823,7 @@

Inherited by

- + type~rkv65_class->type~rk_variable_step_class @@ -838,7 +838,7 @@

Inherited by

- + type~rkv76e_class->type~rk_variable_step_class @@ -853,7 +853,7 @@

Inherited by

- + type~rkv76r_class->type~rk_variable_step_class @@ -868,7 +868,7 @@

Inherited by

- + type~rkv78_class->type~rk_variable_step_class @@ -883,7 +883,7 @@

Inherited by

- + type~rkv87e_class->type~rk_variable_step_class @@ -898,7 +898,7 @@

Inherited by

- + type~rkv87r_class->type~rk_variable_step_class @@ -913,7 +913,7 @@

Inherited by

- + type~rkv89_class->type~rk_variable_step_class @@ -928,7 +928,7 @@

Inherited by

- + type~rkv98e_class->type~rk_variable_step_class @@ -943,7 +943,7 @@

Inherited by

- + type~rkv98r_class->type~rk_variable_step_class @@ -958,7 +958,7 @@

Inherited by

- + type~rkbs32_class->type~rk_variable_step_fsal_class @@ -973,7 +973,7 @@

Inherited by

- + type~rkdp54_class->type~rk_variable_step_fsal_class @@ -988,7 +988,7 @@

Inherited by

- + type~rkpp54_class->type~rk_variable_step_fsal_class @@ -1003,7 +1003,7 @@

Inherited by

- + type~rkpp54b_class->type~rk_variable_step_fsal_class @@ -1018,7 +1018,7 @@

Inherited by

- + type~rks54_class->type~rk_variable_step_fsal_class @@ -1033,7 +1033,7 @@

Inherited by

- + type~rkt54_class->type~rk_variable_step_fsal_class @@ -1048,7 +1048,7 @@

Inherited by

- + type~rktf65_class->type~rk_variable_step_fsal_class @@ -1063,7 +1063,7 @@

Inherited by

- + type~rkv65e_class->type~rk_variable_step_fsal_class @@ -1078,7 +1078,7 @@

Inherited by

- + type~rkv65r_class->type~rk_variable_step_fsal_class diff --git a/type/rk_variable_step_fsal_class.html b/type/rk_variable_step_fsal_class.html index 77df96ce..783552a0 100644 --- a/type/rk_variable_step_fsal_class.html +++ b/type/rk_variable_step_fsal_class.html @@ -376,7 +376,7 @@

Inherited by

- + type~rkbs32_class->type~rk_variable_step_fsal_class @@ -391,7 +391,7 @@

Inherited by

- + type~rkdp54_class->type~rk_variable_step_fsal_class @@ -406,7 +406,7 @@

Inherited by

- + type~rkpp54_class->type~rk_variable_step_fsal_class @@ -421,7 +421,7 @@

Inherited by

- + type~rkpp54b_class->type~rk_variable_step_fsal_class @@ -436,7 +436,7 @@

Inherited by

- + type~rks54_class->type~rk_variable_step_fsal_class @@ -451,7 +451,7 @@

Inherited by

- + type~rkt54_class->type~rk_variable_step_fsal_class @@ -466,7 +466,7 @@

Inherited by

- + type~rktf65_class->type~rk_variable_step_fsal_class @@ -481,7 +481,7 @@

Inherited by

- + type~rkv65e_class->type~rk_variable_step_fsal_class @@ -496,7 +496,7 @@

Inherited by

- + type~rkv65r_class->type~rk_variable_step_fsal_class diff --git a/type/stepsize_class.html b/type/stepsize_class.html index a4232dc7..aa066dc8 100644 --- a/type/stepsize_class.html +++ b/type/stepsize_class.html @@ -251,7 +251,7 @@

Inherited by

- + type~dverk65_class->type~rk_variable_step_class @@ -265,7 +265,7 @@

Inherited by

- + type~dverk78_class->type~rk_variable_step_class @@ -279,7 +279,7 @@

Inherited by

- + type~rk_variable_step_fsal_class->type~rk_variable_step_class @@ -293,7 +293,7 @@

Inherited by

- + type~rkb109_class->type~rk_variable_step_class @@ -307,7 +307,7 @@

Inherited by

- + type~rkbs54_class->type~rk_variable_step_class @@ -321,7 +321,7 @@

Inherited by

- + type~rkc108_class->type~rk_variable_step_class @@ -349,7 +349,7 @@

Inherited by

- + type~rkck54_class->type~rk_variable_step_class @@ -363,7 +363,7 @@

Inherited by

- + type~rkdp65_class->type~rk_variable_step_class @@ -377,7 +377,7 @@

Inherited by

- + type~rkdp85_class->type~rk_variable_step_class @@ -391,7 +391,7 @@

Inherited by

- + type~rkdp87_class->type~rk_variable_step_class @@ -405,7 +405,7 @@

Inherited by

- + type~rkev87_class->type~rk_variable_step_class @@ -419,7 +419,7 @@

Inherited by

- + type~rkf108_class->type~rk_variable_step_class @@ -433,7 +433,7 @@

Inherited by

- + type~rkf1210_class->type~rk_variable_step_class @@ -447,7 +447,7 @@

Inherited by

- + type~rkf1412_class->type~rk_variable_step_class @@ -461,7 +461,7 @@

Inherited by

- + type~rkf45_class->type~rk_variable_step_class @@ -475,7 +475,7 @@

Inherited by

- + type~rkf78_class->type~rk_variable_step_class @@ -489,7 +489,7 @@

Inherited by

- + type~rkf89_class->type~rk_variable_step_class @@ -503,7 +503,7 @@

Inherited by

- + type~rkk87_class->type~rk_variable_step_class @@ -517,7 +517,7 @@

Inherited by

- + type~rko129_class->type~rk_variable_step_class @@ -531,7 +531,7 @@

Inherited by

- + type~rks1110a_class->type~rk_variable_step_class @@ -545,7 +545,7 @@

Inherited by

- + type~rks98_class->type~rk_variable_step_class @@ -559,7 +559,7 @@

Inherited by

- + type~rkss54_class->type~rk_variable_step_class @@ -573,7 +573,7 @@

Inherited by

- + type~rkss76_class->type~rk_variable_step_class @@ -587,7 +587,7 @@

Inherited by

- + type~rkssp43_class->type~rk_variable_step_class @@ -601,7 +601,7 @@

Inherited by

- + type~rkt98a_class->type~rk_variable_step_class @@ -615,7 +615,7 @@

Inherited by

- + type~rktmy7_class->type~rk_variable_step_class @@ -629,7 +629,7 @@

Inherited by

- + type~rktmy7s_class->type~rk_variable_step_class @@ -643,7 +643,7 @@

Inherited by

- + type~rktp64_class->type~rk_variable_step_class @@ -657,7 +657,7 @@

Inherited by

- + type~rktp75_class->type~rk_variable_step_class @@ -671,7 +671,7 @@

Inherited by

- + type~rktp86_class->type~rk_variable_step_class @@ -685,7 +685,7 @@

Inherited by

- + type~rkv65_class->type~rk_variable_step_class @@ -699,7 +699,7 @@

Inherited by

- + type~rkv76e_class->type~rk_variable_step_class @@ -713,7 +713,7 @@

Inherited by

- + type~rkv76r_class->type~rk_variable_step_class @@ -727,7 +727,7 @@

Inherited by

- + type~rkv78_class->type~rk_variable_step_class @@ -741,7 +741,7 @@

Inherited by

- + type~rkv87e_class->type~rk_variable_step_class @@ -755,7 +755,7 @@

Inherited by

- + type~rkv87r_class->type~rk_variable_step_class @@ -769,7 +769,7 @@

Inherited by

- + type~rkv89_class->type~rk_variable_step_class @@ -783,7 +783,7 @@

Inherited by

- + type~rkv98e_class->type~rk_variable_step_class @@ -797,7 +797,7 @@

Inherited by

- + type~rkv98r_class->type~rk_variable_step_class @@ -813,7 +813,7 @@

Inherited by

- + type~rkbs32_class->type~rk_variable_step_fsal_class @@ -827,7 +827,7 @@

Inherited by

- + type~rkdp54_class->type~rk_variable_step_fsal_class @@ -841,7 +841,7 @@

Inherited by

- + type~rkpp54_class->type~rk_variable_step_fsal_class @@ -855,7 +855,7 @@

Inherited by

- + type~rkpp54b_class->type~rk_variable_step_fsal_class @@ -869,7 +869,7 @@

Inherited by

- + type~rks54_class->type~rk_variable_step_fsal_class @@ -883,7 +883,7 @@

Inherited by

- + type~rkt54_class->type~rk_variable_step_fsal_class @@ -897,7 +897,7 @@

Inherited by

- + type~rktf65_class->type~rk_variable_step_fsal_class @@ -911,7 +911,7 @@

Inherited by

- + type~rkv65e_class->type~rk_variable_step_fsal_class @@ -925,7 +925,7 @@

Inherited by

- + type~rkv65r_class->type~rk_variable_step_fsal_class