type_euler_1D Module

module~~type_euler_1d~~UsesGraph module~type_euler_1d type_euler_1D penf penf penf->module~type_euler_1d module~foodie foodie penf->module~foodie module~foodie_integrator_adams_bashforth foodie_integrator_adams_bashforth penf->module~foodie_integrator_adams_bashforth module~foodie_integrator_ms_runge_kutta_ssp foodie_integrator_ms_runge_kutta_ssp penf->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_error_codes foodie_error_codes penf->module~foodie_error_codes module~foodie_integrator_lmm_ssp foodie_integrator_lmm_ssp penf->module~foodie_integrator_lmm_ssp module~foodie_integrator_euler_explicit foodie_integrator_euler_explicit penf->module~foodie_integrator_euler_explicit module~foodie_integrator_multistep_object foodie_integrator_multistep_object penf->module~foodie_integrator_multistep_object module~foodie_integrator_runge_kutta_emd foodie_integrator_runge_kutta_emd penf->module~foodie_integrator_runge_kutta_emd module~foodie_integrator_adams_bashforth_moulton foodie_integrator_adams_bashforth_moulton penf->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_adams_moulton foodie_integrator_adams_moulton penf->module~foodie_integrator_adams_moulton module~foodie_integrator_runge_kutta_lssp foodie_integrator_runge_kutta_lssp penf->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_lmm_ssp_vss foodie_integrator_lmm_ssp_vss penf->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_runge_kutta_ssp foodie_integrator_runge_kutta_ssp penf->module~foodie_integrator_runge_kutta_ssp module~foodie_integrand_object foodie_integrand_object penf->module~foodie_integrand_object module~foodie_integrator_runge_kutta_low_storage foodie_integrator_runge_kutta_low_storage penf->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrator_multistage_object foodie_integrator_multistage_object penf->module~foodie_integrator_multistage_object module~foodie_integrator_leapfrog foodie_integrator_leapfrog penf->module~foodie_integrator_leapfrog module~foodie_integrator_multistage_multistep_object foodie_integrator_multistage_multistep_object penf->module~foodie_integrator_multistage_multistep_object module~foodie_integrator_object foodie_integrator_object penf->module~foodie_integrator_object module~foodie_integrator_backward_differentiation_formula foodie_integrator_backward_differentiation_formula penf->module~foodie_integrator_backward_differentiation_formula module~foodie->module~type_euler_1d wenoof wenoof wenoof->module~type_euler_1d module~foodie_integrator_adams_bashforth->module~foodie module~foodie_integrator_adams_bashforth->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_ms_runge_kutta_ssp->module~foodie 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_error_codes->module~foodie_integrator_lmm_ssp module~foodie_error_codes->module~foodie_integrator_euler_explicit module~foodie_error_codes->module~foodie_integrator_runge_kutta_emd module~foodie_error_codes->module~foodie_integrator_adams_bashforth_moulton module~foodie_error_codes->module~foodie_integrator_adams_moulton module~foodie_error_codes->module~foodie_integrator_runge_kutta_lssp module~foodie_error_codes->module~foodie_integrator_lmm_ssp_vss module~foodie_error_codes->module~foodie_integrator_runge_kutta_ssp module~foodie_error_codes->module~foodie_integrator_runge_kutta_low_storage module~foodie_error_codes->module~foodie_integrator_leapfrog 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->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 iso_fortran_env->module~foodie_integrator_multistage_object iso_fortran_env->module~foodie_integrator_multistage_multistep_object iso_fortran_env->module~foodie_integrator_object 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 Euler 1D field that is a concrete extension of the abstract integrand type.

Used By

module~~type_euler_1d~~UsedByGraph module~type_euler_1d type_euler_1D program~integrate_euler_1d integrate_euler_1D module~type_euler_1d->program~integrate_euler_1d
Help


Derived Types

type, public, extends(integrand) :: euler_1D

Euler 1D PDEs system field.

Components

TypeVisibility AttributesNameInitial
character(len=:), private, allocatable:: BC_L

Left boundary condition type.

character(len=:), private, allocatable:: BC_R

Right boundary condition type.

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

Space step.

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

Number of conservative variables, Ns+2.

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

Number of ghost cells for boundary conditions handling.

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

Space dimension.

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

Number of primitive variables, Ns+4.

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

Number of initial species.

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

Integrand (state) variables, whole physical domain [1:Nc,1-Ng:Ni+Ng].

real(kind=R_P), private, allocatable:: cp0(:)

Specific heat cp of initial species [1:Ns].

real(kind=R_P), private, allocatable:: cv0(:)

Specific heat cv of initial species [1:Ns].

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

Space accuracy formal order.

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

Previous time steps states [1:Nc,1-Ng:Ni+Ng,1:steps].

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

Number of time steps stored.

type(weno_interpolator_upwind), private :: weno

WENO interpolator.

Type-Bound Procedures

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

Euler + Euler operator.

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

Euler = Euler.

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

Euler = real.

procedure, private, pass(self) :: conservative2primitive

Convert conservative variables to primitive ones.

procedure, public, pass(self) :: destroy

Destroy field.

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

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

procedure, private, pass(self) :: impose_boundary_conditions

Impose boundary conditions.

procedure, public, pass(self) :: init

Init field.

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

Euler * Euler operator.

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

Euler * real operator.

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

Local error.

procedure, public, pass(self) :: output

Extract Euler field.

procedure, public, pass(self) :: previous_step

Get a previous time step.

procedure, private, pass(self) :: primitive2conservative

Convert primitive variables to conservative ones.

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

Real * Euler operator.

procedure, private, pass(self) :: reconstruct_interfaces_states

Reconstruct interfaces states.

procedure, private, pass(self) :: riemann_solver

Solve the Riemann Problem at cell interfaces.

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

Euler - Euler.

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

Time derivative, residuals function.

procedure, public, pass(self) :: update_previous_steps

Update previous time steps.


Functions

private elemental function E(p, r, u, g) result(energy)

Compute total specific energy (per unit of mass). $$ E = \frac{p}{{\left( {\g - 1} \right)\r }} + \frac{{u^2 }}{2} $$

Arguments

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

Pressure.

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

Density.

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

Module of velocity vector.

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

Specific heats ratio \(\frac{{c_p}}{{c_v}}\).

Return Value real(kind=R_P)

Total specific energy (per unit of mass).

private elemental function H(p, r, u, g) result(entalpy)

Compute total specific entalpy (per unit of mass). $$ H = \frac{{\g p}}{{\left( {\g - 1} \right)\r }} + \frac{{u^2 }}{2} $$

Arguments

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

Pressure.

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

Density.

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

Module of velocity vector.

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

Specific heats ratio \(\frac{{c_p}}{{c_v}}\).

Return Value real(kind=R_P)

Total specific entalpy (per unit of mass).

private elemental function a(p, r, g) result(ss)

Compute the speed of sound for an ideal calorically perfect gas.

Arguments

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

Pressure.

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

Density.

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

Specific heats ratio \(\frac{{c_p}}{{c_v}}\).

Return Value real(kind=R_P)

Speed of sound.

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

Add two Euler fields.

Arguments

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

Left hand side.

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

Right hand side.

Return Value class(integrand), allocatable

Operator result.

private pure function compute_dt(self, Nmax, Tmax, t, CFL) result(Dt)

Compute the current time step by means of CFL condition.

Arguments

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

Euler field.

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

Maximun number of iterates.

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

Maximum time (ignored if Nmax>0).

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

Time.

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

CFL value.

Return Value real(kind=R_P)

Time step.

private pure function conservative2primitive(self, conservative) result(primitive)

Convert conservative variables to primitive variables.

Arguments

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

Euler field.

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

Conservative variables.

Return Value real(kind=R_P) (1:self%Np)

Primitive variables.

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

Time derivative of Euler field, the residuals function.

Arguments

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

Euler field.

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

Time.

Return Value class(integrand), allocatable

Euler field time derivative.

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

Estimate local truncation error between 2 euler approximations.

Arguments

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

Left hand side.

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

Right hand side.

Return Value real(kind=R_P)

Error estimation.

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

Multiply an Euler field by another one.

Arguments

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

Left hand side.

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

Right hand side.

Return Value class(integrand), allocatable

Operator result.

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

Multiply an Euler field by a real scalar.

Arguments

Type IntentOptional AttributesName
class(euler_1D), 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 output(self) result(state)

Output the Euler field state (primitive variables).

Arguments

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

Euler field.

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

Euler state vector.

private elemental function p(r, a, g) result(pressure)

Compute the pressure for an ideal calorically perfect gas.

Arguments

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

Density.

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

Speed of sound.

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

Specific heats ratio \(\frac{{c_p}}{{c_v}}\).

Return Value real(kind=R_P)

Pressure.

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

Extract previous time solution of Euler field.

Arguments

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

Euler field.

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

Time level.

Return Value class(integrand), allocatable

Previous time solution of Euler field.

private pure function primitive2conservative(self, primitive) result(conservative)

Convert primitive variables to conservative variables.

Arguments

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

Euler field.

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

Primitive variables.

Return Value real(kind=R_P) (1:self%Nc)

Conservative variables.

private elemental function r(p, a, g) result(density)

Compute the density for an ideal calorically perfect gas.

Arguments

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

Pressure.

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

Speed of sound.

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

Specific heats ratio \(\frac{{c_p}}{{c_v}}\).

Return Value real(kind=R_P)

Density.

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

Multiply a real scalar by an Euler field.

Arguments

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

Left hand side.

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

Right hand side.

Return Value class(integrand), allocatable

Operator result.

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

Subtract two Euler fields.

Arguments

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

Left hand side.

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

Right hand side.

Return Value class(integrand), allocatable

Operator result.


Subroutines

private pure subroutine compute_inter_states(r1, p1, u1, g1, r4, p4, u4, g4, p, S, S1, S4)

Compute inter states (23*-states) from state1 and state4.

Arguments

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

Density of state 1.

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

Pressure of state 1.

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

Velocity of state 1.

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

Specific heat ratio of state 1.

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

Density of state 4.

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

Pressure of state 4.

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

Velocity of state 4.

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

Specific heat ratio of state 4.

real(kind=R_P), intent(out) :: p

Pressure of the intermediate states.

real(kind=R_P), intent(out) :: S

Contact discontinuity signal velocity.

real(kind=R_P), intent(out) :: S1

Left fastest signal velocity.

real(kind=R_P), intent(out) :: S4

Right fastest signal velocity.

private pure subroutine destroy(self)

Destroy field.

Arguments

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

Euler field.

private subroutine euler_assign_euler(lhs, rhs)

Assign one Euler field to another.

Arguments

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

Left hand side.

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

Right hand side.

private subroutine euler_assign_real(lhs, rhs)

Assign one real to an Euler field.

Arguments

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

Left hand side.

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

Right hand side.

private pure subroutine impose_boundary_conditions(self, primitive)

Impose boundary conditions.

Arguments

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

Euler field.

real(kind=R_P), intent(inout) :: primitive(1:self%Np,1-self%Ng:self%Ni+self%Ng)

Primitive variables [1:Np,1-Ng:Ni+Ng].

private subroutine init(self, Ni, Ns, Dx, BC_L, BC_R, initial_state, cp0, cv0, steps, ord)

Init field.

Arguments

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

Euler field.

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

Space dimension.

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

Number of initial species.

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

Space step.

character(len=*), intent(in) :: BC_L

Left boundary condition type.

character(len=*), intent(in) :: BC_R

Right boundary condition type.

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

Initial state of primitive variables.

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

Initial specific heat, constant pressure.

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

Initial specific heat, constant volume.

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

Time steps stored.

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

Space accuracy formal order.

private pure subroutine reconstruct_interfaces_states(self, primitive, r_primitive)

Reconstruct the interfaces states (into primitive variables formulation) by the requested order of accuracy.

Arguments

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

Euler field.

real(kind=R_P), intent(in) :: primitive(1:self%Np,1-self%Ng:self%Ni+self%Ng)

Primitive variables.

real(kind=R_P), intent(inout) :: r_primitive(1:self%Np,1:2,0:self%Ni+1)

Reconstructed primitive variables.

private pure subroutine riemann_solver(self, p1, r1, u1, g1, p4, r4, u4, g4, F)

Solve the Riemann problem between the state $1$ and $4$ using the (local) Lax Friedrichs (Rusanov) solver.

Arguments

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

Euler field.

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

Pressure of state 1.

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

Density of state 1.

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

Velocity of state 1.

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

Specific heats ratio of state 1.

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

Pressure of state 4.

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

Density of state 4.

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

Velocity of state 4.

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

Specific heats ratio of state 4.

real(kind=R_P), intent(out) :: F(1:self%Nc)

Resulting fluxes.

private subroutine update_previous_steps(self, filter, weights)

Update previous time steps.

Arguments

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

Euler field.

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

Filter field displacement.

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

Weights for filtering the steps.