Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Florian Goth
splitALF
Commits
c550aeb7
Commit
c550aeb7
authored
Jul 02, 2020
by
Florian Goth
Browse files
use the notation from the paper in the code
parent
feb74df4
Pipeline
#7767
passed with stage
in 1 minute and 9 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Prog/splittings.f90
View file @
c550aeb7
...
...
@@ -52,20 +52,20 @@ subroutine init_splittings(split)
nrofsplits
=
41
Allocate
(
splits
(
nrofsplits
))
! V-T Euler
! V-T Euler
/ NS_1 1
call
createsplit
(
splits
(
1
),
1
,
1
)
splits
(
1
)
%
Tcoeffs
(
1
)
=
1.0
splits
(
1
)
%
Vcoeffs
(
1
)
=
1.0
! T - V Euler
! T - V Euler
call
createsplit
(
splits
(
2
),
2
,
1
)
splits
(
2
)
%
Tcoeffs
(
1
)
=
0.0
splits
(
2
)
%
Tcoeffs
(
2
)
=
1.0
splits
(
2
)
%
Vcoeffs
(
1
)
=
1.0
!T-V-T leapfrog
!T-V-T leapfrog
S_1 2
call
createsplit
(
splits
(
3
),
2
,
2
)
splits
(
3
)
%
Tcoeffs
(
1
)
=
0.5
splits
(
3
)
%
Tcoeffs
(
2
)
=
0.5
...
...
@@ -82,7 +82,7 @@ subroutine init_splittings(split)
splits
(
4
)
%
Vcoeffs
(
2
)
=
0.5
! The MacLachlan/Omelyan Integrator. A derivation can be found here https://www.massey.ac.nz/~rmclachl/sisc95.pdf
! The MacLachlan/Omelyan Integrator
, S_2 2
. A derivation can be found here https://www.massey.ac.nz/~rmclachl/sisc95.pdf
call
createsplit
(
splits
(
5
),
3
,
3
)
splits
(
5
)
%
Tcoeffs
(
1
)
=
0.1931833275037836
splits
(
5
)
%
Tcoeffs
(
2
)
=
(
1.0
-
2
*
0.1931833275037836
)
...
...
@@ -159,7 +159,7 @@ subroutine init_splittings(split)
! Symmetric from symmetric
! This corresponds to the classical Forest/Ruth algorithm
!
S_3 4
This corresponds to the classical Forest/Ruth algorithm
call
createsplit
(
splits
(
10
),
4
,
4
)
alpha
=
1
/(
2-2
**
(
1.D0
/
3.D0
)
)
beta
=
1.D0-2.D0
*
alpha
...
...
@@ -173,7 +173,7 @@ subroutine init_splittings(split)
splits
(
10
)
%
Vcoeffs
(
3
)
=
beta
splits
(
10
)
%
Vcoeffs
(
4
)
=
alpha
! Another variant of symmetric with symmetric by Suzuki
!
SS_5 4
Another variant of symmetric with symmetric by Suzuki
call
createsplit
(
splits
(
11
),
6
,
6
)
alpha
=
1.D0
/(
4-4
**
(
1.D0
/
3.D0
)
)
beta
=
1
-
4
*
alpha
...
...
@@ -192,7 +192,7 @@ subroutine init_splittings(split)
splits
(
11
)
%
Vcoeffs
(
6
)
=
splits
(
11
)
%
Vcoeffs
(
2
)
! fourth order method from Omelyan, 2001, previously discovered by McLachlan 1995
!
S_5 4
fourth order method from Omelyan, 2001, previously discovered by McLachlan 1995
call
createsplit
(
splits
(
12
),
5
,
5
)
xi
=
0.1720865590295143
lam
=
-0.09156203075515678
...
...
@@ -255,7 +255,7 @@ subroutine init_splittings(split)
splits
(
beg
+
n
)
%
Vcoeffs
(
tmpint
)
=
0
enddo
! the variant with m=2 optimized for large step sizes in Blanes 2014, 2. order
!
SE_2 2
the variant with m=2 optimized for large step sizes in Blanes 2014, 2. order
call
createsplit
(
splits
(
23
),
3
,
3
)
splits
(
23
)
%
Tcoeffs
(
1
)
=
0.21178
splits
(
23
)
%
Tcoeffs
(
2
)
=
(
1.0
-
2.0
*
splits
(
23
)
%
Tcoeffs
(
1
))
...
...
@@ -264,7 +264,7 @@ subroutine init_splittings(split)
splits
(
23
)
%
Vcoeffs
=
0.5
splits
(
23
)
%
Vcoeffs
(
1
)
=
0.0
! the variant with m=3 optimized for large step sizes in Blanes 2014, 2. Order
!
SE_3 2
the variant with m=3 optimized for large step sizes in Blanes 2014, 2. Order
call
createsplit
(
splits
(
24
),
4
,
4
)
alpha
=
0.11888010966548
beta
=
0.29619504261126
...
...
@@ -278,7 +278,7 @@ subroutine init_splittings(split)
splits
(
24
)
%
Vcoeffs
(
3
)
=
1.D0
-
2.D0
*
beta
splits
(
24
)
%
Vcoeffs
(
4
)
=
beta
! the variant with m=4 optimized for large step sizes in Blanes 2014, 2. Order
!
SE_4 2
the variant with m=4 optimized for large step sizes in Blanes 2014, 2. Order
call
createsplit
(
splits
(
25
),
5
,
5
)
xi
=
0.071353913450279725904
lam
=
0.268548791161230105820
...
...
@@ -296,8 +296,9 @@ subroutine init_splittings(split)
splits
(
25
)
%
Vcoeffs
(
4
)
=
splits
(
25
)
%
Vcoeffs
(
3
)
splits
(
25
)
%
Vcoeffs
(
5
)
=
splits
(
25
)
%
Vcoeffs
(
2
)
call
createsplit
(
splits
(
26
),
3
,
3
)
!hermitian third order method with entirely complex coefficients
! , originally found by Suzuki 1990. Can be found in Blanes 2010
! CH_2 3 hermitian third order method with entirely complex coefficients,
! originally found by Suzuki 1990. Can be found in Blanes 2010
call
createsplit
(
splits
(
26
),
3
,
3
)
alpha
=
CMPLX
(
1.D0
/
2.D0
,
Sqrt
(
3.D0
)/
6.D0
,
kind
=
kind
(
0.D0
))
splits
(
26
)
%
Tcoeffs
(
1
)
=
alpha
/
2.D0
splits
(
26
)
%
Tcoeffs
(
2
)
=
1.D0
/
2.D0
...
...
@@ -322,7 +323,7 @@ subroutine init_splittings(split)
splits
(
27
)
%
Vcoeffs
(
4
)
=
1.D0
/
4.D0
splits
(
27
)
%
Vcoeffs
(
5
)
=
1.D0
/
4.D0
! The optimized Order-4 method from here: http://www.gicas.uji.es/Research/splitting-complex.html
!
CSR_4 4,
The optimized Order-4 method from here: http://www.gicas.uji.es/Research/splitting-complex.html
call
createsplit
(
splits
(
28
),
5
,
5
)
splits
(
28
)
%
Tcoeffs
(
1
)
=
CMPLX
(
0.060078275263542357774
,
-0.060314841253378523039
,
kind
=
kind
(
0.D0
))
...
...
@@ -351,7 +352,7 @@ subroutine init_splittings(split)
splits
(
29
)
%
Vcoeffs
(
3
)
=
0.2992014902086648372346181686254076026253
splits
(
29
)
%
Vcoeffs
(
4
)
=
0.2007985097913351627653818313745923973747
! The order 6 method: http://www.gicas.uji.es/Research/splitting-complex.html
!
CSR_16 6
The order 6 method: http://www.gicas.uji.es/Research/splitting-complex.html
call
createsplit
(
splits
(
30
),
17
,
17
)
splits
(
30
)
%
Vcoeffs
=
1.D0
/
16
splits
(
30
)
%
Vcoeffs
(
1
)
=
0
...
...
@@ -388,7 +389,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
31
)
%
Vcoeffs
(
4
)
=
beta
! My first own third order method, designed to be a hermitian sequence of Operators
!
CHR_3 3
My first own third order method, designed to be a hermitian sequence of Operators
call
createsplit
(
splits
(
32
),
4
,
4
)
beta
=
1.D0
/
3.D0
splits
(
32
)
%
Tcoeffs
(
1
)
=
1.D0
/
24.D0
*
CMPLX
(
3.D0
,
-
Sqrt
(
3.D0
),
dp
)
...
...
@@ -411,7 +412,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
33
)
%
Vcoeffs
(
1
)
=
0.5
splits
(
33
)
%
Vcoeffs
(
2
)
=
0.5
!
H
_5 4 hermitian splitting with positive b's designed by me
!
CHR
_5 4 hermitian splitting with positive b's designed by me
call
createsplit
(
splits
(
34
),
6
,
6
)
splits
(
34
)
%
Tcoeffs
(
1
)
=
CMPLX
(
0.077032770903379296850
,
-0.018324799648727332496
,
dp
)
...
...
@@ -428,7 +429,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
34
)
%
Vcoeffs
(
5
)
=
splits
(
34
)
%
Vcoeffs
(
3
)
splits
(
34
)
%
Vcoeffs
(
6
)
=
splits
(
34
)
%
Vcoeffs
(
2
)
! A hermitian fourth order method as given in Suzuki 1990
!
CH_4 4
A hermitian fourth order method as given in Suzuki 1990
call
createsplit
(
splits
(
35
),
5
,
5
)
alpha
=
CMPLX
(
1.D0
/
2.D0
,
Sqrt
(
3.D0
)/
6.D0
,
kind
=
kind
(
0.D0
))
beta
=
CMPLX
(
1.D0
/
2.D0
,
0.2071067811865
,
dp
)
...
...
@@ -444,7 +445,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
35
)
%
Vcoeffs
(
4
)
=
beta
*
conjg
(
alpha
)
splits
(
35
)
%
Vcoeffs
(
5
)
=
beta
*
alpha
! The real sixth order method from Blanes 2002
!
S_10 6
The real sixth order method from Blanes 2002
call
createsplit
(
splits
(
36
),
11
,
11
)
splits
(
36
)
%
Tcoeffs
(
1
)
=
0.0502627644003922
splits
(
36
)
%
Tcoeffs
(
2
)
=
0.413514300428344
...
...
@@ -475,7 +476,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
36
)
%
Vcoeffs
(
10
)
=
splits
(
36
)
%
Vcoeffs
(
3
)
splits
(
36
)
%
Vcoeffs
(
11
)
=
splits
(
36
)
%
Vcoeffs
(
2
)
! The phi(1,3) method in Hansen 2009
!
CS_3 4
The phi(1,3) method in Hansen 2009
call
createsplit
(
splits
(
37
),
6
,
6
)
alpha
=
cmplx
(
0.3243964040201712
,
0.1345862724908067
,
dp
)
beta
=
1.D0
-
2.D0
*
alpha
...
...
@@ -521,7 +522,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
splits
(
39
)
%
Vcoeffs
(
4
)
=
conjg
(
splits
(
39
)
%
Vcoeffs
(
3
))
splits
(
39
)
%
Vcoeffs
(
5
)
=
conjg
(
splits
(
39
)
%
Vcoeffs
(
2
))
! The hermitian fifth order method
!
CHR_9 5
The hermitian fifth order method
call
createsplit
(
splits
(
40
),
10
,
10
)
splits
(
40
)
%
Tcoeffs
(
1
)
=
CMPLX
(
0.048475520387300861784614942150004872732496275960676605704430
,
&
&
0.004320853677325454041666651926455479652308652682908398349854853
,
dp
)
...
...
@@ -553,7 +554,7 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
! The hermitian sixth order method
!
CHR_15 6
The hermitian sixth order method
call
createsplit
(
splits
(
41
),
16
,
16
)
splits
(
41
)
%
Tcoeffs
(
1
)
=
CMPLX
(
0.095194656759747098611056828381842973876432181037008757210040895
,
&
&
-0.03705839851161959800834474467108207397222103451188259084113901385692675627401
,
dp
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment