1D linear advection field.
It is a FOODIE integrand class concrete extension.
The 1D linear advection equation is a conservation law that reads as
$$
\begin{matrix}
u_t = R(u) \Leftrightarrow u_t = F(u)_x \\
F(u) = a * u
$$
where a
is scalar constant coefficient. The PDE must completed with the proper initial and boundary conditions.
The finite volume, Godunov's like approach is employed. The conservative variables (and the primitive ones) are co-located at the cell center. The cell and (inter)faces numeration is as follow.
cell (inter)faces | | v v |-------|-------|-.....-|-------|-------|-------|-------|-.....-|-------|-------|-------|-.....-|-------|-------| | 1-Ng | 2-Ng | ..... | -1 | 0 | 1 | 2 | ..... | Ni | Ni+1 | Ni+2 | ..... |Ni+Ng-1| Ni+Ng | |-------|-------|-.....-|-------|-------|-------|-------|-.....-|-------|-------|-------|-.....-|-------|-------| 0-Ng -1 0 1 2 Ni-1 Ni Ni+Ng
Where Ni are the finite volumes (cells) used for discretizing the domain and Ng are the ghost cells used for imposing the left and right boundary conditions (for a total of 2Ng cells).
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=R_P), | public | :: | CFL | = | 0._R_P | CFL value. |
|
real(kind=R_P), | public | :: | Dx | = | 0._R_P | Space step. |
|
integer(kind=I_P), | public | :: | Ng | = | 0 | Ghost cells number. |
|
integer(kind=I_P), | public | :: | Ni | = | 0 | Space dimension. |
|
real(kind=R_P), | public | :: | a | = | 0._R_P | Advection coefficient. |
|
character(len=99), | public | :: | initial_state | Initial state. |
|||
class(interpolator_object), | public, | allocatable | :: | interpolator | WENO interpolator. |
||
real(kind=R_P), | public | :: | length | = | 0._R_P | Domain length. |
|
real(kind=R_P), | public, | allocatable | :: | u(:) | Integrand (state) variable. |
||
character(len=99), | public | :: | w_scheme | = | '' | WENO Scheme used. |
|
real(kind=R_P), | public | :: | weno_eps | = | 0._R_P | WENO epsilon to avoid division by zero, default value. |
|
integer(kind=I_P), | public | :: | weno_order | = | 0 | WENO reconstruction order. |
Overloading add_fast
method.
+
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
=
operator.
=
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= real
operator.
Assign one real to an advection field.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Overloading =
assignament.
=
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Compute the space step by means of CFL condition.
Compute the space step step by means of CFL condition.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
real(kind=R_P), | intent(in) | :: | Dt | Time step. |
Space step.
Return an informative description of the test.
Return informative integrator description.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Integrand. |
||
character(len=*), | intent(in), | optional | :: | prefix | Prefixing string. |
Description.
Destroy field.
Destroy field.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | self | Advection field. |
Compute the current time step by means of CFL condition.
Compute the current time step by means of CFL condition.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
real(kind=R_P), | intent(in) | :: | final_time | Maximum integration time. |
||
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
Time step.
Return error.
Return error.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | t | Time. |
||
real(kind=R_P), | intent(in), | optional | :: | t0 | Initial time. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Error.
Return exact solution.
Return exact solution.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | t | Time. |
||
real(kind=R_P), | intent(in), | optional | :: | t0 | Initial time. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Exact solution.
Export integrand to Tecplot file.
Export integrand to Tecplot file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
character(len=*), | intent(in), | optional | :: | file_name | File name. |
|
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
|
character(len=*), | intent(in), | optional | :: | scheme | Scheme used to integrate integrand. |
|
logical, | intent(in), | optional | :: | close_file | Flag for closing file. |
|
logical, | intent(in), | optional | :: | with_exact_solution | Flag for export also exact solution. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Impose boundary conditions.
Impose boundary conditions.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
real(kind=R_P), | intent(inout) | :: | u(1-self%Ng:) | Conservative variables. |
Initialize integrand.
Initialize integrand.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | Dt | Time step. |
+
operator.
+
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
+
fast operator.
+
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_object), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
+ real
operator.
+ real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
Return integrand dimension.
return integrand dimension.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | integrand. |
integrand dimension.
*
operator.
*
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
*
fast operator.
*
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_object), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
* real
operator.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
* real_scalar
operator.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar
fast operator.
* real_scalar
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_object), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
-
operator.
-
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
- real
operator.
- real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
-
fast operator.
-
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_object), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
||integrand_ladvection - integrand_ladvection||
operator.
Estimate local truncation error between 2 advection approximations.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Error estimation.
Overloading multiply_fast
method.
*
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
* real_scalar
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Overloading *
operator.
*
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_oscillation), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_oscillation), | intent(in) | :: | rhs | Right hand side. |
Operator result.
Overloading +
operator.
+
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
+ real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real +
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_oscillation), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Overloading -
operator.
-
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
- real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real -
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_oscillation), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Estimate local truncation error.
Estimate local truncation error between 2 oscillation approximations.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Error estimation.
Extract integrand state field.
Output the advection field state.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
Advection state
Initialize from command line interface.
Initialize from command line interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | self | Advection field. |
||
type(command_line_interface), | intent(inout) | :: | cli | Command line interface handler. |
real +
operator.
real +
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_ladvection), | intent(in) | :: | rhs | Left hand side. |
Operator result.
real *
operator.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_ladvection), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real_scalar *
operator.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_ladvection), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real -
operator.
real -
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_ladvection), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Reconstruct interface states.
Reconstruct interfaces states.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
real(kind=R_P), | intent(in) | :: | conservative(1-self%Ng:) | Conservative variables. |
||
real(kind=R_P), | intent(inout) | :: | r_conservative(1:,0:) | Reconstructed conservative vars. |
Set command line interface.
Set command line interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(command_line_interface), | intent(inout) | :: | cli | Command line interface handler. |
Set initial state as a sin wave.
Set initial state as a sin wave.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | self | Advection field. |
Set initial state as a square wave.
Set initial state as a square wave.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(inout) | :: | self | Advection field. |
Overloading subtract_fast
method.
-
fast operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Time derivative, residuals.
Time derivative of advection field, the residuals function.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_ladvection), | intent(in) | :: | self | Advection field. |
||
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
Advection field time derivative.
Time derivative, residuals, fast mode.
Time derivative function of integrand class, i.e. the residuals function. Fast mode acting directly on self.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_object), | intent(inout) | :: | self | Integrand field. |
||
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
type, extends(integrand_tester_object) :: integrand_ladvection
!< 1D linear advection field.
!<
!< It is a FOODIE integrand class concrete extension.
!<
!<### 1D linear advection field
!< The 1D linear advection equation is a conservation law that reads as
!<$$
!<\begin{matrix}
!<u_t = R(u) \Leftrightarrow u_t = F(u)_x \\
!<F(u) = a * u
!<$$
!< where `a` is scalar constant coefficient. The PDE must completed with the proper initial and boundary conditions.
!<
!<#### Numerical grid organization
!< The finite volume, Godunov's like approach is employed. The conservative variables (and the primitive ones) are co-located at
!< the cell center. The cell and (inter)faces numeration is as follow.
!<```
!< cell (inter)faces
!< | |
!< v v
!< |-------|-------|-.....-|-------|-------|-------|-------|-.....-|-------|-------|-------|-.....-|-------|-------|
!< | 1-Ng | 2-Ng | ..... | -1 | 0 | 1 | 2 | ..... | Ni | Ni+1 | Ni+2 | ..... |Ni+Ng-1| Ni+Ng |
!< |-------|-------|-.....-|-------|-------|-------|-------|-.....-|-------|-------|-------|-.....-|-------|-------|
!< 0-Ng -1 0 1 2 Ni-1 Ni Ni+Ng
!<```
!< Where *Ni* are the finite volumes (cells) used for discretizing the domain and *Ng* are the ghost cells used for imposing the
!< left and right boundary conditions (for a total of *2Ng* cells).
character(99) :: w_scheme='' !< WENO Scheme used.
integer(I_P) :: weno_order=0 !< WENO reconstruction order.
real(R_P) :: weno_eps=0._R_P !< WENO epsilon to avoid division by zero, default value.
real(R_P) :: CFL=0._R_P !< CFL value.
integer(I_P) :: Ni=0 !< Space dimension.
integer(I_P) :: Ng=0 !< Ghost cells number.
real(R_P) :: length=0._R_P !< Domain length.
real(R_P) :: Dx=0._R_P !< Space step.
real(R_P) :: a=0._R_P !< Advection coefficient.
real(R_P), allocatable :: u(:) !< Integrand (state) variable.
class(interpolator_object), allocatable :: interpolator !< WENO interpolator.
character(99) :: initial_state !< Initial state.
contains
! auxiliary methods
procedure, pass(self), public :: destroy !< Destroy field.
procedure, pass(self), public :: dt => compute_dt !< Compute the current time step by means of CFL condition.
procedure, pass(self), public :: compute_dx !< Compute the space step by means of CFL condition.
procedure, pass(self), public :: output !< Extract integrand state field.
! integrand_tester_object deferred methods
procedure, pass(self), public :: description !< Return an informative description of the test.
procedure, pass(self), public :: error !< Return error.
procedure, pass(self), public :: exact_solution !< Return exact solution.
procedure, pass(self), public :: export_tecplot !< Export integrand to Tecplot file.
procedure, pass(self), public :: initialize !< Initialize integrand.
procedure, pass(self), public :: parse_cli !< Initialize from command line interface.
procedure, nopass, public :: set_cli !< Set command line interface.
! integrand_object deferred methods
procedure, pass(self), public :: integrand_dimension !< Return integrand dimension.
procedure, pass(self), public :: t => dU_dt !< Time derivative, residuals.
! operators
procedure, pass(lhs), public :: local_error !<`||integrand_ladvection - integrand_ladvection||` operator.
! +
procedure, pass(lhs), public :: integrand_add_integrand !< `+` operator.
procedure, pass(lhs), public :: integrand_add_real !< `+ real` operator.
procedure, pass(rhs), public :: real_add_integrand !< `real +` operator.
! *
procedure, pass(lhs), public :: integrand_multiply_integrand !< `*` operator.
procedure, pass(lhs), public :: integrand_multiply_real !< `* real` operator.
procedure, pass(rhs), public :: real_multiply_integrand !< `real *` operator.
procedure, pass(lhs), public :: integrand_multiply_real_scalar !< `* real_scalar` operator.
procedure, pass(rhs), public :: real_scalar_multiply_integrand !< `real_scalar *` operator.
! -
procedure, pass(lhs), public :: integrand_sub_integrand !< `-` operator.
procedure, pass(lhs), public :: integrand_sub_real !< `- real` operator.
procedure, pass(rhs), public :: real_sub_integrand !< `real -` operator.
! =
procedure, pass(lhs), public :: assign_integrand !< `=` operator.
procedure, pass(lhs), public :: assign_real !< `= real` operator.
! override fast operators
! procedure, pass(self), public :: t_fast !< Time derivative, residuals, fast mode.
! procedure, pass(opr), public :: integrand_add_integrand_fast !< `+` fast operator.
! procedure, pass(opr), public :: integrand_multiply_integrand_fast !< `*` fast operator.
! procedure, pass(opr), public :: integrand_multiply_real_scalar_fast !< `* real_scalar` fast operator.
! procedure, pass(opr), public :: integrand_subtract_integrand_fast !< `-` fast operator.
! private methods
procedure, pass(self), private :: impose_boundary_conditions !< Impose boundary conditions.
procedure, pass(self), private :: reconstruct_interfaces !< Reconstruct interface states.
procedure, pass(self), private :: set_sin_wave_initial_state !< Set initial state as a sin wave.
procedure, pass(self), private :: set_square_wave_initial_state !< Set initial state as a square wave.
endtype integrand_ladvection