Commit c550aeb7 by Florian Goth

### use the notation from the paper in the code

parent feb74df4
Pipeline #7767 passed with stage
in 1 minute and 9 seconds
 ... ... @@ -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) ... ...
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!