This module contains two total variation diminishing (TVD) high-order schemes for solving initial value problems. It is very important to use TVD schemes for time integration. Even with a TVD spacial discretization, if the time discretization is done by a non-TVD method, the result may be oscillatory. Source: ICASE 97-65 by Shu, 1997.
Initialize rktvd object.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| procedure(integrand) | :: | fu |
subroutine with the derivative |
|||
| integer, | intent(in) | :: | neq |
number of equations |
||
| integer, | intent(in) | :: | order |
order of the method (1, 2 or 3) |
Runge-Kutta TVD ODE solver class.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | neq |
number of equations |
|||
| integer, | public | :: | order |
order of the method |
|||
| integer, | public | :: | fevals | = | 0 |
number of function evaluations |
|
| integer, | public | :: | istate | = | 0 |
flag indicating the state of the integration: 1 first call for a problem, 2 subsequent call for a problem. |
|
| character(len=:), | public, | allocatable | :: | msg |
error message |
| private function rktvd_init (fu, neq, order) | Initialize |
| procedure, public, pass(self) :: error_msg | |
| procedure, public, pass(self) :: integrate => rktvd_integrate |
Multi-step TVD ODE solver class.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | neq |
number of equations |
|||
| integer, | public | :: | order |
order of the method |
|||
| integer, | public | :: | fevals | = | 0 |
number of function evaluations |
|
| integer, | public | :: | istate | = | 0 |
flag indicating the state of the integration: 1 first call for a problem, 2 subsequent call for a problem. |
|
| character(len=:), | public, | allocatable | :: | msg |
error message |
| private function mstvd_init (fu, neq) | Initialize |
| procedure, public, pass(self) :: error_msg | |
| procedure, public, pass(self) :: integrate => mstvd_integrate |