Report Typos and Errors    
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
Derived types and interfaces | Functions/Subroutines | Variables
sll_m_operator_splitting Module Reference

Description

Base class of operator splitting library. It is only used with particle-in-cell method.

The operator splitting module provides a generic implementation of composition algorithms of different order for two operators T and V for solving \( \frac{dU}{dt} = (T+V) U \). The solution on one time step can be written \( U(\Delta t) = \mathcal{S}_{T+V} U(0) \). The composition algorithm consists in successive solutions of the split equations \( \frac{dU}{dt} = T U \) and \( \frac{dU}{dt} = V U \). Alternating the two reduced solution operators \( \mathcal{S}_{T} \) and \(\mathcal{S}_{V} \) with adequately chosen time increments yields arbitrary order in time for the full solution.

The application of an operator splitting method to a concrete problem is done by extending the sll_t_operator_splitting splitting base class by a new type containing on the one hand the data on which the operators act and a specific implementation of the two operators

Derived types and interfaces

type  sll_t_operator_splitting
 operator splitting object More...
 

Functions/Subroutines

subroutine operator (this, dt)
 dummy implementation of an sll_t_operator_splitting needed to provide the interface. The class cannot be abstract because the splitting coefficients are initialised here as they are generic for any type of operator. More...
 
class(sll_t_operator_splitting) function, pointer new_operator_splitting (split_case, split_step, nb_split_step, split_begin_T, dt)
 Returns a pointer to a heap-allocated sll_t_operator_splitting object. More...
 
subroutine, public sll_s_operator_splitting_init (split, split_case, split_step, nb_split_step, split_begin_T, dt)
 Initialises data for operator splitting. More...
 
subroutine, public sll_s_do_split_steps (split, dt, number_time_steps)
 Apply the composition method for given number of times steps. More...
 

Variables

integer(kind=i32), parameter sll_user_defined = 0
 user defined splitting More...
 
integer(kind=i32), parameter, public sll_p_lie_tv = 1
 Lie splitting T first (order 1) More...
 
integer(kind=i32), parameter, public sll_p_lie_vt = 2
 Lie splitting V first x (order 1) More...
 
integer(kind=i32), parameter, public sll_p_strang_tvt = 3
 Strang splitting T first (order 2) More...
 
integer(kind=i32), parameter, public sll_p_strang_vtv = 4
 Strang splitting V first (order 2) More...
 
integer(kind=i32), parameter, public sll_p_triple_jump_tvt = 5
 Triple jump splitting T first (order 4) More...
 
integer(kind=i32), parameter, public sll_p_triple_jump_vtv = 6
 Triple jump splitting V first (order 4) More...
 
integer(kind=i32), parameter, public sll_p_order6_tvt = 7
 Order 6 splitting T first (order 6) More...
 
integer(kind=i32), parameter, public sll_p_order6_vtv = 8
 Order 6 splitting V first (order 6) More...
 
integer(kind=i32), parameter sll_order6vp_tvt = 9
 Specific Vlasov-Poisson splitting T first (order 6) More...
 
integer(kind=i32), parameter sll_order6vp_vtv = 10
 Specific Vlasov-Poisson splitting V first (order 6) More...
 
integer(kind=i32), parameter sll_order6vpnew_tvt = 11
 Specific Vlasov-Poisson splitting T first (order 6) More...
 
integer(kind=i32), parameter sll_order6vpnew1_vtv = 12
 Specific Vlasov-Poisson splitting V first (order 6) More...
 
integer(kind=i32), parameter sll_order6vpnew2_vtv = 13
 Specific Vlasov-Poisson splitting V first (order 6) More...
 
integer(kind=i32), parameter sll_order6vp2d_vtv = 14
 Specific Vlasov-Poisson splitting V first (order 6) More...
 
integer(kind=i32), parameter sll_order6vpot_vtv = 15
 Specific Vlasov-Poisson splitting V first (order 6) More...
 

Function/Subroutine Documentation

◆ new_operator_splitting()

class(sll_t_operator_splitting) function, pointer sll_m_operator_splitting::new_operator_splitting ( integer(kind=i32), intent(in)  split_case,
real(kind=f64), dimension(:), intent(in), optional  split_step,
integer(kind=i32), intent(in), optional  nb_split_step,
logical, intent(in), optional  split_begin_T,
real(kind=f64), intent(in), optional  dt 
)
private

Returns a pointer to a heap-allocated sll_t_operator_splitting object.

Parameters
[in]split_casesplitting method to be chosen among SLL_USER_DEFINED : user provides coefficients
sll_p_lie_tv : first order Lie with T first
sll_p_lie_vt : first order Lie with V first
sll_p_strang_tvt : second order Strang with T first
sll_p_strang_vtv : second order Strang with V first
sll_p_triple_jump_tvt : fourth order triple jump with T first
sll_p_triple_jump_vtv : fourth order triple jump with V first
sll_p_order6_tvt : sixth order with T first
sll_p_order6_vtv : sixth order with V first
SLL_ORDER6VP_TVT : sixth order optimized for Vlasov-Poisson with T first
SLL_ORDER6VP_VTV : sixth order optimized for Vlasov-Poisson with V first
SLL_ORDER6VPnew_TVT
SLL_ORDER6VPnew1_VTV
SLL_ORDER6VPnew2_VTV
SLL_ORDER6VP2D_VTV
SLL_ORDER6VPOT_VTV
[in]split_steparray containing splitting coefficients
[in]nb_split_stepnumber of split steps in the method
[in]split_begin_Tlogical True if T first false else
[in]dttime step
Returns
split a pointer to a heap-allocated sll_t_operator_splitting object.

Definition at line 126 of file sll_m_operator_splitting.F90.

Here is the call graph for this function:

◆ operator()

subroutine sll_m_operator_splitting::operator ( class(sll_t_operator_splitting), intent(inout)  this,
real(kind=f64), intent(in)  dt 
)
private

dummy implementation of an sll_t_operator_splitting needed to provide the interface. The class cannot be abstract because the splitting coefficients are initialised here as they are generic for any type of operator.

Parameters
[in,out]thissll_t_operator_splitting object
[in]dttime increment on which operator is applied

Definition at line 88 of file sll_m_operator_splitting.F90.

◆ sll_s_do_split_steps()

subroutine, public sll_m_operator_splitting::sll_s_do_split_steps ( class(sll_t_operator_splitting split,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_time_steps 
)

Apply the composition method for given number of times steps.

Parameters
[in,out]splitsll_t_operator_splitting object
[in]dt: time step
[in]number_time_steps: number of time steps to be performed

Definition at line 514 of file sll_m_operator_splitting.F90.

Here is the caller graph for this function:

◆ sll_s_operator_splitting_init()

subroutine, public sll_m_operator_splitting::sll_s_operator_splitting_init ( class(sll_t_operator_splitting split,
integer(kind=i32), intent(in)  split_case,
real(kind=f64), dimension(:), intent(in), optional  split_step,
integer(kind=i32), intent(in), optional  nb_split_step,
logical, intent(in), optional  split_begin_T,
real(kind=f64), intent(in), optional  dt 
)

Initialises data for operator splitting.

Parameters
[in]splitoperator splitting object to be initialised
[in]split_casesplitting method to be chosen among
SLL_USER_DEFINED : user provides coefficients
sll_p_lie_tv : first order Lie with T first
sll_p_lie_vt : first order Lie with V first
sll_p_strang_tvt : second order Strang with T first
sll_p_strang_vtv : second order Strang with V first
sll_p_triple_jump_tvt : fourth order triple jump with T first
sll_p_triple_jump_vtv : fourth order triple jump with V first
sll_p_order6_tvt : sixth order with T first
sll_p_order6_vtv : sixth order with V first
SLL_ORDER6VP_TVT : sixth order optimized for Vlasov-Poisson with T first
SLL_ORDER6VP_VTV : sixth order optimized for Vlasov-Poisson with V first
SLL_ORDER6VPnew_TVT
SLL_ORDER6VPnew1_VTV
SLL_ORDER6VPnew2_VTV
SLL_ORDER6VP2D_VTV
SLL_ORDER6VPOT_VTV
[in]split_steparray containing splitting coefficients
[in]nb_split_stepnumber of split steps in the method
[in]split_begin_Tlogical True if T first false else
[in]dttime step

Definition at line 175 of file sll_m_operator_splitting.F90.

Here is the caller graph for this function:

Variable Documentation

◆ sll_order6vp2d_vtv

integer(kind=i32), parameter sll_order6vp2d_vtv = 14
private

Specific Vlasov-Poisson splitting V first (order 6)

Definition at line 59 of file sll_m_operator_splitting.F90.

◆ sll_order6vp_tvt

integer(kind=i32), parameter sll_order6vp_tvt = 9
private

Specific Vlasov-Poisson splitting T first (order 6)

Definition at line 54 of file sll_m_operator_splitting.F90.

◆ sll_order6vp_vtv

integer(kind=i32), parameter sll_order6vp_vtv = 10
private

Specific Vlasov-Poisson splitting V first (order 6)

Definition at line 55 of file sll_m_operator_splitting.F90.

◆ sll_order6vpnew1_vtv

integer(kind=i32), parameter sll_order6vpnew1_vtv = 12
private

Specific Vlasov-Poisson splitting V first (order 6)

Definition at line 57 of file sll_m_operator_splitting.F90.

◆ sll_order6vpnew2_vtv

integer(kind=i32), parameter sll_order6vpnew2_vtv = 13
private

Specific Vlasov-Poisson splitting V first (order 6)

Definition at line 58 of file sll_m_operator_splitting.F90.

◆ sll_order6vpnew_tvt

integer(kind=i32), parameter sll_order6vpnew_tvt = 11
private

Specific Vlasov-Poisson splitting T first (order 6)

Definition at line 56 of file sll_m_operator_splitting.F90.

◆ sll_order6vpot_vtv

integer(kind=i32), parameter sll_order6vpot_vtv = 15
private

Specific Vlasov-Poisson splitting V first (order 6)

Definition at line 60 of file sll_m_operator_splitting.F90.

◆ sll_p_lie_tv

integer(kind=i32), parameter, public sll_p_lie_tv = 1

Lie splitting T first (order 1)

Definition at line 46 of file sll_m_operator_splitting.F90.

◆ sll_p_lie_vt

integer(kind=i32), parameter, public sll_p_lie_vt = 2

Lie splitting V first x (order 1)

Definition at line 47 of file sll_m_operator_splitting.F90.

◆ sll_p_order6_tvt

integer(kind=i32), parameter, public sll_p_order6_tvt = 7

Order 6 splitting T first (order 6)

Definition at line 52 of file sll_m_operator_splitting.F90.

◆ sll_p_order6_vtv

integer(kind=i32), parameter, public sll_p_order6_vtv = 8

Order 6 splitting V first (order 6)

Definition at line 53 of file sll_m_operator_splitting.F90.

◆ sll_p_strang_tvt

integer(kind=i32), parameter, public sll_p_strang_tvt = 3

Strang splitting T first (order 2)

Definition at line 48 of file sll_m_operator_splitting.F90.

◆ sll_p_strang_vtv

integer(kind=i32), parameter, public sll_p_strang_vtv = 4

Strang splitting V first (order 2)

Definition at line 49 of file sll_m_operator_splitting.F90.

◆ sll_p_triple_jump_tvt

integer(kind=i32), parameter, public sll_p_triple_jump_tvt = 5

Triple jump splitting T first (order 4)

Definition at line 50 of file sll_m_operator_splitting.F90.

◆ sll_p_triple_jump_vtv

integer(kind=i32), parameter, public sll_p_triple_jump_vtv = 6

Triple jump splitting V first (order 4)

Definition at line 51 of file sll_m_operator_splitting.F90.

◆ sll_user_defined

integer(kind=i32), parameter sll_user_defined = 0
private

user defined splitting

Definition at line 45 of file sll_m_operator_splitting.F90.

    Report Typos and Errors