Choral
Functions/Subroutines | Variables
ode_nl_ms_mod Module Reference

MULTISTEP SOLVERS FOR NON LINEAR ODEs More...

Functions/Subroutines

logical function, public check_ode_method_nl_ms (method)
 is 'method' a multi-step non-linear ODE solver ? More...
 
subroutine, public memsize_ode_nl_ms (n_Y, n_FY, method)
 required sizes to allocate memory More...
 
subroutine, public set_solver_ode_nl_ms (slv, method)
 set the resolution solver More...
 
subroutine, public create_ode_nl_ms_sol (sol, pb, method)
 create memory for the ode_solution structure 'sol' More...
 
subroutine, public solve_ode_nl_ms (sol, pb, t0, T, dt, method, out, check_overflow)
 solve with constant time-step More...
 
elemental subroutine phi_1 (z)
 phi_1 = ( exp(z) - 1 ) / z More...
 
elemental subroutine phi_2 (z)
 phi_2 = (exp(z) - z - 1._RP)/z^2 More...
 
elemental subroutine phi_3 (z)
 phi_3(z) = (exp(z) - z^2/2 - z - 1)/z^3 More...
 
elemental subroutine phi_4 (z)
 phi_4(z) = (exp(z) - z^3/6 - z^2/2 - z - 1)/z^4 More...
 
subroutine nl_ms_fbe (sol, dt, N, P)
 Lines 1 ..P = combined FORWARD/BacWard Euler Lines P+1..N = FORWARD Euler. More...
 
subroutine nl_ms_erk1 (sol, dt, N, P)
 Lines 1 ..P = Rush-Larsen 1 Lines P+1..N = Forward Euler. More...
 
subroutine nl_ms_rl2 (sol, dt, N, P)
 Lines 1 ..P = Rush-Larsen 2 Lines P+1..N = AB2. More...
 
subroutine nl_ms_rl3 (sol, dt, N, P)
 Lines 1 ..P = Rush-Larsen 3 Lines P+1..N = AB3. More...
 
subroutine nl_ms_rl4 (sol, dt, N, P)
 Lines 1 ..P = Rush-Larsen 4 Lines P+1..N = AB4. More...
 
subroutine nl_ms_bdfsbdf2 (sol, dt, N, P)
 Lines 1 ..P = combined BDF2/SBDF2 Lines P+1..N = SBDF2. More...
 
subroutine nl_ms_bdfsbdf3 (sol, dt, N, P)
 Lines 1 ..P = combined BDF3/SBDF3 Lines P+1..N = SBDF3. More...
 
subroutine nl_ms_bdfsbdf4 (sol, dt, N, P)
 Lines 1 ..P = combined BDF4/SBDF4 Lines P+1..N = SBDF4. More...
 
subroutine nl_ms_bdfsbdf5 (sol, dt, N, P)
 Lines 1 ..P = combined BDF5/SBDF5 Lines P+1..N = SBDF5. More...
 
subroutine nl_ms_cnab2 (sol, dt, N, P)
 Lines 1 ..P = combined CN/AB2 Lines P+1..N = AB2. More...
 
subroutine nl_ms_mcnab2 (sol, dt, N, P)
 Lines 1 ..P = combined Modified-CN/AB2 Lines P+1..N = AB2. More...
 
subroutine nl_ms_eab2 (sol, dt, N, P)
 Lines 1 ..P = Exponential AB2 Lines P+1..N = AB2. More...
 
subroutine nl_ms_eab3 (sol, dt, N, P)
 Lines 1 ..P = Exponential AB3 Lines P+1..N = AB3. More...
 
subroutine nl_ms_eab4 (sol, dt, N, P)
 Lines 1 ..P = Exponential AB4 Lines P+1..N = AB4. More...
 

Variables

real(rp), parameter c1_3 = 1._RP / 3._RP
 
real(rp), parameter c2_3 = 2._RP / 3._RP
 
real(rp), parameter c4_3 = 4._RP / 3._RP
 
real(rp), parameter c1_6 = 1._RP / 6._RP
 
real(rp), parameter c11_6 = 11._RP / 6._RP
 
real(rp), parameter c2_11 = 2._RP / 11._RP
 
real(rp), parameter c6_11 = 6._RP / 11._RP
 
real(rp), parameter c9_11 = 9._RP / 11._RP
 
real(rp), parameter c18_11 = 18._RP / 11._RP
 
real(rp), parameter c5_12 = 5._RP / 12._RP
 
real(rp), parameter c16_12 = 16._RP / 12._RP
 
real(rp), parameter c23_12 = 23._RP / 12._RP
 
real(rp), parameter c9_16 = 9._RP / 16._RP
 
real(rp), parameter c1_24 = 1._RP / 24._RP
 
real(rp), parameter c9_24 = 9._RP / 24._RP
 
real(rp), parameter c37_24 = 37._RP / 24._RP
 
real(rp), parameter c55_24 = 55._RP / 24._RP
 
real(rp), parameter c59_24 = 59._RP / 24._RP
 
real(rp), parameter c3_25 = 3._RP / 25._RP
 
real(rp), parameter c12_25 = 12._RP / 25._RP
 
real(rp), parameter c16_25 = 16._RP / 25._RP
 
real(rp), parameter c36_25 = 36._RP / 25._RP
 
real(rp), parameter c48_25 = 48._RP / 25._RP
 
real(rp), parameter c72_25 = 72._RP / 25._RP
 
real(rp), parameter c12_137 = 12._RP / 137._RP
 
real(rp), parameter c60_137 = 60._RP / 137._RP
 
real(rp), parameter c75_137 = 75._RP / 137._RP
 
real(rp), parameter c200_137 = 200._RP / 137._RP
 
real(rp), parameter c300_137 = 300._RP / 137._RP
 
real(rp), parameter c600_137 = 600._RP / 137._RP
 

Detailed Description

MULTISTEP SOLVERS FOR NON LINEAR ODEs

Multistep solvers for ODE_PB_NL, see ode_problem_mod detailed description.

Author
Charles Pierre

Function/Subroutine Documentation

◆ check_ode_method_nl_ms()

logical function, public ode_nl_ms_mod::check_ode_method_nl_ms ( integer, intent(in)  method)

is 'method' a multi-step non-linear ODE solver ?

Definition at line 73 of file ode_NL_ms_mod.f90.

◆ create_ode_nl_ms_sol()

subroutine, public ode_nl_ms_mod::create_ode_nl_ms_sol ( type(ode_solution), intent(inout)  sol,
type(ode_problem), intent(in)  pb,
integer, intent(in)  method 
)

create memory for the ode_solution structure 'sol'

Definition at line 188 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ memsize_ode_nl_ms()

subroutine, public ode_nl_ms_mod::memsize_ode_nl_ms ( integer, intent(out)  n_Y,
integer, intent(out)  n_FY,
integer, intent(in)  method 
)

required sizes to allocate memory

returns iY, iFY, iAYaux depending on the method

  • n_Y = required size for Y
  • n_FY = required size for AY, BY

Definition at line 98 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_bdfsbdf2()

subroutine ode_nl_ms_mod::nl_ms_bdfsbdf2 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined BDF2/SBDF2 Lines P+1..N = SBDF2.

Definition at line 658 of file ode_NL_ms_mod.f90.

◆ nl_ms_bdfsbdf3()

subroutine ode_nl_ms_mod::nl_ms_bdfsbdf3 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined BDF3/SBDF3 Lines P+1..N = SBDF3.

Definition at line 710 of file ode_NL_ms_mod.f90.

◆ nl_ms_bdfsbdf4()

subroutine ode_nl_ms_mod::nl_ms_bdfsbdf4 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined BDF4/SBDF4 Lines P+1..N = SBDF4.

Definition at line 768 of file ode_NL_ms_mod.f90.

◆ nl_ms_bdfsbdf5()

subroutine ode_nl_ms_mod::nl_ms_bdfsbdf5 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined BDF5/SBDF5 Lines P+1..N = SBDF5.

Definition at line 834 of file ode_NL_ms_mod.f90.

◆ nl_ms_cnab2()

subroutine ode_nl_ms_mod::nl_ms_cnab2 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined CN/AB2 Lines P+1..N = AB2.

Definition at line 908 of file ode_NL_ms_mod.f90.

◆ nl_ms_eab2()

subroutine ode_nl_ms_mod::nl_ms_eab2 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Exponential AB2 Lines P+1..N = AB2.

Definition at line 1017 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_eab3()

subroutine ode_nl_ms_mod::nl_ms_eab3 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Exponential AB3 Lines P+1..N = AB3.

g_1 = b_{n-1} + (a_{n-1} - an) y_{n-1} g_2 = b_{n-2} + (a_{n-2} - an) y_{n-2}

gamma_2 = (3/2) bn - 2 g_1 + (1/2) g_2 gamma_3 = bn - 2 g_1 + g_2

w1 = a_n*y_n + b_n w2 = gamma_2 + an h w1 w3 = gamma_3 + an h w2

y_{n+1} = y_n + h [ w_1 + w2/2 + phi_3(a_n h) w3 ]

Definition at line 1093 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_eab4()

subroutine ode_nl_ms_mod::nl_ms_eab4 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Exponential AB4 Lines P+1..N = AB4.

g_1 = b_{n-1} + (a_{n-1} - an) y_{n-1} g_2 = b_{n-2} + (a_{n-2} - an) y_{n-2} g_3 = b_{n-3} + (a_{n-3} - an) y_{n-3}

gamma_2 = (11/6) bn - 3 g_1 + (3/2) g_2 - (1/3) g_3 gamma_3 = 2 bn - 5 g_1 + 4 g_2 - g_3 gamma_4 = 9 bn - 3 g_1 + 3 g_2 - g_3

w1 = a_n*y_n + b_n w2 = gamma_2 + an h w1 w3 = gamma_3 + an h w2

y_{n+1} = y_n + h [ w_1 + w2/2 + phi_3(a_n h) w3 ]

Definition at line 1191 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_erk1()

subroutine ode_nl_ms_mod::nl_ms_erk1 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Rush-Larsen 1 Lines P+1..N = Forward Euler.

Definition at line 431 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_fbe()

subroutine ode_nl_ms_mod::nl_ms_fbe ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined FORWARD/BacWard Euler Lines P+1..N = FORWARD Euler.

Definition at line 398 of file ode_NL_ms_mod.f90.

◆ nl_ms_mcnab2()

subroutine ode_nl_ms_mod::nl_ms_mcnab2 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = combined Modified-CN/AB2 Lines P+1..N = AB2.

Definition at line 960 of file ode_NL_ms_mod.f90.

◆ nl_ms_rl2()

subroutine ode_nl_ms_mod::nl_ms_rl2 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Rush-Larsen 2 Lines P+1..N = AB2.

Definition at line 480 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_rl3()

subroutine ode_nl_ms_mod::nl_ms_rl3 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Rush-Larsen 3 Lines P+1..N = AB3.

Definition at line 530 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ nl_ms_rl4()

subroutine ode_nl_ms_mod::nl_ms_rl4 ( type(ode_solution), intent(inout)  sol,
real(rp), intent(in)  dt,
integer, intent(in)  N,
integer, intent(in)  P 
)
private

Lines 1 ..P = Rush-Larsen 4 Lines P+1..N = AB4.

Definition at line 590 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ phi_1()

elemental subroutine ode_nl_ms_mod::phi_1 ( real(rp), intent(inout)  z)
private

phi_1 = ( exp(z) - 1 ) / z

Definition at line 322 of file ode_NL_ms_mod.f90.

◆ phi_2()

elemental subroutine ode_nl_ms_mod::phi_2 ( real(rp), intent(inout)  z)
private

phi_2 = (exp(z) - z - 1._RP)/z^2

Definition at line 336 of file ode_NL_ms_mod.f90.

◆ phi_3()

elemental subroutine ode_nl_ms_mod::phi_3 ( real(rp), intent(inout)  z)
private

phi_3(z) = (exp(z) - z^2/2 - z - 1)/z^3

Definition at line 356 of file ode_NL_ms_mod.f90.

◆ phi_4()

elemental subroutine ode_nl_ms_mod::phi_4 ( real(rp), intent(inout)  z)
private

phi_4(z) = (exp(z) - z^3/6 - z^2/2 - z - 1)/z^4

Definition at line 376 of file ode_NL_ms_mod.f90.

◆ set_solver_ode_nl_ms()

subroutine, public ode_nl_ms_mod::set_solver_ode_nl_ms ( procedure(ode_nl_ms_solver), pointer  slv,
integer, intent(in)  method 
)

set the resolution solver

Definition at line 145 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

◆ solve_ode_nl_ms()

subroutine, public ode_nl_ms_mod::solve_ode_nl_ms ( type(ode_solution), intent(inout)  sol,
type(ode_problem), intent(in)  pb,
real(rp), intent(in)  t0,
real(rp), intent(in)  T,
real(rp), intent(in)  dt,
integer, intent(in)  method,
procedure(ode_output_proc out,
logical, intent(in)  check_overflow 
)

solve with constant time-step

Definition at line 210 of file ode_NL_ms_mod.f90.

Here is the call graph for this function:

Variable Documentation

◆ c11_6

real(rp), parameter ode_nl_ms_mod::c11_6 = 11._RP / 6._RP
private

Definition at line 36 of file ode_NL_ms_mod.f90.

◆ c12_137

real(rp), parameter ode_nl_ms_mod::c12_137 = 12._RP / 137._RP
private

Definition at line 62 of file ode_NL_ms_mod.f90.

◆ c12_25

real(rp), parameter ode_nl_ms_mod::c12_25 = 12._RP / 25._RP
private

Definition at line 56 of file ode_NL_ms_mod.f90.

◆ c16_12

real(rp), parameter ode_nl_ms_mod::c16_12 = 16._RP / 12._RP
private

Definition at line 44 of file ode_NL_ms_mod.f90.

◆ c16_25

real(rp), parameter ode_nl_ms_mod::c16_25 = 16._RP / 25._RP
private

Definition at line 57 of file ode_NL_ms_mod.f90.

◆ c18_11

real(rp), parameter ode_nl_ms_mod::c18_11 = 18._RP / 11._RP
private

Definition at line 41 of file ode_NL_ms_mod.f90.

◆ c1_24

real(rp), parameter ode_nl_ms_mod::c1_24 = 1._RP / 24._RP
private

Definition at line 49 of file ode_NL_ms_mod.f90.

◆ c1_3

real(rp), parameter ode_nl_ms_mod::c1_3 = 1._RP / 3._RP
private

Definition at line 31 of file ode_NL_ms_mod.f90.

◆ c1_6

real(rp), parameter ode_nl_ms_mod::c1_6 = 1._RP / 6._RP
private

Definition at line 35 of file ode_NL_ms_mod.f90.

◆ c200_137

real(rp), parameter ode_nl_ms_mod::c200_137 = 200._RP / 137._RP
private

Definition at line 65 of file ode_NL_ms_mod.f90.

◆ c23_12

real(rp), parameter ode_nl_ms_mod::c23_12 = 23._RP / 12._RP
private

Definition at line 45 of file ode_NL_ms_mod.f90.

◆ c2_11

real(rp), parameter ode_nl_ms_mod::c2_11 = 2._RP / 11._RP
private

Definition at line 38 of file ode_NL_ms_mod.f90.

◆ c2_3

real(rp), parameter ode_nl_ms_mod::c2_3 = 2._RP / 3._RP
private

Definition at line 32 of file ode_NL_ms_mod.f90.

◆ c300_137

real(rp), parameter ode_nl_ms_mod::c300_137 = 300._RP / 137._RP
private

Definition at line 66 of file ode_NL_ms_mod.f90.

◆ c36_25

real(rp), parameter ode_nl_ms_mod::c36_25 = 36._RP / 25._RP
private

Definition at line 58 of file ode_NL_ms_mod.f90.

◆ c37_24

real(rp), parameter ode_nl_ms_mod::c37_24 = 37._RP / 24._RP
private

Definition at line 51 of file ode_NL_ms_mod.f90.

◆ c3_25

real(rp), parameter ode_nl_ms_mod::c3_25 = 3._RP / 25._RP
private

Definition at line 55 of file ode_NL_ms_mod.f90.

◆ c48_25

real(rp), parameter ode_nl_ms_mod::c48_25 = 48._RP / 25._RP
private

Definition at line 59 of file ode_NL_ms_mod.f90.

◆ c4_3

real(rp), parameter ode_nl_ms_mod::c4_3 = 4._RP / 3._RP
private

Definition at line 33 of file ode_NL_ms_mod.f90.

◆ c55_24

real(rp), parameter ode_nl_ms_mod::c55_24 = 55._RP / 24._RP
private

Definition at line 52 of file ode_NL_ms_mod.f90.

◆ c59_24

real(rp), parameter ode_nl_ms_mod::c59_24 = 59._RP / 24._RP
private

Definition at line 53 of file ode_NL_ms_mod.f90.

◆ c5_12

real(rp), parameter ode_nl_ms_mod::c5_12 = 5._RP / 12._RP
private

Definition at line 43 of file ode_NL_ms_mod.f90.

◆ c600_137

real(rp), parameter ode_nl_ms_mod::c600_137 = 600._RP / 137._RP
private

Definition at line 67 of file ode_NL_ms_mod.f90.

◆ c60_137

real(rp), parameter ode_nl_ms_mod::c60_137 = 60._RP / 137._RP
private

Definition at line 63 of file ode_NL_ms_mod.f90.

◆ c6_11

real(rp), parameter ode_nl_ms_mod::c6_11 = 6._RP / 11._RP
private

Definition at line 39 of file ode_NL_ms_mod.f90.

◆ c72_25

real(rp), parameter ode_nl_ms_mod::c72_25 = 72._RP / 25._RP
private

Definition at line 60 of file ode_NL_ms_mod.f90.

◆ c75_137

real(rp), parameter ode_nl_ms_mod::c75_137 = 75._RP / 137._RP
private

Definition at line 64 of file ode_NL_ms_mod.f90.

◆ c9_11

real(rp), parameter ode_nl_ms_mod::c9_11 = 9._RP / 11._RP
private

Definition at line 40 of file ode_NL_ms_mod.f90.

◆ c9_16

real(rp), parameter ode_nl_ms_mod::c9_16 = 9._RP / 16._RP
private

Definition at line 47 of file ode_NL_ms_mod.f90.

◆ c9_24

real(rp), parameter ode_nl_ms_mod::c9_24 = 9._RP / 24._RP
private

Definition at line 50 of file ode_NL_ms_mod.f90.