Commit 4795e123 authored by Florian Goth's avatar Florian Goth
Browse files

fix more methods

parent 03c5cade
Pipeline #6829 passed with stage
in 1 minute and 25 seconds
......@@ -66,11 +66,12 @@ subroutine init_splittings(split)
splits(2)%Vcoeffs(1) = 1.0
!T-V-T leapfrog
call createsplit(splits(3), 2, 1)
call createsplit(splits(3), 2, 2)
splits(3)%Tcoeffs(1) = 0.5
splits(3)%Tcoeffs(2) = 0.5
splits(3)%Vcoeffs(1) = 1.0
splits(3)%Vcoeffs(1) = 0.0
splits(3)%Vcoeffs(2) = 1.0
!V-T-V leapfrog
call createsplit(splits(4), 2, 2)
......@@ -87,9 +88,9 @@ subroutine init_splittings(split)
splits(5)%Tcoeffs(2) = (1.0 - 2*0.1931833275037836)
splits(5)%Tcoeffs(3) = 0.1931833275037836
splits(5)%Vcoeffs(1) = 0.5
splits(5)%Vcoeffs(1) = 0.0
splits(5)%Vcoeffs(2) = 0.5
splits(5)%Vcoeffs(3) = 0.0
splits(5)%Vcoeffs(3) = 0.5
! S_6 4 from http://personales.upv.es/serblaza/2011EncyclopediaSplittingMethods.pdf
......@@ -166,10 +167,10 @@ subroutine init_splittings(split)
splits(10)%Tcoeffs(3) = splits(10)%Tcoeffs(2)
splits(10)%Tcoeffs(4) = splits(10)%Tcoeffs(1)
splits(10)%Vcoeffs(1) = alpha
splits(10)%Vcoeffs(2) = beta
splits(10)%Vcoeffs(3) = alpha
splits(10)%Vcoeffs(4) = 0.0
splits(10)%Vcoeffs(1) = 0.0
splits(10)%Vcoeffs(2) = alpha
splits(10)%Vcoeffs(3) = beta
splits(10)%Vcoeffs(4) = alpha
! Another variant of symmetric with symmetric by Suzuki
call createsplit(splits(11), 6, 6)
......@@ -270,10 +271,10 @@ subroutine init_splittings(split)
splits(24)%Tcoeffs(3) = splits(24)%Tcoeffs(2)
splits(24)%Tcoeffs(4) = splits(24)%Tcoeffs(1)
splits(24)%Vcoeffs(1) = beta
splits(24)%Vcoeffs(2) = 1.D0 - 2.D0*beta
splits(24)%Vcoeffs(3) = beta
splits(24)%Vcoeffs(4) = 0.D0
splits(24)%Vcoeffs(1) = 0.0
splits(24)%Vcoeffs(2) = beta
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
call createsplit(splits(25), 5, 5)
......@@ -287,21 +288,22 @@ subroutine init_splittings(split)
splits(25)%Tcoeffs(4) = splits(25)%Tcoeffs(2)
splits(25)%Tcoeffs(5) = splits(25)%Tcoeffs(1)
splits(25)%Vcoeffs(1) = chi
splits(25)%Vcoeffs(2) = 1.D0/2.D0 - chi
splits(25)%Vcoeffs(3) = splits(25)%Vcoeffs(2)
splits(25)%Vcoeffs(4) = splits(25)%Vcoeffs(1)
splits(25)%Vcoeffs(5) = 0.D0
splits(25)%Vcoeffs(1) = 0.0
splits(25)%Vcoeffs(2) = chi
splits(25)%Vcoeffs(3) = 1.D0/2.D0 - chi
splits(25)%Vcoeffs(4) = splits(25)%Vcoeffs(3)
splits(25)%Vcoeffs(5) = splits(25)%Vcoeffs(2)
call createsplit(splits(26), 3, 2) !hermitian third order method with entirely complex coefficients
call createsplit(splits(26), 3, 3) !hermitian third order method with entirely complex coefficients, find the paper by Blanes I think...
alpha = CMPLX(1.D0/2.D0, Sqrt(3.D0)/6.D0, kind=kind(0.D0))
beta = 1.D0-alpha
splits(26)%Tcoeffs(1) = alpha/2.D0
splits(26)%Tcoeffs(2) = 1.D0/2.D0
splits(26)%Tcoeffs(3) = conjg(splits(26)%Tcoeffs(1))
splits(26)%Vcoeffs(1) = alpha
splits(26)%Vcoeffs(2) = conjg(alpha)
splits(26)%Vcoeffs(1) = 0.0
splits(26)%Vcoeffs(2) = alpha
splits(26)%Vcoeffs(3) = conjg(alpha)
! The simple Order-4 method from here: http://www.gicas.uji.es/Research/splitting-complex.html
call createsplit(splits(27), 5, 5)
......@@ -312,10 +314,8 @@ subroutine init_splittings(split)
splits(27)%Tcoeffs(4) = CMPLX(4.D0/15, +2.D0/15, kind=kind(0.D0))
splits(27)%Tcoeffs(5) = CMPLX(1.D0/10, -1.D0/30, kind=kind(0.D0))
splits(27)%Vcoeffs(1) = 1.D0/4.D0
splits(27)%Vcoeffs(2) = 1.D0/4.D0
splits(27)%Vcoeffs(3) = 1.D0/4.D0
splits(27)%Vcoeffs(4) = 1.D0/4.D0
splits(27)%Vcoeffs(1) = 0.0
splits(27)%Vcoeffs = 1.D0/4.D0
! The optimized Order-4 method from here: http://www.gicas.uji.es/Research/splitting-complex.html
call createsplit(splits(28), 5, 5)
......@@ -350,6 +350,7 @@ subroutine init_splittings(split)
call createsplit(splits(30), 17, 17)
splits(30)%Vcoeffs = 1.D0/16
splits(30)%Vcoeffs(1) = 0
splits(30)%Tcoeffs(1)=CMPLX(0.0246948760870180646409108649968422478386,-0.0078747955629068770581715779495269421632, dp)
splits(30)%Tcoeffs(2)=CMPLX(0.0638134740213026997793663041882001469632, 0.0353657610341433278046294046497147418127, dp)
splits(30)%Tcoeffs(3)=CMPLX(0.0684250940303164419703970078217446840585,-0.0622622444507486769953325406444475960461, dp)
......@@ -371,8 +372,8 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
! My first own second order method, designed to be a hermitian sequence of Operators
call createsplit(splits(31), 4, 4)
beta = 1.D0/3.D0
splits(31)%Tcoeffs(1) = CMPLX(1.D0/4, -1.D0/6.D0, dp)
splits(31)%Tcoeffs(2) = CMPLX(1.D0/4,1.D0/2.D0, dp)
splits(31)%Tcoeffs(1) = CMPLX(1.D0/4.D0, -1.D0/6.D0, dp)
splits(31)%Tcoeffs(2) = CMPLX(1.D0/4.D0, 1.D0/2.D0, dp)
splits(31)%Tcoeffs(3) = conjg(splits(31)%Tcoeffs(2))
splits(31)%Tcoeffs(4) = conjg(splits(31)%Tcoeffs(1))
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment