mirror of
https://github.com/pfloos/quack
synced 2024-08-29 23:53:46 +02:00
220 lines
5.9 KiB
Fortran
220 lines
5.9 KiB
Fortran
subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_type, &
|
|
maxSCF_CC,thresh_CC,DIIS_CC,n_diis_CC, &
|
|
singlet_manifold,triplet_manifold,TDA, &
|
|
maxSCF_GF,thresh_GF,DIIS_GF,n_diis_GF,linGF,eta_GF,renormGF, &
|
|
maxSCF_GW,thresh_GW,DIIS_GW,n_diis_GW,linGW,eta_GW, &
|
|
COHSEX,SOSEX,TDA_W,G0W,GW0, &
|
|
doACFDT,exchange_kernel,doXBS, &
|
|
BSE,dBSE,dTDA,evDyn, &
|
|
nMC,nEq,nWalk,dt,nPrint,iSeed,doDrift)
|
|
|
|
! Read desired methods
|
|
|
|
implicit none
|
|
|
|
! Input variables
|
|
|
|
integer,intent(out) :: maxSCF_HF
|
|
double precision,intent(out) :: thresh_HF
|
|
logical,intent(out) :: DIIS_HF
|
|
integer,intent(out) :: n_diis_HF
|
|
integer,intent(out) :: guess_type
|
|
integer,intent(out) :: ortho_type
|
|
|
|
integer,intent(out) :: maxSCF_CC
|
|
double precision,intent(out) :: thresh_CC
|
|
logical,intent(out) :: DIIS_CC
|
|
integer,intent(out) :: n_diis_CC
|
|
|
|
logical,intent(out) :: singlet_manifold
|
|
logical,intent(out) :: triplet_manifold
|
|
logical,intent(out) :: TDA
|
|
|
|
integer,intent(out) :: maxSCF_GF
|
|
double precision,intent(out) :: thresh_GF
|
|
logical,intent(out) :: DIIS_GF
|
|
integer,intent(out) :: n_diis_GF
|
|
logical,intent(out) :: linGF
|
|
integer,intent(out) :: renormGF
|
|
double precision,intent(out) :: eta_GF
|
|
|
|
integer,intent(out) :: maxSCF_GW
|
|
double precision,intent(out) :: thresh_GW
|
|
logical,intent(out) :: DIIS_GW
|
|
integer,intent(out) :: n_diis_GW
|
|
logical,intent(out) :: COHSEX
|
|
logical,intent(out) :: SOSEX
|
|
logical,intent(out) :: TDA_W
|
|
logical,intent(out) :: G0W
|
|
logical,intent(out) :: GW0
|
|
logical,intent(out) :: linGW
|
|
double precision,intent(out) :: eta_GW
|
|
|
|
logical,intent(out) :: doACFDT
|
|
logical,intent(out) :: exchange_kernel
|
|
logical,intent(out) :: doXBS
|
|
|
|
logical,intent(out) :: BSE
|
|
logical,intent(out) :: dBSE
|
|
logical,intent(out) :: dTDA
|
|
logical,intent(out) :: evDyn
|
|
|
|
integer,intent(out) :: nMC
|
|
integer,intent(out) :: nEq
|
|
integer,intent(out) :: nWalk
|
|
double precision,intent(out) :: dt
|
|
integer,intent(out) :: nPrint
|
|
integer,intent(out) :: iSeed
|
|
logical,intent(out) :: doDrift
|
|
|
|
! Local variables
|
|
|
|
character(len=1) :: answer1,answer2,answer3,answer4,answer5, &
|
|
answer6,answer7,answer8,answer9,answer10
|
|
|
|
! Open file with method specification
|
|
|
|
open(unit=1,file='input/options')
|
|
|
|
! Read HF options
|
|
|
|
maxSCF_HF = 64
|
|
thresh_HF = 1d-6
|
|
DIIS_HF = .false.
|
|
n_diis_HF = 5
|
|
guess_type = 1
|
|
ortho_type = 1
|
|
|
|
read(1,*)
|
|
read(1,*) maxSCF_HF,thresh_HF,answer1,n_diis_HF,guess_type,ortho_type
|
|
|
|
if(answer1 == 'T') DIIS_HF = .true.
|
|
|
|
if(.not.DIIS_HF) n_diis_HF = 1
|
|
|
|
! Read MPn options
|
|
|
|
read(1,*)
|
|
read(1,*)
|
|
|
|
! Read CC options
|
|
|
|
maxSCF_CC = 64
|
|
thresh_CC = 1d-5
|
|
DIIS_CC = .false.
|
|
n_diis_CC = 5
|
|
|
|
read(1,*)
|
|
read(1,*) maxSCF_CC,thresh_CC,answer1,n_diis_CC
|
|
|
|
if(answer1 == 'T') DIIS_CC = .true.
|
|
|
|
if(.not.DIIS_CC) n_diis_CC = 1
|
|
|
|
! Read excited state options
|
|
|
|
singlet_manifold = .false.
|
|
triplet_manifold = .false.
|
|
TDA = .false.
|
|
|
|
read(1,*)
|
|
read(1,*) answer1,answer2,answer3
|
|
|
|
if(answer1 == 'T') singlet_manifold = .true.
|
|
if(answer2 == 'T') triplet_manifold = .true.
|
|
if(answer3 == 'T') TDA = .true.
|
|
|
|
! Read Green function options
|
|
|
|
maxSCF_GF = 64
|
|
thresh_GF = 1d-5
|
|
DIIS_GF = .false.
|
|
n_diis_GF = 5
|
|
linGF = .false.
|
|
eta_GF = 0d0
|
|
renormGF = 0
|
|
|
|
read(1,*)
|
|
read(1,*) maxSCF_GF,thresh_GF,answer1,n_diis_GF,answer2,eta_GF,renormGF
|
|
|
|
if(answer1 == 'T') DIIS_GF = .true.
|
|
if(answer2 == 'T') linGF = .true.
|
|
if(.not.DIIS_GF) n_diis_GF = 1
|
|
|
|
! Read GW options
|
|
|
|
maxSCF_GW = 64
|
|
thresh_GW = 1d-5
|
|
DIIS_GW = .false.
|
|
n_diis_GW = 5
|
|
linGW = .false.
|
|
eta_GW = 0d0
|
|
COHSEX = .false.
|
|
SOSEX = .false.
|
|
TDA_W = .false.
|
|
G0W = .false.
|
|
GW0 = .false.
|
|
|
|
read(1,*)
|
|
read(1,*) maxSCF_GW,thresh_GW,answer1,n_diis_GW,answer2,eta_GW, &
|
|
answer3,answer4,answer5,answer6,answer7
|
|
|
|
if(answer1 == 'T') DIIS_GW = .true.
|
|
if(answer2 == 'T') linGW = .true.
|
|
if(answer3 == 'T') COHSEX = .true.
|
|
if(answer4 == 'T') SOSEX = .true.
|
|
if(answer5 == 'T') TDA_W = .true.
|
|
if(answer6 == 'T') G0W = .true.
|
|
if(answer7 == 'T') GW0 = .true.
|
|
if(.not.DIIS_GW) n_diis_GW = 1
|
|
|
|
! Options for adiabatic connection
|
|
|
|
doACFDT = .false.
|
|
exchange_kernel = .false.
|
|
doXBS = .false.
|
|
|
|
read(1,*)
|
|
read(1,*) answer1,answer2,answer3
|
|
|
|
if(answer1 == 'T') doACFDT = .true.
|
|
if(answer2 == 'T') exchange_kernel = .true.
|
|
if(answer3 == 'T') doXBS = .true.
|
|
|
|
! Options for dynamical BSE calculations
|
|
|
|
BSE = .false.
|
|
dBSE = .false.
|
|
dTDA = .true.
|
|
evDyn = .false.
|
|
|
|
read(1,*)
|
|
read(1,*) answer1,answer2,answer3,answer4
|
|
|
|
if(answer1 == 'T') BSE = .true.
|
|
if(answer2 == 'T') dBSE = .true.
|
|
if(answer3 == 'F') dTDA = .false.
|
|
if(answer4 == 'T') evDyn = .true.
|
|
|
|
! Read options for MC-MP2: Monte Carlo steps, number of equilibration steps, number of walkers,
|
|
! Monte Carlo time step, frequency of output results, and seed for random number generator
|
|
|
|
nMC = 100000
|
|
nEq = 10000
|
|
nWalk = 10
|
|
dt = 0.3d0
|
|
nPrint = 1000
|
|
iSeed = 0
|
|
doDrift = .false.
|
|
|
|
read(1,*)
|
|
read(1,*) nMC,nEq,nWalk,dt,nPrint,iSeed,answer1
|
|
|
|
if(answer1 == 'T') doDrift = .true.
|
|
|
|
! Close file with options
|
|
|
|
close(unit=1)
|
|
|
|
end subroutine read_options
|