8 #include "sll_working_precision.h"
23 procedure(
splitting),
deferred :: lie_splitting_back
28 procedure(
empty),
deferred :: free
38 sll_real64,
intent(in) :: dt
39 sll_int32,
intent(in) :: number_steps
54 sll_real64,
intent(in) :: dt
55 sll_int32,
intent(in) :: number_steps
57 sll_real64 :: dt1, dt2
60 dt1 = dt / (2.0_f64 - 2.0_f64**(1.0_f64/3.0_f64))
61 dt2 = - 2.0_f64**(1.0_f64/3.0_f64)* dt1
65 call self%strang_splitting( dt1, 1 )
66 call self%strang_splitting( dt2, 1 )
67 call self%strang_splitting( dt1, 1 )
78 sll_real64,
intent(in) :: dt
79 sll_int32,
intent(in) :: number_steps
81 sll_real64 :: a1, a2, a3, a4, a5
85 a1 = (146.0_f64 + 5.0_f64*sqrt(19.0_f64))/540.0_f64
86 a2 = (-2.0_f64+10.0_f64*sqrt(19.0_f64))/135.0_f64
88 a4 = (-23.0_f64-20.0_f64*sqrt(19.0_f64))/270.0_f64
89 a5 = (14.0_f64-sqrt(19.0_f64))/108.0_f64
93 call self%lie_splitting_back( a5*dt,1 )
94 call self%lie_splitting( a1*dt,1 )
95 call self%lie_splitting_back( a4*dt,1 )
96 call self%lie_splitting( a2*dt,1 )
97 call self%lie_splitting_back( a3*dt,1 )
98 call self%lie_splitting( a3*dt,1 )
99 call self%lie_splitting_back( a2*dt,1 )
100 call self%lie_splitting( a4*dt,1 )
101 call self%lie_splitting_back( a1*dt,1 )
102 call self%lie_splitting( a5*dt,1 )
111 sll_real64,
intent(in) :: dt
112 sll_int32,
intent(in) :: number_steps
123 call self%lie_splitting_back( a1*dt,1 )
124 call self%lie_splitting( a2*dt,1 )
125 call self%lie_splitting_back( a2*dt,1 )
126 call self%lie_splitting( a1*dt,1 )
Base class for Hamiltonian splittings.
subroutine splitting_fourth_10steps(self, dt, number_steps)
subroutine splitting_fourth(self, dt, number_steps)
subroutine reinit_fields(self)
subroutine splitting_second_4steps(self, dt, number_steps)
Module to select the kind parameter.
Type for Hamiltonian splittings.