foodie Module

module~~foodie~~UsesGraph module~foodie foodie module~foodie_integrator_adams_bashforth foodie_integrator_adams_bashforth module~foodie_integrator_adams_bashforth->module~foodie module~foodie_integrator_adams_bashforth_moulton foodie_integrator_adams_bashforth_moulton module~foodie_integrator_adams_bashforth->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_ms_runge_kutta_ssp foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_ms_runge_kutta_ssp->module~foodie module~foodie_error_codes foodie_error_codes module~foodie_error_codes->module~foodie module~foodie_error_codes->module~foodie_integrator_adams_bashforth module~foodie_error_codes->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_lmm_ssp foodie_integrator_lmm_ssp module~foodie_error_codes->module~foodie_integrator_lmm_ssp module~foodie_integrator_euler_explicit foodie_integrator_euler_explicit module~foodie_error_codes->module~foodie_integrator_euler_explicit module~foodie_integrator_runge_kutta_emd foodie_integrator_runge_kutta_emd module~foodie_error_codes->module~foodie_integrator_runge_kutta_emd module~foodie_error_codes->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_adams_moulton foodie_integrator_adams_moulton module~foodie_error_codes->module~foodie_integrator_adams_moulton module~foodie_integrator_runge_kutta_lssp foodie_integrator_runge_kutta_lssp module~foodie_error_codes->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_lmm_ssp_vss foodie_integrator_lmm_ssp_vss module~foodie_error_codes->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_runge_kutta_ssp foodie_integrator_runge_kutta_ssp module~foodie_error_codes->module~foodie_integrator_runge_kutta_ssp module~foodie_integrator_runge_kutta_low_storage foodie_integrator_runge_kutta_low_storage module~foodie_error_codes->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrator_leapfrog foodie_integrator_leapfrog module~foodie_error_codes->module~foodie_integrator_leapfrog module~foodie_integrator_backward_differentiation_formula foodie_integrator_backward_differentiation_formula module~foodie_error_codes->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_lmm_ssp->module~foodie module~foodie_integrator_euler_explicit->module~foodie module~foodie_integrator_multistep_object foodie_integrator_multistep_object module~foodie_integrator_multistep_object->module~foodie module~foodie_integrator_multistep_object->module~foodie_integrator_adams_bashforth module~foodie_integrator_multistep_object->module~foodie_integrator_lmm_ssp module~foodie_integrator_multistep_object->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_multistep_object->module~foodie_integrator_adams_moulton module~foodie_integrator_multistep_object->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_multistep_object->module~foodie_integrator_leapfrog module~foodie_integrator_multistep_object->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_runge_kutta_emd->module~foodie module~foodie_integrator_adams_bashforth_moulton->module~foodie iso_fortran_env iso_fortran_env iso_fortran_env->module~foodie iso_fortran_env->module~foodie_integrator_multistep_object module~foodie_integrator_multistage_object foodie_integrator_multistage_object iso_fortran_env->module~foodie_integrator_multistage_object module~foodie_integrator_multistage_multistep_object foodie_integrator_multistage_multistep_object iso_fortran_env->module~foodie_integrator_multistage_multistep_object module~foodie_integrator_object foodie_integrator_object iso_fortran_env->module~foodie_integrator_object penf penf penf->module~foodie penf->module~foodie_integrator_adams_bashforth penf->module~foodie_integrator_ms_runge_kutta_ssp penf->module~foodie_error_codes penf->module~foodie_integrator_lmm_ssp penf->module~foodie_integrator_euler_explicit penf->module~foodie_integrator_multistep_object penf->module~foodie_integrator_runge_kutta_emd penf->module~foodie_integrator_adams_bashforth_moulton penf->module~foodie_integrator_adams_moulton penf->module~foodie_integrator_runge_kutta_lssp penf->module~foodie_integrator_lmm_ssp_vss penf->module~foodie_integrator_runge_kutta_ssp module~foodie_integrand_object foodie_integrand_object penf->module~foodie_integrand_object penf->module~foodie_integrator_runge_kutta_low_storage penf->module~foodie_integrator_multistage_object penf->module~foodie_integrator_leapfrog penf->module~foodie_integrator_multistage_multistep_object penf->module~foodie_integrator_object penf->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_adams_moulton->module~foodie module~foodie_integrator_adams_moulton->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_runge_kutta_lssp->module~foodie module~foodie_integrator_lmm_ssp_vss->module~foodie module~foodie_integrator_runge_kutta_ssp->module~foodie module~foodie_integrand_object->module~foodie module~foodie_integrand_object->module~foodie_integrator_adams_bashforth module~foodie_integrand_object->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrand_object->module~foodie_integrator_lmm_ssp module~foodie_integrand_object->module~foodie_integrator_euler_explicit module~foodie_integrand_object->module~foodie_integrator_multistep_object module~foodie_integrand_object->module~foodie_integrator_runge_kutta_emd module~foodie_integrand_object->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrand_object->module~foodie_integrator_adams_moulton module~foodie_integrand_object->module~foodie_integrator_runge_kutta_lssp module~foodie_integrand_object->module~foodie_integrator_lmm_ssp_vss module~foodie_integrand_object->module~foodie_integrator_runge_kutta_ssp module~foodie_integrand_object->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrand_object->module~foodie_integrator_multistage_object module~foodie_integrand_object->module~foodie_integrator_leapfrog module~foodie_integrand_object->module~foodie_integrator_multistage_multistep_object module~foodie_integrand_object->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_runge_kutta_low_storage->module~foodie module~foodie_integrator_multistage_object->module~foodie module~foodie_integrator_multistage_object->module~foodie_integrator_euler_explicit module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_emd module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_ssp module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrator_leapfrog->module~foodie module~foodie_integrator_multistage_multistep_object->module~foodie module~foodie_integrator_multistage_multistep_object->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_object->module~foodie module~foodie_integrator_object->module~foodie_integrator_adams_bashforth module~foodie_integrator_object->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_object->module~foodie_integrator_lmm_ssp module~foodie_integrator_object->module~foodie_integrator_euler_explicit module~foodie_integrator_object->module~foodie_integrator_multistep_object module~foodie_integrator_object->module~foodie_integrator_runge_kutta_emd module~foodie_integrator_object->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_object->module~foodie_integrator_adams_moulton module~foodie_integrator_object->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_object->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_object->module~foodie_integrator_runge_kutta_ssp module~foodie_integrator_object->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrator_object->module~foodie_integrator_multistage_object module~foodie_integrator_object->module~foodie_integrator_leapfrog module~foodie_integrator_object->module~foodie_integrator_multistage_multistep_object module~foodie_integrator_object->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_backward_differentiation_formula->module~foodie
Help

FOODIE, Fortran Object oriented Ordinary Differential Equations integration library.

FOODIE is a KISS library for solving systems of Ordinary Differential Equation (ODE) into the Initial Values Problems (IVP) contest. The mathematical formulation of the problem is:

$$U_t = R(t,U)$$ $$U_0 = F(0)$$

where \(U_t = \frac{dU}{dt}\), U is the vector of state variables being a function of the time-like independent variable t, R is the (vectorial) residual function and F is the (vectorial) initial conditions function.

FOODIE is aimed to the time-like integration of the above system of ODE. To this aim, different numerical schemes are provided: see FOODIE home page for more details about available integrators.

Usage

FOODIE schemes must be applied to only subclass extensions of the abstract class integrand.

To use FOODIE you must:

extend integrand abstract class provided by FOODIE implementing your concrete integrand field

For example for the Lorenz' ODE system

 type, extends(integrand_object) :: lorenz
   !< Lorenz equations field.
   !<
   !< It is a FOODIE integrand class.
   private
   real(R_P), dimension(:), allocatable :: state        !< Solution vector.
   real(R_P)                            :: sigma=0._R_P !< Lorenz \(\sigma\).
   real(R_P)                            :: rho=0._R_P   !< Lorenz \(\rho\).
   real(R_P)                            :: beta=0._R_P  !< Lorenz \(\beta\).
   contains
     procedure, pass(self), public :: t => dLorenz_dt                                 !< Time derivate, resiuduals function.
     procedure, pass(lhs),  public :: integrand_multiply_real => lorenz_multiply_real !< lorenz * real operator.
     procedure, pass(rhs),  public :: real_multiply_integrand => real_multiply_lorenz !< Real * Lorenz operator.
     procedure, pass(lhs),  public :: add => add_lorenz                               !< Lorenz + Lorenz oprator.
     procedure, pass(lhs),  public :: assign_integrand => lorenz_assign_lorenz        !< Lorenz = Lorenz.
     procedure, pass(lhs),  public :: assign_real => lorenz_assign_real               !< Lorenz = real.
     ...
 endtype lorenz

use one of the provided FOODIE integrator

For example using the forward explicit Euler scheme to the above Lorenz' ODE system

 use foodie, only : integrator_euler_explicit
 use type_lorenz, only : lorenz
 type(integrator_euler_explicit) :: euler_integrator
 type(lorenz)                    :: attractor
 real                            :: dt=0.01
 do step = 1, num_steps
   call euler_integrator%integrate(field=attractor, dt=dt)
 enddo

Used By

module~~foodie~~UsedByGraph module~foodie foodie program~integrate_burgers integrate_burgers module~foodie->program~integrate_burgers program~integrate_lorenz integrate_lorenz module~foodie->program~integrate_lorenz module~type_euler_1d type_euler_1D module~foodie->module~type_euler_1d module~foodie_test_integrand_tester_object foodie_test_integrand_tester_object module~foodie->module~foodie_test_integrand_tester_object module~foodie_test_lcce_test foodie_test_lcce_test module~foodie->module~foodie_test_lcce_test module~type_euler_1d_openmp type_euler_1D_openmp module~foodie->module~type_euler_1d_openmp program~integrate_euler_1d_caf~2 integrate_euler_1D_caf module~foodie->program~integrate_euler_1d_caf~2 module~foodie_test_oscillation_test foodie_test_oscillation_test module~foodie->module~foodie_test_oscillation_test program~integrate_euler_1d integrate_euler_1D module~foodie->program~integrate_euler_1d module~foodie_test_object foodie_test_object module~foodie->module~foodie_test_object module~foodie_test_integrand_oscillation foodie_test_integrand_oscillation module~foodie->module~foodie_test_integrand_oscillation module~foodie_test_integrand_lcce foodie_test_integrand_lcce module~foodie->module~foodie_test_integrand_lcce module~type_euler_1d_caf type_euler_1D_caf module~foodie->module~type_euler_1d_caf module~type_burgers type_burgers module~foodie->module~type_burgers module~foodie_test_integrand_ladvection foodie_test_integrand_ladvection module~foodie->module~foodie_test_integrand_ladvection program~integrate_euler_1d_openmp integrate_euler_1D_openmp module~foodie->program~integrate_euler_1d_openmp module~type_lorenz type_lorenz module~foodie->module~type_lorenz module~type_euler_1d->program~integrate_euler_1d module~foodie_test_integrand_tester_object->module~foodie_test_object module~foodie_test_integrand_tester_object->module~foodie_test_integrand_oscillation module~foodie_test_integrand_tester_object->module~foodie_test_integrand_lcce module~foodie_test_integrand_tester_object->module~foodie_test_integrand_ladvection program~foodie_test_lcce foodie_test_lcce module~foodie_test_lcce_test->program~foodie_test_lcce module~type_euler_1d_openmp->program~integrate_euler_1d_openmp program~foodie_test_oscillation foodie_test_oscillation module~foodie_test_oscillation_test->program~foodie_test_oscillation program~foodie_tester foodie_tester module~foodie_test_object->program~foodie_tester module~foodie_test_integrand_oscillation->module~foodie_test_oscillation_test module~foodie_test_integrand_oscillation->module~foodie_test_object module~foodie_test_integrand_lcce->module~foodie_test_lcce_test module~foodie_test_integrand_lcce->module~foodie_test_object module~type_euler_1d_caf->program~integrate_euler_1d_caf~2 module~type_burgers->program~integrate_burgers module~foodie_test_integrand_ladvection->module~foodie_test_object module~type_lorenz->program~integrate_lorenz
Help


Functions

public pure function foodie_integrator_class_names() result(names)

Return the list of available intergrator class of schemes names.

Arguments

None

Return Value character(len=99), allocatable, (:)

Available integrator class names.

public pure function foodie_integrator_schemes(class_name) result(schemes)

Return the list of all available intergrator schemes, or only the schemes belonging to the given class name.

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in), optional :: class_name

Return only the schemes belogn to the given class.

Return Value character(len=99), allocatable, (:)

Available integrators.

public pure function is_available(scheme)

Return .true. if the given scheme (or class of schemes name) is available in the FOODIE library.

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: scheme

Selected integrator given.

Return Value logical

Availability result.

public pure function is_class_available(scheme)

Return .true. if the given class of schemes name is available.

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: scheme

Selected integrator given.

Return Value logical

Availability result.

public pure function is_scheme_available(scheme)

Return .true. if the given scheme (class name) is available in the FOODIE library.

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: scheme

Selected integrator given.

Return Value logical

Availability result.


Subroutines

public subroutine foodie_integrator_factory(scheme, integrator, stages, tolerance, nu, alpha, iterations, autoupdate, U)

Return a concrete instance of integrator_object given a scheme selection.

Arguments

Type IntentOptional AttributesName
character(len=*), intent(in) :: scheme

Selected integrator given.

class(integrator_object), intent(out), allocatable:: integrator

The FOODIE integrator.

integer(kind=I_P), intent(in), optional :: stages

Stages of multi-stage methods.

real(kind=R_P), intent(in), optional :: tolerance

Tolerance on the local truncation error.

real(kind=R_P), intent(in), optional :: nu

Williams-Robert-Asselin filter coefficient.

real(kind=R_P), intent(in), optional :: alpha

Robert-Asselin filter coefficient.

integer(kind=I_P), intent(in), optional :: iterations

Implicit iterations.

logical, intent(in), optional :: autoupdate

Enable cyclic autoupdate for multistep.

class(integrand_object), intent(in), optional :: U

Integrand molding prototype.