type_burgers Module

module~~type_burgers~~UsesGraph module~type_burgers type_burgers IR_Precision IR_Precision IR_Precision->module~type_burgers module~foodie foodie module~foodie->module~type_burgers 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

Define Burgers field that is a concrete extension of the abstract integrand type.

Used By

module~~type_burgers~~UsedByGraph module~type_burgers type_burgers program~integrate_burgers integrate_burgers module~type_burgers->program~integrate_burgers
Help


Derived Types

type, public, extends(integrand) :: burgers

Burgers equations field.

Components

TypeVisibility AttributesNameInitial
integer(kind=I_P), private :: Ni =0

Number of grid nodes.

real(kind=R_P), private, dimension(:), allocatable:: U

Integrand (state) variables, whole physical domain, [1:Ni].

integer(kind=I_P), private :: dims =0

Space dimensions.

real(kind=R_P), private :: h =0._R_P

Space step discretization.

real(kind=R_P), private :: nu =0._R_P

Viscosity.

real(kind=R_P), private, dimension(:,:), allocatable:: previous

Previous time steps states, [1:Ni,1:steps].

integer(kind=I_P), private :: steps =0

Number of time steps stored.

Type-Bound Procedures

procedure, public, pass(lhs) :: add => add_burgers

Burgers + Burgers operator.

procedure, public, pass(lhs) :: assign_integrand => burgers_assign_burgers

Burgers = Burgers.

procedure, public, pass(lhs) :: assign_real => burgers_assign_real

Burgers = real.

procedure, public, pass(self) :: dt => compute_dt

Compute the current time step, by means of CFL condition.

procedure, public, pass(self) :: init

Init field.

procedure, public, pass(lhs) :: integrand_multiply_integrand => burgers_multiply_burgers

Burgers * burgers operator.

procedure, public, pass(lhs) :: integrand_multiply_real => burgers_multiply_real

Burgers * real operator.

procedure, public, pass(lhs) :: local_error => burgers_local_error

Local error.

procedure, public, pass(self) :: output

Extract Burgers field.

procedure, public, pass(self) :: previous_step

Get a previous time step.

procedure, public, pass(rhs) :: real_multiply_integrand => real_multiply_burgers

Real * Burgers operator.

procedure, public, pass(lhs) :: sub => sub_burgers

Burgers - Burgers operator.

procedure, public, pass(self) :: t => dBurgers_dt

Time derivative, residuals func.

procedure, public, pass(self) :: update_previous_steps

Update previous time steps.

procedure, private, pass(self) :: x => dBurgers_dx

1st derivative.

procedure, private, pass(self) :: xx => d2Burgers_dx2

2nd derivative.


Functions

private function add_burgers(lhs, rhs) result(opr)

Add two Burgers fields.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: lhs

Left hand side.

class(integrand), intent(in) :: rhs

Right hand side.

Return Value class(integrand), allocatable

Operator result.

private function burgers_local_error(lhs, rhs) result(error)

Estimate local truncation error between 2 burgers approximations.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: lhs

Left hand side.

class(integrand), intent(in) :: rhs

Right hand side.

Return Value real(kind=R_P)

Error estimation.

private function burgers_multiply_burgers(lhs, rhs) result(opr)

Multiply a Burgers field by another one.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: lhs

Left hand side.

class(integrand), intent(in) :: rhs

Right hand side.

Return Value class(integrand), allocatable

Operator result.

private function burgers_multiply_real(lhs, rhs) result(opr)

Multiply a Burgers field by a real scalar.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: lhs

Left hand side.

real(kind=R_P), intent(in) :: rhs

Right hand side.

Return Value class(integrand), allocatable

Operator result.

private pure function compute_dt(self, CFL) result(dt)

Compute the current time step, by means of CFL condition.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

real(kind=R_P), intent(in) :: CFL

Courant-Friedricks-Lewi stability coefficient.

Return Value real(kind=R_P)

Current time step.

private function d2Burgers_dx2(self) result(derivative)

Compute the second order spatial derivative of Burgers field.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

Return Value type(burgers)

Burgers field derivative.

private function dBurgers_dt(self, t) result(dState_dt)

Time derivative of Burgers field, residuals function.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

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

Time.

Return Value class(integrand), allocatable

Burgers field time derivative.

private function dBurgers_dx(self) result(derivative)

Compute the first order spatial derivative of Burgers field.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

Return Value type(burgers)

Burgers field derivative.

private pure function output(self) result(state)

Output the Burgers field state.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

Return Value real(kind=R_P), dimension(:), allocatable

Burgers state variable.

private function previous_step(self, n) result(previous)

Extract previous time solution of Burgers field.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: self

Burgers field.

integer(kind=I_P), intent(in) :: n

Time level.

Return Value class(integrand), allocatable

Previous time solution of Burgers field.

private function real_multiply_burgers(lhs, rhs) result(opr)

Multiply a real scalar by a Burgers field.

Arguments

Type IntentOptional AttributesName
real(kind=R_P), intent(in) :: lhs

Left hand side.

class(burgers), intent(in) :: rhs

Right hand side.

Return Value class(integrand), allocatable

Operator result.

private function sub_burgers(lhs, rhs) result(opr)

Subtract two Burgers fields.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(in) :: lhs

Left hand side.

class(integrand), intent(in) :: rhs

Right hand side.

Return Value class(integrand), allocatable

Operator result.


Subroutines

private subroutine burgers_assign_burgers(lhs, rhs)

Assign one Burgers field to another.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(inout) :: lhs

Left hand side.

class(integrand), intent(in) :: rhs

Right hand side.

private subroutine burgers_assign_real(lhs, rhs)

Assign one real to a Burgers field.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(inout) :: lhs

Left hand side.

real(kind=R_P), intent(in) :: rhs

Right hand side.

private subroutine init(self, initial_state, Ni, h, nu, steps)

Construct an initialized Burgers field.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(inout) :: self

Burgers field.

real(kind=R_P), intent(in), dimension(1:Ni):: initial_state

Initial state of Burgers field domain.

integer(kind=I_P), intent(in) :: Ni

Number of grid nodes.

real(kind=R_P), intent(in) :: h

Space step discretization.

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

Viscosity.

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

Time steps stored.

private subroutine update_previous_steps(self, filter, weights)

Update previous time steps.

Arguments

Type IntentOptional AttributesName
class(burgers), intent(inout) :: self

Burgers field.

class(integrand), intent(in), optional :: filter

Filter field displacement.

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

Weights for filtering the steps.