Commit 2ee180f4 authored by Florian Goth's avatar Florian Goth
Browse files

make method 32 configurable by one parameter

parent 3b3d9857
Pipeline #9440 passed with stage
in 56 seconds
......@@ -108,7 +108,7 @@ Program Main
Integer :: Nwrap, NSweep, NBin, NBin_eff,Ltau, NSTM, NT, NT1, NVAR, LOBS_EN, LOBS_ST, NBC, NSW,split,nodes
Integer :: NTAU, NTAU1
Real(Kind=Kind(0.d0)) :: CPU_MAX
Real(Kind=Kind(0.d0)) :: CPU_MAX, param
Character (len=64) :: file1
......@@ -118,8 +118,9 @@ Program Main
#endif
! split is the variable that denotes the chosen splitting
! param is a parameter for the methods
! nodes denotes the number of integration nodes
NAMELIST /VAR_QMC/ Nwrap, NSweep, NBin, Ltau, split, nodes, LOBS_EN, LOBS_ST, CPU_MAX
NAMELIST /VAR_QMC/ Nwrap, NSweep, NBin, Ltau, split, param, nodes, LOBS_EN, LOBS_ST, CPU_MAX
Integer :: Ierr, I,nf, nst, n
......@@ -201,7 +202,7 @@ Program Main
CALL MPI_BCAST(N_Tempering_frequency ,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)
#endif
#endif
call init_splittings(split)
call init_splittings(split, param)
Call Ham_set
Call confin
......
......@@ -40,13 +40,16 @@ end subroutine
!
! This routine initializes the database with the various splittings
!> @ param split this sets the chosensplitting. This is e.g. from a config file.
!> @param myparam a free param
subroutine init_splittings(split)
subroutine init_splittings(split, myparam)
Integer, intent(in) :: split
real(kind = kind(0.D0)), intent(in) :: myparam
integer, parameter :: dp = kind(1.d0)
Integer :: nrofsplits, n, beg, tmpint, i
complex(kind = kind(0.D0)) :: alpha, beta, xi, lam, chi
real(kind = kind(0.D0)) :: ts
chosensplitting = split
nrofsplits = 41
......@@ -391,16 +394,16 @@ splits(30)%Tcoeffs(17) = splits(30)%Tcoeffs(1)
! 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/12.0*CMPLX(6+1/(beta*(beta-1)), -Sqrt((2*beta-1)*(-1+6*beta*(beta-1)**2 ))/(beta*(beta-1)), dp)
splits(32)%Tcoeffs(2) = 1.D0/(12*beta*(beta-1.0))*CMPLX(-1.0, sqrt((-1+6*beta*(beta-1)**2 )/(2*beta-1.0)), dp)
ts = myparam
splits(32)%Tcoeffs(1) = 1.D0/12.0*CMPLX(6+1/(ts*(ts-1)), -Sqrt((2*ts-1)*(-1+6*ts*(ts-1)**2 ))/(ts*(ts-1)), dp)
splits(32)%Tcoeffs(2) = 1.D0/(12*ts*(ts-1.0))*CMPLX(-1.0, sqrt((-1+6*ts*(ts-1)**2 )/(2*ts-1.0)), dp)
splits(32)%Tcoeffs(3) = conjg(splits(32)%Tcoeffs(2))
splits(32)%Tcoeffs(4) = conjg(splits(32)%Tcoeffs(1))
splits(32)%Vcoeffs(1) = 0.D0
splits(32)%Vcoeffs(2) = beta
splits(32)%Vcoeffs(3) = 1.D0 - 2.D0*beta
splits(32)%Vcoeffs(4) = beta
splits(32)%Vcoeffs(2) = ts
splits(32)%Vcoeffs(3) = 1.D0 - 2.D0*ts
splits(32)%Vcoeffs(4) = ts
! the variant with m=2 optimized for large step sizes in Blanes 2014, 2. order
! We try to exploit the trace property and reduce the computational effort.
......
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