mirror of
https://github.com/pfloos/quack
synced 2024-08-24 21:21:46 +02:00
trying to fix diverging version
This commit is contained in:
parent
a8a8218798
commit
545b5fb5e2
@ -1224,6 +1224,183 @@ F 1
|
|||||||
F 1
|
F 1
|
||||||
1 0.4060000 1.0000000
|
1 0.4060000 1.0000000
|
||||||
|
|
||||||
|
POTASSIUM
|
||||||
|
S 23
|
||||||
|
1 2.709796E+07 1.300000E-05
|
||||||
|
2 3.592856E+06 4.100000E-05
|
||||||
|
3 7.222638E+05 1.210000E-04
|
||||||
|
4 1.833976E+05 3.350000E-04
|
||||||
|
5 5.464812E+04 9.160000E-04
|
||||||
|
6 1.830913E+04 2.488000E-03
|
||||||
|
7 6.712501E+03 6.698000E-03
|
||||||
|
8 2.643719E+03 1.765000E-02
|
||||||
|
9 1.103835E+03 4.442700E-02
|
||||||
|
10 4.836777E+02 1.025880E-01
|
||||||
|
11 2.206245E+02 2.038040E-01
|
||||||
|
12 1.041117E+02 3.138510E-01
|
||||||
|
13 5.052749E+01 3.074340E-01
|
||||||
|
14 2.485247E+01 1.398430E-01
|
||||||
|
15 1.128102E+01 1.624100E-02
|
||||||
|
16 5.510166E+00 -2.630000E-04
|
||||||
|
17 2.706914E+00 5.030000E-04
|
||||||
|
18 1.122807E+00 -2.220000E-04
|
||||||
|
19 5.236385E-01 6.500000E-05
|
||||||
|
20 2.355180E-01 -3.600000E-05
|
||||||
|
21 4.157977E-02 1.900000E-05
|
||||||
|
22 2.555456E-02 -2.100000E-05
|
||||||
|
23 1.471495E-02 7.000000E-06
|
||||||
|
S 23
|
||||||
|
1 2.709796E+07 -4.000000E-06
|
||||||
|
2 3.592856E+06 -1.200000E-05
|
||||||
|
3 7.222638E+05 -3.500000E-05
|
||||||
|
4 1.833976E+05 -9.700000E-05
|
||||||
|
5 5.464812E+04 -2.660000E-04
|
||||||
|
6 1.830913E+04 -7.240000E-04
|
||||||
|
7 6.712501E+03 -1.961000E-03
|
||||||
|
8 2.643719E+03 -5.206000E-03
|
||||||
|
9 1.103835E+03 -1.339600E-02
|
||||||
|
10 4.836777E+02 -3.218800E-02
|
||||||
|
11 2.206245E+02 -7.000500E-02
|
||||||
|
12 1.041117E+02 -1.277050E-01
|
||||||
|
13 5.052749E+01 -1.733640E-01
|
||||||
|
14 2.485247E+01 -8.573700E-02
|
||||||
|
15 1.128102E+01 2.571140E-01
|
||||||
|
16 5.510166E+00 5.577460E-01
|
||||||
|
17 2.706914E+00 3.224970E-01
|
||||||
|
18 1.122807E+00 3.251000E-02
|
||||||
|
19 5.236385E-01 -1.916000E-03
|
||||||
|
20 2.355180E-01 1.300000E-03
|
||||||
|
21 4.157977E-02 -4.890000E-04
|
||||||
|
22 2.555456E-02 5.300000E-04
|
||||||
|
23 1.471495E-02 -1.780000E-04
|
||||||
|
S 23
|
||||||
|
1 2.709796E+07 1.000000E-06
|
||||||
|
2 3.592856E+06 4.000000E-06
|
||||||
|
3 7.222638E+05 1.200000E-05
|
||||||
|
4 1.833976E+05 3.200000E-05
|
||||||
|
5 5.464812E+04 8.800000E-05
|
||||||
|
6 1.830913E+04 2.390000E-04
|
||||||
|
7 6.712501E+03 6.480000E-04
|
||||||
|
8 2.643719E+03 1.716000E-03
|
||||||
|
9 1.103835E+03 4.444000E-03
|
||||||
|
10 4.836777E+02 1.066500E-02
|
||||||
|
11 2.206245E+02 2.357300E-02
|
||||||
|
12 1.041117E+02 4.340000E-02
|
||||||
|
13 5.052749E+01 6.202600E-02
|
||||||
|
14 2.485247E+01 3.059000E-02
|
||||||
|
15 1.128102E+01 -1.053100E-01
|
||||||
|
16 5.510166E+00 -3.334020E-01
|
||||||
|
17 2.706914E+00 -2.967080E-01
|
||||||
|
18 1.122807E+00 3.175360E-01
|
||||||
|
19 5.236385E-01 6.707400E-01
|
||||||
|
20 2.355180E-01 2.761620E-01
|
||||||
|
21 4.157977E-02 8.694000E-03
|
||||||
|
22 2.555456E-02 -6.306000E-03
|
||||||
|
23 1.471495E-02 1.866000E-03
|
||||||
|
S 1
|
||||||
|
1 2.555456E-02 1.000000E+00
|
||||||
|
S 22
|
||||||
|
1 3.592856E+06 -1.000000E-06
|
||||||
|
2 7.222638E+05 -2.000000E-06
|
||||||
|
3 1.833976E+05 -6.000000E-06
|
||||||
|
4 5.464812E+04 -1.700000E-05
|
||||||
|
5 1.830913E+04 -4.600000E-05
|
||||||
|
6 6.712501E+03 -1.250000E-04
|
||||||
|
7 2.643719E+03 -3.330000E-04
|
||||||
|
8 1.103835E+03 -8.590000E-04
|
||||||
|
9 4.836777E+02 -2.070000E-03
|
||||||
|
10 2.206245E+02 -4.559000E-03
|
||||||
|
11 1.041117E+02 -8.459000E-03
|
||||||
|
12 5.052749E+01 -1.203100E-02
|
||||||
|
13 2.485247E+01 -6.123000E-03
|
||||||
|
14 1.128102E+01 2.118800E-02
|
||||||
|
15 5.510166E+00 6.841600E-02
|
||||||
|
16 2.706914E+00 6.476500E-02
|
||||||
|
17 1.122807E+00 -8.370900E-02
|
||||||
|
18 5.236385E-01 -1.749990E-01
|
||||||
|
19 2.355180E-01 -2.269470E-01
|
||||||
|
20 4.157977E-02 5.221420E-01
|
||||||
|
21 2.555456E-02 3.354410E-01
|
||||||
|
22 1.471495E-02 2.796490E-01
|
||||||
|
S 1
|
||||||
|
1 1.471495E-02 1.000000E+00
|
||||||
|
S 1
|
||||||
|
1 8.470000E-03 1.000000E+00
|
||||||
|
P 16
|
||||||
|
1 9.533309E+03 8.200000E-05
|
||||||
|
2 1.852081E+03 6.320000E-04
|
||||||
|
3 5.464251E+02 3.611000E-03
|
||||||
|
4 1.966947E+02 1.596000E-02
|
||||||
|
5 7.964112E+01 5.553600E-02
|
||||||
|
6 3.488324E+01 1.484500E-01
|
||||||
|
7 1.604479E+01 2.883660E-01
|
||||||
|
8 7.575632E+00 3.744160E-01
|
||||||
|
9 3.672548E+00 2.533910E-01
|
||||||
|
10 1.771130E+00 6.028300E-02
|
||||||
|
11 8.515199E-01 2.503000E-03
|
||||||
|
12 4.016017E-01 6.680000E-04
|
||||||
|
13 1.851933E-01 -1.490000E-04
|
||||||
|
14 5.523390E-02 4.900000E-05
|
||||||
|
15 2.431085E-02 -3.500000E-05
|
||||||
|
16 1.080339E-02 1.200000E-05
|
||||||
|
P 16
|
||||||
|
1 9.533309E+03 -2.500000E-05
|
||||||
|
2 1.852081E+03 -1.930000E-04
|
||||||
|
3 5.464251E+02 -1.103000E-03
|
||||||
|
4 1.966947E+02 -4.924000E-03
|
||||||
|
5 7.964112E+01 -1.734600E-02
|
||||||
|
6 3.488324E+01 -4.789600E-02
|
||||||
|
7 1.604479E+01 -9.572200E-02
|
||||||
|
8 7.575632E+00 -1.333680E-01
|
||||||
|
9 3.672548E+00 -7.324200E-02
|
||||||
|
10 1.771130E+00 1.654520E-01
|
||||||
|
11 8.515199E-01 4.055900E-01
|
||||||
|
12 4.016017E-01 4.107060E-01
|
||||||
|
13 1.851933E-01 1.733080E-01
|
||||||
|
14 5.523390E-02 1.262400E-02
|
||||||
|
15 2.431085E-02 -3.299000E-03
|
||||||
|
16 1.080339E-02 1.050000E-03
|
||||||
|
P 1
|
||||||
|
1 5.523390E-02 1.000000E+00
|
||||||
|
P 16
|
||||||
|
1 9.533309E+03 3.000000E-06
|
||||||
|
2 1.852081E+03 2.700000E-05
|
||||||
|
3 5.464251E+02 1.520000E-04
|
||||||
|
4 1.966947E+02 6.760000E-04
|
||||||
|
5 7.964112E+01 2.393000E-03
|
||||||
|
6 3.488324E+01 6.595000E-03
|
||||||
|
7 1.604479E+01 1.327600E-02
|
||||||
|
8 7.575632E+00 1.843400E-02
|
||||||
|
9 3.672548E+00 1.010700E-02
|
||||||
|
10 1.771130E+00 -2.662400E-02
|
||||||
|
11 8.515199E-01 -6.080600E-02
|
||||||
|
12 4.016017E-01 -7.470000E-02
|
||||||
|
13 1.851933E-01 -4.857200E-02
|
||||||
|
14 5.523390E-02 2.248180E-01
|
||||||
|
15 2.431085E-02 5.838670E-01
|
||||||
|
16 1.080339E-02 2.978970E-01
|
||||||
|
P 1
|
||||||
|
1 1.080339E-02 1.000000E+00
|
||||||
|
P 1
|
||||||
|
1 4.800000E-03 1.000000E+00
|
||||||
|
D 1
|
||||||
|
1 5.516013E-02 1.000000E+00
|
||||||
|
D 6
|
||||||
|
1 5.670903E+00 8.130000E-03
|
||||||
|
2 1.459042E+00 2.288600E-02
|
||||||
|
3 5.431827E-01 4.807800E-02
|
||||||
|
4 1.346875E-01 7.257100E-02
|
||||||
|
5 5.516013E-02 2.382010E-01
|
||||||
|
6 1.501876E-02 8.262780E-01
|
||||||
|
D 1
|
||||||
|
1 1.501876E-02 1.000000E+00
|
||||||
|
D 1
|
||||||
|
1 6.010000E-03 1.000000E+00
|
||||||
|
F 1
|
||||||
|
1 8.493750E-02 1.000000E+00
|
||||||
|
F 1
|
||||||
|
1 3.398000E-02 1.000000E+00
|
||||||
|
|
||||||
SCANDIUM
|
SCANDIUM
|
||||||
S 20
|
S 20
|
||||||
1 2.715278E+06 8.147221E-06
|
1 2.715278E+06 8.147221E-06
|
||||||
|
@ -15,5 +15,5 @@
|
|||||||
# G0W0* evGW* qsGW* SRG-qsGW ufG0W0 ufGW
|
# G0W0* evGW* qsGW* SRG-qsGW ufG0W0 ufGW
|
||||||
T F F F F F
|
T F F F F F
|
||||||
# G0T0 evGT qsGT ehG0T0
|
# G0T0 evGT qsGT ehG0T0
|
||||||
F F F T
|
F F F F
|
||||||
# * unrestricted version available
|
# * unrestricted version available
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# GF: maxSCF thresh DIIS n_diis lin eta renorm reg
|
# GF: maxSCF thresh DIIS n_diis lin eta renorm reg
|
||||||
256 0.00001 T 5 T 0.0 0 F
|
256 0.00001 T 5 T 0.0 0 F
|
||||||
# GW: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W reg
|
# GW: maxSCF thresh DIIS n_diis lin eta COHSEX SOSEX TDA_W reg
|
||||||
256 0.00001 T 5 T 0.0 F F F F
|
256 0.00001 T 5 F 1000 F F F T
|
||||||
# GT: maxSCF thresh DIIS n_diis lin eta TDA_T reg
|
# GT: maxSCF thresh DIIS n_diis lin eta TDA_T reg
|
||||||
10 0.00001 T 5 T 0.0 F F
|
10 0.00001 T 5 T 0.0 F F
|
||||||
# ACFDT: AC Kx XBS
|
# ACFDT: AC Kx XBS
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
1 1 1 1 1.
|
|
||||||
2 2 2 2 1.
|
|
@ -1,2 +0,0 @@
|
|||||||
1 2 -1.0
|
|
||||||
2 1 -1.0
|
|
@ -1,2 +0,0 @@
|
|||||||
1 1 0.0
|
|
||||||
2 2 0.0
|
|
@ -1,2 +0,0 @@
|
|||||||
1 1 1.0
|
|
||||||
2 2 1.0
|
|
@ -1,4 +0,0 @@
|
|||||||
2
|
|
||||||
|
|
||||||
H 0. 0. 0.
|
|
||||||
H 0. 0. 1.4
|
|
@ -35,6 +35,7 @@ subroutine G0F2(BSE,TDA,dBSE,dTDA,evDyn,singlet,triplet,linearize,eta,regularize
|
|||||||
double precision :: Ec
|
double precision :: Ec
|
||||||
double precision :: EcBSE(nspin)
|
double precision :: EcBSE(nspin)
|
||||||
double precision,allocatable :: eGF2(:)
|
double precision,allocatable :: eGF2(:)
|
||||||
|
double precision,allocatable :: eGF2lin(:)
|
||||||
double precision,allocatable :: SigC(:)
|
double precision,allocatable :: SigC(:)
|
||||||
double precision,allocatable :: Z(:)
|
double precision,allocatable :: Z(:)
|
||||||
|
|
||||||
@ -48,7 +49,7 @@ subroutine G0F2(BSE,TDA,dBSE,dTDA,evDyn,singlet,triplet,linearize,eta,regularize
|
|||||||
|
|
||||||
! Memory allocation
|
! Memory allocation
|
||||||
|
|
||||||
allocate(SigC(nBas),Z(nBas),eGF2(nBas))
|
allocate(SigC(nBas),Z(nBas),eGF2(nBas),eGF2lin(nBas))
|
||||||
|
|
||||||
if(linearize) then
|
if(linearize) then
|
||||||
|
|
||||||
@ -69,13 +70,19 @@ subroutine G0F2(BSE,TDA,dBSE,dTDA,evDyn,singlet,triplet,linearize,eta,regularize
|
|||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
eGF2lin(:) = eHF(:) + Z(:)*SigC(:)
|
||||||
|
|
||||||
if(linearize) then
|
if(linearize) then
|
||||||
|
|
||||||
eGF2(:) = eHF(:) + Z(:)*SigC(:)
|
eGF2(:) = eGF2lin(:)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
|
write(*,*) ' *** Quasiparticle energies obtained by root search (experimental) *** '
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
call QP_graph_GF2(eta,nBas,nC,nO,nV,nR,nS,eHF,eGF2lin,ERI,eGF2)
|
||||||
|
|
||||||
eGF2(:) = eHF(:) + SigC(:)
|
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ subroutine G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_T,TDA,dBSE,dTDA,evDyn,ppBS
|
|||||||
double precision,allocatable :: SigX(:)
|
double precision,allocatable :: SigX(:)
|
||||||
double precision,allocatable :: SigT(:)
|
double precision,allocatable :: SigT(:)
|
||||||
double precision,allocatable :: Z(:)
|
double precision,allocatable :: Z(:)
|
||||||
|
double precision,allocatable :: eGTlin(:)
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -91,7 +92,7 @@ subroutine G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_T,TDA,dBSE,dTDA,evDyn,ppBS
|
|||||||
Om1aa(nVVaa),X1aa(nVVaa,nVVaa),Y1aa(nOOaa,nVVaa), &
|
Om1aa(nVVaa),X1aa(nVVaa,nVVaa),Y1aa(nOOaa,nVVaa), &
|
||||||
Om2aa(nOOaa),X2aa(nVVaa,nOOaa),Y2aa(nOOaa,nOOaa), &
|
Om2aa(nOOaa),X2aa(nVVaa,nOOaa),Y2aa(nOOaa,nOOaa), &
|
||||||
rho1aa(nBas,nBas,nVVaa),rho2aa(nBas,nBas,nOOaa), &
|
rho1aa(nBas,nBas,nVVaa),rho2aa(nBas,nBas,nOOaa), &
|
||||||
SigX(nBas),SigT(nBas),Z(nBas))
|
SigX(nBas),SigT(nBas),Z(nBas),eGTlin(nBas))
|
||||||
|
|
||||||
!----------------------------------------------
|
!----------------------------------------------
|
||||||
! alpha-beta block
|
! alpha-beta block
|
||||||
@ -175,13 +176,22 @@ subroutine G0T0(doACFDT,exchange_kernel,doXBS,BSE,TDA_T,TDA,dBSE,dTDA,evDyn,ppBS
|
|||||||
! Solve the quasi-particle equation
|
! Solve the quasi-particle equation
|
||||||
!----------------------------------------------
|
!----------------------------------------------
|
||||||
|
|
||||||
|
eGTlin(:) = 0d0
|
||||||
|
eGTlin(:) = eHF(:) + Z(:)*(SigX(:) + SigT(:) - Vxc(:))
|
||||||
|
|
||||||
if(linearize) then
|
if(linearize) then
|
||||||
|
|
||||||
eGT(:) = eHF(:) + Z(:)*(SigX(:) + SigT(:) - Vxc(:))
|
write(*,*) ' *** Quasiparticle energies obtained by linearization *** '
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
eGT(:) = eGTlin(:)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
eGT(:) = eHF(:) + SigX(:) + SigT(:) - Vxc(:)
|
write(*,*) ' *** Quasiparticle energies obtained by root search (experimental) *** '
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
call QP_graph_GT(eta,nBas,nC,nO,nV,nR,nOOaa,nVVaa,eHF,Om1aa,rho1aa,Om2aa,rho2aa,eGTlin,eGT)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
@ -170,11 +170,11 @@ subroutine G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,BSE2,TDA_W,TDA,dBSE,dTD
|
|||||||
write(*,*) ' *** Quasiparticle energies obtained by root search (experimental) *** '
|
write(*,*) ' *** Quasiparticle energies obtained by root search (experimental) *** '
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
call QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,OmRPA,rho_RPA,eGWlin,eGW)
|
call QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,OmRPA,rho_RPA,eGWlin,eGW,regularize)
|
||||||
|
|
||||||
! Find all the roots of the QP equation if necessary
|
! Find all the roots of the QP equation if necessary
|
||||||
|
|
||||||
! call QP_roots(nBas,nC,nO,nV,nR,nS,eta,eHF,Omega,rho,eGWlin)
|
! call QP_roots(nBas,nC,nO,nV,nR,nS,eta,eHF,OmRPA,rho_RPA,eGWlin)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ subroutine G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,BSE,BSE2,TDA_W,TDA,dBSE,dTD
|
|||||||
|
|
||||||
! Plot stuff
|
! Plot stuff
|
||||||
|
|
||||||
! call plot_GW(nBas,nC,nO,nV,nR,nS,eHF,eGW,OmRPA,rho_RPA)
|
! call plot_GW(nBas,nC,nO,nV,nR,nS,eHF,eGW,OmRPA,rho_RPA)
|
||||||
|
|
||||||
! Perform BSE calculation
|
! Perform BSE calculation
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,Omega,rho,eGWlin,eGW)
|
subroutine QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,Omega,rho,eGWlin,eGW,regularize)
|
||||||
|
|
||||||
! Compute the graphical solution of the QP equation
|
! Compute the graphical solution of the QP equation
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ subroutine QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,Omega,rho,eGWlin,eGW)
|
|||||||
double precision,intent(in) :: rho(nBas,nBas,nS)
|
double precision,intent(in) :: rho(nBas,nBas,nS)
|
||||||
|
|
||||||
double precision,intent(in) :: eGWlin(nBas)
|
double precision,intent(in) :: eGWlin(nBas)
|
||||||
|
logical,intent(in) :: regularize
|
||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
@ -54,8 +55,8 @@ subroutine QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,Omega,rho,eGWlin,eGW)
|
|||||||
|
|
||||||
nIt = nIt + 1
|
nIt = nIt + 1
|
||||||
|
|
||||||
sigC = SigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,eHF,Omega,rho)
|
sigC = SigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,eHF,Omega,rho,regularize)
|
||||||
dsigC = dSigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,eHF,Omega,rho)
|
dsigC = dSigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,eHF,Omega,rho,regularize)
|
||||||
f = w - eHF(p) - SigX(p) - sigC + Vxc(p)
|
f = w - eHF(p) - SigX(p) - sigC + Vxc(p)
|
||||||
df = 1d0 - dsigC
|
df = 1d0 - dsigC
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ subroutine QP_roots(nBas,nC,nO,nV,nR,nS,eta,eHF,Omega,rho,eGW)
|
|||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: i,j,a,b,x,jb,g
|
integer :: i,j,a,b,x,jb,g
|
||||||
integer,parameter :: nGrid = 100000
|
integer,parameter :: nGrid = 1000000
|
||||||
double precision,parameter :: wmin = -50d0
|
double precision,parameter :: wmin = -50d0
|
||||||
double precision,parameter :: wmax = +50d0
|
double precision,parameter :: wmax = +50d0
|
||||||
double precision :: dw
|
double precision :: dw
|
||||||
|
@ -72,7 +72,7 @@ subroutine SRG_qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,BSE,BSE
|
|||||||
double precision,external :: trace_matrix
|
double precision,external :: trace_matrix
|
||||||
double precision :: dipole(ncart)
|
double precision :: dipole(ncart)
|
||||||
|
|
||||||
logical :: print_W = .false.
|
logical :: print_W = .true.
|
||||||
double precision,allocatable :: error_diis(:,:)
|
double precision,allocatable :: error_diis(:,:)
|
||||||
double precision,allocatable :: F_diis(:,:)
|
double precision,allocatable :: F_diis(:,:)
|
||||||
double precision,allocatable :: OmRPA(:)
|
double precision,allocatable :: OmRPA(:)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
double precision function SigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho)
|
double precision function SigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho,regularize)
|
||||||
|
|
||||||
! Compute diagonal of the correlation part of the self-energy
|
! Compute diagonal of the correlation part of the self-energy
|
||||||
|
|
||||||
@ -19,32 +19,66 @@ double precision function SigmaC(p,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho)
|
|||||||
double precision,intent(in) :: e(nBas)
|
double precision,intent(in) :: e(nBas)
|
||||||
double precision,intent(in) :: Omega(nS)
|
double precision,intent(in) :: Omega(nS)
|
||||||
double precision,intent(in) :: rho(nBas,nBas,nS)
|
double precision,intent(in) :: rho(nBas,nBas,nS)
|
||||||
|
logical,intent(in) :: regularize
|
||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: i,a,jb
|
integer :: i,a,jb
|
||||||
double precision :: eps
|
double precision :: eps
|
||||||
|
double precision :: Dpijb,Dpajb
|
||||||
|
|
||||||
! Initialize
|
! Initialize
|
||||||
|
|
||||||
SigmaC = 0d0
|
SigmaC = 0d0
|
||||||
|
|
||||||
! Occupied part of the correlation self-energy
|
|
||||||
|
|
||||||
do i=nC+1,nO
|
if (regularize) then
|
||||||
do jb=1,nS
|
! Occupied part of the correlation self-energy
|
||||||
eps = w - e(i) + Omega(jb)
|
do i=nC+1,nO
|
||||||
SigmaC = SigmaC + 2d0*rho(p,i,jb)**2*eps/(eps**2 + eta**2)
|
do jb=1,nS
|
||||||
enddo
|
eps = w - e(i) + Omega(jb)
|
||||||
enddo
|
Dpijb = e(p) - e(i) + Omega(jb)
|
||||||
|
SigmaC = SigmaC + 2d0*rho(p,i,jb)**2*(1d0-exp(-2d0*eta*Dpijb*Dpijb))/eps
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
! Virtual part of the correlation self-energy
|
||||||
|
do a=nO+1,nBas-nR
|
||||||
|
do jb=1,nS
|
||||||
|
eps = w - e(a) - Omega(jb)
|
||||||
|
Dpajb = e(p) - e(a) - Omega(jb)
|
||||||
|
SigmaC = SigmaC + 2d0*rho(p,a,jb)**2*(1d0-exp(-2d0*eta*Dpajb*Dpajb))/eps
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
! Virtual part of the correlation self-energy
|
! We add the static SRG term in the self-energy directly
|
||||||
|
! do i=nC+1,nO
|
||||||
do a=nO+1,nBas-nR
|
! do jb=1,nS
|
||||||
do jb=1,nS
|
! Dpijb = e(p) - e(i) + Omega(jb)
|
||||||
eps = w - e(a) - Omega(jb)
|
! SigmaC = SigmaC + 2d0*rho(p,i,jb)**2*(exp(-2d0*eta*Dpijb*Dpijb)/Dpijb)
|
||||||
SigmaC = SigmaC + 2d0*rho(p,a,jb)**2*eps/(eps**2 + eta**2)
|
! enddo
|
||||||
enddo
|
! enddo
|
||||||
enddo
|
! do a=nO+1,nBas-nR
|
||||||
|
! do jb=1,nS
|
||||||
|
! Dpajb = e(p) - e(a) - Omega(jb)
|
||||||
|
! SigmaC = SigmaC + 2d0*rho(p,a,jb)**2*(exp(-2d0*eta*Dpajb*Dpajb)/Dpajb)
|
||||||
|
! enddo
|
||||||
|
! enddo
|
||||||
|
|
||||||
|
else
|
||||||
|
! Occupied part of the correlation self-energy
|
||||||
|
do i=nC+1,nO
|
||||||
|
do jb=1,nS
|
||||||
|
eps = w - e(i) + Omega(jb)
|
||||||
|
SigmaC = SigmaC + 2d0*rho(p,i,jb)**2*eps/(eps**2 + eta**2)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
! Virtual part of the correlation self-energy
|
||||||
|
do a=nO+1,nBas-nR
|
||||||
|
do jb=1,nS
|
||||||
|
eps = w - e(a) - Omega(jb)
|
||||||
|
SigmaC = SigmaC + 2d0*rho(p,a,jb)**2*eps/(eps**2 + eta**2)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
end if
|
||||||
|
|
||||||
end function SigmaC
|
end function SigmaC
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
double precision function dSigmaC(x,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho)
|
double precision function dSigmaC(x,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho,regularize)
|
||||||
|
|
||||||
! Compute the derivative of the correlation part of the self-energy
|
! Compute the derivative of the correlation part of the self-energy
|
||||||
|
|
||||||
@ -19,40 +19,60 @@ double precision function dSigmaC(x,w,eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho)
|
|||||||
double precision,intent(in) :: e(nBas)
|
double precision,intent(in) :: e(nBas)
|
||||||
double precision,intent(in) :: Omega(nS)
|
double precision,intent(in) :: Omega(nS)
|
||||||
double precision,intent(in) :: rho(nBas,nBas,nS)
|
double precision,intent(in) :: rho(nBas,nBas,nS)
|
||||||
|
logical,intent(in) :: regularize
|
||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: i,j,a,b,p,jb
|
integer :: i,j,a,b,p,jb
|
||||||
double precision :: eps
|
double precision :: eps
|
||||||
|
double precision :: Dpijb,Dpajb
|
||||||
|
|
||||||
! Initialize
|
! Initialize
|
||||||
|
|
||||||
dSigmaC = 0d0
|
dSigmaC = 0d0
|
||||||
|
|
||||||
! Occupied part of the correlation self-energy
|
if (regularize) then
|
||||||
|
! Occupied part of the correlation self-energy
|
||||||
|
do i=nC+1,nO
|
||||||
|
do jb=1,nS
|
||||||
|
eps = w - e(i) + Omega(jb)
|
||||||
|
Dpijb = e(p) - e(i) + Omega(jb)
|
||||||
|
dSigmaC = dSigmaC - 2d0*rho(p,i,jb)**2*(1d0-exp(-2*eta*Dpijb*Dpijb))/(eps**2)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
! Virtual part of the correlation self-energy
|
||||||
|
do a=nO+1,nBas-nR
|
||||||
|
do jb=1,nS
|
||||||
|
eps = w - e(a) - Omega(jb)
|
||||||
|
Dpajb = e(p) - e(a) - Omega(jb)
|
||||||
|
dSigmaC = dSigmaC - 2d0*rho(p,a,jb)**2*(1d0-exp(-2*eta*Dpajb*Dpajb))/(eps**2)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
do i=nC+1,nO
|
else
|
||||||
jb = 0
|
! Occupied part of the correlation self-energy
|
||||||
do j=nC+1,nO
|
do i=nC+1,nO
|
||||||
do b=nO+1,nBas-nR
|
jb = 0
|
||||||
jb = jb + 1
|
do j=nC+1,nO
|
||||||
eps = w - e(i) + Omega(jb)
|
do b=nO+1,nBas-nR
|
||||||
dSigmaC = dSigmaC - 2d0*rho(x,i,jb)**2*(eps**2 - eta**2)/(eps**2 + eta**2)**2
|
jb = jb + 1
|
||||||
enddo
|
eps = w - e(i) + Omega(jb)
|
||||||
enddo
|
dSigmaC = dSigmaC - 2d0*rho(x,i,jb)**2*(eps**2 - eta**2)/(eps**2 + eta**2)**2
|
||||||
enddo
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
! Virtual part of the correlation self-energy
|
! Virtual part of the correlation self-energy
|
||||||
|
do a=nO+1,nBas-nR
|
||||||
do a=nO+1,nBas-nR
|
jb = 0
|
||||||
jb = 0
|
do j=nC+1,nO
|
||||||
do j=nC+1,nO
|
do b=nO+1,nBas-nR
|
||||||
do b=nO+1,nBas-nR
|
jb = jb + 1
|
||||||
jb = jb + 1
|
eps = w - e(a) - Omega(jb)
|
||||||
eps = w - e(a) - Omega(jb)
|
dSigmaC = dSigmaC - 2d0*rho(x,a,jb)**2*(eps**2 - eta**2)/(eps**2 + eta**2)**2
|
||||||
dSigmaC = dSigmaC - 2d0*rho(x,a,jb)**2*(eps**2 - eta**2)/(eps**2 + eta**2)**2
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
end if
|
||||||
|
|
||||||
end function dSigmaC
|
end function dSigmaC
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,BSE2,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE, &
|
subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,BSE2,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE, &
|
||||||
singlet,triplet,eta,regularize,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int,PHF,cHF,eHF,Vxc,eG0W0)
|
singlet,triplet,linearize,eta,regularize,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int,PHF,cHF,eHF,Vxc,eG0W0)
|
||||||
|
|
||||||
! Perform self-consistent eigenvalue-only GW calculation
|
! Perform self-consistent eigenvalue-only GW calculation
|
||||||
|
|
||||||
@ -27,6 +27,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
logical,intent(in) :: ppBSE
|
logical,intent(in) :: ppBSE
|
||||||
logical,intent(in) :: singlet
|
logical,intent(in) :: singlet
|
||||||
logical,intent(in) :: triplet
|
logical,intent(in) :: triplet
|
||||||
|
logical,intent(in) :: linearize
|
||||||
double precision,intent(in) :: eta
|
double precision,intent(in) :: eta
|
||||||
logical,intent(in) :: regularize
|
logical,intent(in) :: regularize
|
||||||
|
|
||||||
@ -51,6 +52,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
integer :: ispin
|
integer :: ispin
|
||||||
integer :: nSCF
|
integer :: nSCF
|
||||||
integer :: n_diis
|
integer :: n_diis
|
||||||
|
integer :: i,a,jb,p
|
||||||
double precision :: rcond
|
double precision :: rcond
|
||||||
double precision :: Conv
|
double precision :: Conv
|
||||||
double precision :: EcRPA
|
double precision :: EcRPA
|
||||||
@ -59,6 +61,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
double precision :: EcppBSE(nspin)
|
double precision :: EcppBSE(nspin)
|
||||||
double precision :: EcGM
|
double precision :: EcGM
|
||||||
double precision :: alpha
|
double precision :: alpha
|
||||||
|
double precision :: Dpijb,Dpajb
|
||||||
double precision,allocatable :: error_diis(:,:)
|
double precision,allocatable :: error_diis(:,:)
|
||||||
double precision,allocatable :: e_diis(:,:)
|
double precision,allocatable :: e_diis(:,:)
|
||||||
double precision,allocatable :: eGW(:)
|
double precision,allocatable :: eGW(:)
|
||||||
@ -70,6 +73,8 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
double precision,allocatable :: XpY_RPA(:,:)
|
double precision,allocatable :: XpY_RPA(:,:)
|
||||||
double precision,allocatable :: XmY_RPA(:,:)
|
double precision,allocatable :: XmY_RPA(:,:)
|
||||||
double precision,allocatable :: rho_RPA(:,:,:)
|
double precision,allocatable :: rho_RPA(:,:,:)
|
||||||
|
|
||||||
|
double precision,allocatable :: eGWlin(:)
|
||||||
|
|
||||||
integer :: nBas2
|
integer :: nBas2
|
||||||
integer :: nC2
|
integer :: nC2
|
||||||
@ -117,7 +122,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
! Memory allocation
|
! Memory allocation
|
||||||
|
|
||||||
allocate(eGW(nBas),eOld(nBas),Z(nBas),SigX(nBas),SigC(nBas),OmRPA(nS),XpY_RPA(nS,nS),XmY_RPA(nS,nS), &
|
allocate(eGW(nBas),eOld(nBas),Z(nBas),SigX(nBas),SigC(nBas),OmRPA(nS),XpY_RPA(nS,nS),XmY_RPA(nS,nS), &
|
||||||
rho_RPA(nBas,nBas,nS),error_diis(nBas,max_diis),e_diis(nBas,max_diis))
|
rho_RPA(nBas,nBas,nS),error_diis(nBas,max_diis),e_diis(nBas,max_diis),eGWlin(nBas))
|
||||||
|
|
||||||
! Compute the exchange part of the self-energy
|
! Compute the exchange part of the self-energy
|
||||||
|
|
||||||
@ -136,6 +141,8 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
Z(:) = 1d0
|
Z(:) = 1d0
|
||||||
rcond = 0d0
|
rcond = 0d0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Main loop
|
! Main loop
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -156,7 +163,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
if(regularize) then
|
if(regularize) then
|
||||||
|
|
||||||
call regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,nS,eGW,OmRPA,rho_RPA,EcGM,SigC)
|
call regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,nS,eGW,OmRPA,rho_RPA,EcGM,SigC)
|
||||||
call regularized_renormalization_factor(COHSEX,eta,nBas,nC,nO,nV,nR,nS,eGW,OmRPA,rho_RPA,Z)
|
call renormalization_factor_SRG(eta,nBas,nC,nO,nV,nR,nS,eGW,OmRPA,rho_RPA,Z)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
@ -167,7 +174,25 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,BSE,
|
|||||||
|
|
||||||
! Solve the quasi-particle equation
|
! Solve the quasi-particle equation
|
||||||
|
|
||||||
eGW(:) = eHF(:) + SigX(:) + SigC(:) - Vxc(:)
|
eGWlin(:) = eHF(:) + SigX(:) + SigC(:) - Vxc(:)
|
||||||
|
|
||||||
|
! Linearized or graphical solution?
|
||||||
|
|
||||||
|
if(linearize) then
|
||||||
|
|
||||||
|
write(*,*) ' *** Quasiparticle energies obtained by linearization *** '
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
eGW(:) = eGWlin(:)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
write(*,*) ' *** Quasiparticle energies obtained by root search (experimental) *** '
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
call QP_graph(nBas,nC,nO,nV,nR,nS,eta,eHF,SigX,Vxc,OmRPA,rho_RPA,eGWlin,eGW,regularize)
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
! Convergence criteria
|
! Convergence criteria
|
||||||
|
|
||||||
|
@ -22,10 +22,7 @@ subroutine regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,
|
|||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: i,a,p,q,jb
|
integer :: i,a,p,q,jb
|
||||||
double precision :: eps
|
double precision :: Dpijb,Dpajb
|
||||||
|
|
||||||
double precision :: kappa
|
|
||||||
double precision :: fk
|
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -36,12 +33,6 @@ subroutine regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,
|
|||||||
|
|
||||||
SigC(:) = 0d0
|
SigC(:) = 0d0
|
||||||
|
|
||||||
!-----------------------------------------!
|
|
||||||
! Parameters for regularized calculations !
|
|
||||||
!-----------------------------------------!
|
|
||||||
|
|
||||||
kappa = 1d0
|
|
||||||
|
|
||||||
!-----------------------------
|
!-----------------------------
|
||||||
! COHSEX static self-energy
|
! COHSEX static self-energy
|
||||||
!-----------------------------
|
!-----------------------------
|
||||||
@ -86,9 +77,8 @@ subroutine regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,
|
|||||||
do p=nC+1,nBas-nR
|
do p=nC+1,nBas-nR
|
||||||
do i=nC+1,nO
|
do i=nC+1,nO
|
||||||
do jb=1,nS
|
do jb=1,nS
|
||||||
eps = e(p) - e(i) + Omega(jb)
|
Dpijb = e(p) - e(i) + Omega(jb)
|
||||||
fk = (1d0 - exp(-2d0*eps**2/kappa**2))/eps
|
SigC(p) = SigC(p) + 2d0*rho(p,i,jb)**2*(1d0 - exp(-2d0*eta*Dpijb*Dpijb))/Dpijb
|
||||||
SigC(p) = SigC(p) + 2d0*rho(p,i,jb)**2*fk
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
@ -98,9 +88,8 @@ subroutine regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,
|
|||||||
do p=nC+1,nBas-nR
|
do p=nC+1,nBas-nR
|
||||||
do a=nO+1,nBas-nR
|
do a=nO+1,nBas-nR
|
||||||
do jb=1,nS
|
do jb=1,nS
|
||||||
eps = e(p) - e(a) - Omega(jb)
|
Dpajb = e(p) - e(a) - Omega(jb)
|
||||||
fk = (1d0 - exp(-2d0*eps**2/kappa**2))/eps
|
SigC(p) = SigC(p) + 2d0*rho(p,a,jb)**2*(1d0 - exp(-2d0*eta*Dpajb*Dpajb))/Dpajb
|
||||||
SigC(p) = SigC(p) + 2d0*rho(p,a,jb)**2*fk
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
@ -111,9 +100,7 @@ subroutine regularized_self_energy_correlation_diag(COHSEX,eta,nBas,nC,nO,nV,nR,
|
|||||||
do i=nC+1,nO
|
do i=nC+1,nO
|
||||||
do a=nO+1,nBas-nR
|
do a=nO+1,nBas-nR
|
||||||
do jb=1,nS
|
do jb=1,nS
|
||||||
eps = e(a) - e(i) + Omega(jb)
|
EcGM = EcGM - 4d0*rho(a,i,jb)**2
|
||||||
fk = (1d0 - exp(-2d0*eps**2/kappa**2))/eps
|
|
||||||
EcGM = EcGM - 4d0*rho(a,i,jb)**2*fk
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
@ -20,8 +20,8 @@ subroutine renormalization_factor_SRG(eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho,Z)
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
integer :: p,i,a,jb
|
integer :: p,i,a,m
|
||||||
double precision :: eps
|
double precision :: Dpim,Dpam
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -30,9 +30,31 @@ subroutine renormalization_factor_SRG(eta,nBas,nC,nO,nV,nR,nS,e,Omega,rho,Z)
|
|||||||
! Initialize
|
! Initialize
|
||||||
|
|
||||||
Z(:) = 0d0
|
Z(:) = 0d0
|
||||||
|
|
||||||
|
do p=nC+1,nBas-nR
|
||||||
|
do i=nC+1,nO
|
||||||
|
do m=1,nS
|
||||||
|
Dpim = e(p) - e(i) + Omega(m)
|
||||||
|
Z(p) = Z(p) - 2d0*rho(p,i,m)**2*(1d0-dexp(-2d0*eta*Dpim*Dpim))/Dpim**2
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Virtual part of the correlation self-energy
|
||||||
|
|
||||||
|
do p=nC+1,nBas-nR
|
||||||
|
do a=nO+1,nBas-nR
|
||||||
|
do m=1,nS
|
||||||
|
Dpam = e(p) - e(a) - Omega(m)
|
||||||
|
Z(p) = Z(p) - 2d0*rho(p,a,m)**2*(1d0-dexp(-2d0*eta*Dpam*Dpam))/Dpam**2
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
! Compute renormalization factor from derivative of SigC
|
! Compute renormalization factor from derivative of SigC
|
||||||
|
|
||||||
Z(:) = 1d0/(1d0 - Z(:))
|
Z(:) = 1d0/(1d0 - Z(:))
|
||||||
|
|
||||||
end subroutine renormalization_factor_SRG
|
end subroutine renormalization_factor_SRG
|
||||||
|
@ -102,7 +102,7 @@ subroutine MOM(maxSCF,thresh,max_diis,nBas,nO,S,T,V,Hc,ERI,X,ENuc,ERHF,c,e,P)
|
|||||||
call Coulomb_matrix_AO_basis(nBas,P,ERI,J)
|
call Coulomb_matrix_AO_basis(nBas,P,ERI,J)
|
||||||
call exchange_matrix_AO_basis(nBas,P,ERI,K)
|
call exchange_matrix_AO_basis(nBas,P,ERI,K)
|
||||||
|
|
||||||
F(:,:) = Hc(:,:) + J(:,:) + K(:,:)
|
F(:,:) = Hc(:,:) + J(:,:) + 0.5*K(:,:)
|
||||||
|
|
||||||
! Check convergence
|
! Check convergence
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ subroutine MOM_overlap(nBas,nO,S,cG,c,ON)
|
|||||||
|
|
||||||
do i=1,nBas
|
do i=1,nBas
|
||||||
do j=1,nBas
|
do j=1,nBas
|
||||||
pOv(j) = pOv(j) + ON(i)*Ov(i,j)**2
|
pOv(j) = pOv(j) + Ov(i,j)**2
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
@ -41,7 +41,8 @@ subroutine MOM_overlap(nBas,nO,S,cG,c,ON)
|
|||||||
ploc = maxloc(pOv,nBas)
|
ploc = maxloc(pOv,nBas)
|
||||||
ON(ploc) = 1d0
|
ON(ploc) = 1d0
|
||||||
pOv(ploc) = 0d0
|
pOv(ploc) = 0d0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
! print*,'--- Occupation numbers ---'
|
! print*,'--- Occupation numbers ---'
|
||||||
! call matout(nBas,1,ON)
|
! call matout(nBas,1,ON)
|
||||||
|
@ -14,7 +14,7 @@ subroutine print_excitation(method,ispin,nS,Omega)
|
|||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
character*14 :: spin_manifold
|
character*14 :: spin_manifold
|
||||||
integer,parameter :: maxS = 20
|
integer,parameter :: maxS = 50
|
||||||
integer :: ia
|
integer :: ia
|
||||||
|
|
||||||
if(ispin == 1) spin_manifold = 'singlet'
|
if(ispin == 1) spin_manifold = 'singlet'
|
||||||
|
@ -335,7 +335,7 @@ program QuAcK
|
|||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
call RMOM(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
call MOM(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,nNuc,ZNuc,rNuc,ENuc, &
|
||||||
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int_AO,X,ERHF,eHF,cHF,PHF,Vxc)
|
nBas,nO,S,T,V,Hc,ERI_AO,dipole_int_AO,X,ERHF,eHF,cHF,PHF,Vxc)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
@ -1017,7 +1017,7 @@ program QuAcK
|
|||||||
else
|
else
|
||||||
|
|
||||||
call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX, &
|
call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX, &
|
||||||
BSE,BSE2,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet,eta_GW,regGW, &
|
BSE,BSE2,TDA_W,TDA,dBSE,dTDA,evDyn,ppBSE,singlet,triplet,linGW,eta_GW,regGW, &
|
||||||
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_AO,ERI_MO,dipole_int_MO,PHF,cHF,eHF,Vxc,eG0W0)
|
||||||
end if
|
end if
|
||||||
call cpu_time(end_evGW)
|
call cpu_time(end_evGW)
|
||||||
@ -1094,7 +1094,7 @@ program QuAcK
|
|||||||
if(doufG0W0) then
|
if(doufG0W0) then
|
||||||
|
|
||||||
call cpu_time(start_ufGW)
|
call cpu_time(start_ufGW)
|
||||||
call ufG0W0(nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,eHF)
|
call ufG0W0(nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO,eHF,TDA_W)
|
||||||
call cpu_time(end_ufGW)
|
call cpu_time(end_ufGW)
|
||||||
|
|
||||||
t_ufGW = end_ufGW - start_ufGW
|
t_ufGW = end_ufGW - start_ufGW
|
||||||
|
@ -205,8 +205,11 @@ subroutine sort_ppRPA(nOO,nVV,Omega,Z,Omega1,X1,Y1,Omega2,X2,Y2)
|
|||||||
|
|
||||||
call dgemm ('N', 'N', nOO+nVV, nVV, nOO+nVV, 1d0, M, nOO+nVV, Z1, nOO+nVV, 0d0, tmp1, nOO+nVV)
|
call dgemm ('N', 'N', nOO+nVV, nVV, nOO+nVV, 1d0, M, nOO+nVV, Z1, nOO+nVV, 0d0, tmp1, nOO+nVV)
|
||||||
call dgemm ('T', 'N', nVV , nVV, nOO+nVV, 1d0, Z1, nOO+nVV, tmp1, nOO+nVV, 0d0, S1, nVV)
|
call dgemm ('T', 'N', nVV , nVV, nOO+nVV, 1d0, Z1, nOO+nVV, tmp1, nOO+nVV, 0d0, S1, nVV)
|
||||||
|
!S1 = + matmul(transpose(Z1),matmul(M,Z1))
|
||||||
S2 = - matmul(transpose(Z2),matmul(M,Z2))
|
|
||||||
|
call dgemm ('N', 'N', nOO+nVV, nOO, nOO+nVV, 1d0, M, nOO+nVV, -1d0*Z2, nOO+nVV, 0d0, tmp2, nOO+nVV)
|
||||||
|
call dgemm ('T', 'N', nOO , nOO, nOO+nVV, 1d0, Z2, nOO+nVV, tmp2, nOO+nVV, 0d0, S2, nOO)
|
||||||
|
! S2 = - matmul(transpose(Z2),matmul(M,Z2))
|
||||||
|
|
||||||
if(nVV > 0) call orthogonalization_matrix(1,nVV,S1,O1)
|
if(nVV > 0) call orthogonalization_matrix(1,nVV,S1,O1)
|
||||||
if(nOO > 0) call orthogonalization_matrix(1,nOO,S2,O2)
|
if(nOO > 0) call orthogonalization_matrix(1,nOO,S2,O2)
|
||||||
@ -214,8 +217,11 @@ subroutine sort_ppRPA(nOO,nVV,Omega,Z,Omega1,X1,Y1,Omega2,X2,Y2)
|
|||||||
|
|
||||||
write (*,*) 'OK SO FAR'
|
write (*,*) 'OK SO FAR'
|
||||||
|
|
||||||
call dgemm ('N', 'N', nVV, nVV, nVV, 1d0, Z1, nVV, O1, nVV, 0d0, Z1, nVV)
|
!Z1 = matmul(Z1,O1)
|
||||||
Z2 = matmul(Z2,O2)
|
call dgemm ('N', 'N', nOO+nVV,nVV,nVV, 1d0, Z1, nOO+nVV, O1, nVV,0d0, tmp1, nOO+nVV)
|
||||||
|
Z1 = tmp1
|
||||||
|
call dgemm ('N', 'N', nOO+nVV,nOO,nOO, 1d0, Z2, nOO+nVV, O2, nOO,0d0, tmp2, nOO+nVV)
|
||||||
|
Z2 = tmp2
|
||||||
|
|
||||||
! Define submatrices X1, Y1, X2, & Y2
|
! Define submatrices X1, Y1, X2, & Y2
|
||||||
|
|
||||||
|
@ -41,6 +41,17 @@ CXX = g++
|
|||||||
LAPACK=-lblas -llapack
|
LAPACK=-lblas -llapack
|
||||||
STDCXX=-lstdc++
|
STDCXX=-lstdc++
|
||||||
FIX_ORDER_OF_LIBS=-Wl,--start-group
|
FIX_ORDER_OF_LIBS=-Wl,--start-group
|
||||||
|
"""
|
||||||
|
|
||||||
|
compile_ifort_linux = """
|
||||||
|
FC = ifort -mkl=parallel -qopenmp
|
||||||
|
AR = ar crs
|
||||||
|
FFLAGS = -I$IDIR -g -Ofast -traceback
|
||||||
|
CC = icc
|
||||||
|
CXX = icpc
|
||||||
|
LAPACK=
|
||||||
|
STDCXX=-lstdc++
|
||||||
|
FIX_ORDER_OF_LIBS=-Wl,--start-group
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
compile_gfortran_mac = """
|
compile_gfortran_mac = """
|
||||||
@ -67,7 +78,8 @@ FIX_ORDER_OF_LIBS=-Wl,--start-group
|
|||||||
|
|
||||||
|
|
||||||
if sys.platform in ["linux", "linux2"]:
|
if sys.platform in ["linux", "linux2"]:
|
||||||
compiler = compile_gfortran_linux
|
# compiler = compile_gfortran_linux
|
||||||
|
compiler = compile_ifort_linux
|
||||||
elif sys.platform == "darwin":
|
elif sys.platform == "darwin":
|
||||||
compiler = compile_gfortran_mac
|
compiler = compile_gfortran_mac
|
||||||
else:
|
else:
|
||||||
|
@ -52,131 +52,135 @@ subroutine read_basis(nNuc,rNuc,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KSh
|
|||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Loop over atoms
|
! Loop over atoms
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
do i=1,nNuc
|
! do i=1,nNuc
|
||||||
|
|
||||||
read(2,*) iNuc,nShAt
|
! read(2,*) iNuc,nShAt
|
||||||
write(*,'(A28,1X,I16)') 'Atom n. ',iNuc
|
! write(*,'(A28,1X,I16)') 'Atom n. ',iNuc
|
||||||
write(*,'(A28,1X,I16)') 'number of shells ',nShAt
|
! write(*,'(A28,1X,I16)') 'number of shells ',nShAt
|
||||||
write(*,'(A28)') '------------------'
|
! write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
! Loop over shells
|
! ! Loop over shells
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
do j=1,nShAt
|
! do j=1,nShAt
|
||||||
|
|
||||||
nShell = nShell + 1
|
! nShell = nShell + 1
|
||||||
|
|
||||||
! Basis function centers
|
! ! Basis function centers
|
||||||
|
|
||||||
do k=1,ncart
|
! do k=1,ncart
|
||||||
CenterShell(nShell,k) = rNuc(iNuc,k)
|
! CenterShell(nShell,k) = rNuc(iNuc,k)
|
||||||
enddo
|
! enddo
|
||||||
|
|
||||||
! Shell type and contraction degree
|
! ! Shell type and contraction degree
|
||||||
|
|
||||||
read(2,*) shelltype,KShell(nShell)
|
! read(2,*) shelltype,KShell(nShell)
|
||||||
|
|
||||||
select case (shelltype)
|
! select case (shelltype)
|
||||||
case ("S")
|
! case ("S")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 0
|
! TotAngMomShell(nShell) = 0
|
||||||
write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("P")
|
! case ("P")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 1
|
! TotAngMomShell(nShell) = 1
|
||||||
write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("D")
|
! case ("D")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 2
|
! TotAngMomShell(nShell) = 2
|
||||||
write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("F")
|
! case ("F")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 3
|
! TotAngMomShell(nShell) = 3
|
||||||
write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("G")
|
! case ("G")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 4
|
! TotAngMomShell(nShell) = 4
|
||||||
write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("H")
|
! case ("H")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 5
|
! TotAngMomShell(nShell) = 5
|
||||||
write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("I")
|
! case ("I")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 6
|
! TotAngMomShell(nShell) = 6
|
||||||
write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case ("J")
|
! case ("J")
|
||||||
|
|
||||||
TotAngMomShell(nShell) = 7
|
! TotAngMomShell(nShell) = 7
|
||||||
write(*,'(A28,1X,I16)') 'j-type shell with K = ',KShell(nShell)
|
! write(*,'(A28,1X,I16)') 'j-type shell with K = ',KShell(nShell)
|
||||||
|
|
||||||
case default
|
! case default
|
||||||
|
|
||||||
call print_warning('!!! Angular momentum too high !!!')
|
! call print_warning('!!! Angular momentum too high !!!')
|
||||||
stop
|
! stop
|
||||||
|
|
||||||
end select
|
! end select
|
||||||
|
|
||||||
! Read exponents and contraction coefficients
|
! ! Read exponents and contraction coefficients
|
||||||
|
|
||||||
write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction'
|
! write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction'
|
||||||
do k=1,Kshell(nShell)
|
! do k=1,Kshell(nShell)
|
||||||
read(2,*) kk,ExpShell(nShell,k),DShell(nShell,k)
|
! read(2,*) kk,ExpShell(nShell,k),DShell(nShell,k)
|
||||||
write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k)
|
! write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k)
|
||||||
enddo
|
! enddo
|
||||||
|
|
||||||
min_exponent(iNuc,TotAngMomShell(nShell)+1) &
|
! min_exponent(iNuc,TotAngMomShell(nShell)+1) &
|
||||||
= min(min_exponent(iNuc,TotAngMomShell(nShell)+1),minval(ExpShell(nShell,1:KShell(nShell))))
|
! = min(min_exponent(iNuc,TotAngMomShell(nShell)+1),minval(ExpShell(nShell,1:KShell(nShell))))
|
||||||
max_exponent(iNuc) = max(max_exponent(iNuc),maxval(ExpShell(nShell,:)))
|
! max_exponent(iNuc) = max(max_exponent(iNuc),maxval(ExpShell(nShell,:)))
|
||||||
max_ang_mom(iNuc) = max(max_ang_mom(iNuc),TotAngMomShell(nShell))
|
! max_ang_mom(iNuc) = max(max_ang_mom(iNuc),TotAngMomShell(nShell))
|
||||||
|
|
||||||
enddo
|
! enddo
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
! End loop over shells
|
! ! End loop over shells
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
|
|
||||||
write(*,'(A28)') '------------------'
|
! write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
! print*,'maximum angular momemtum for atom n. ',iNuc,' = '
|
! ! print*,'maximum angular momemtum for atom n. ',iNuc,' = '
|
||||||
! print*,max_ang_mom(iNuc)
|
! ! print*,max_ang_mom(iNuc)
|
||||||
! print*,'maximum exponent for atom n. ',iNuc,' = '
|
! ! print*,'maximum exponent for atom n. ',iNuc,' = '
|
||||||
! print*,max_exponent(iNuc)
|
! ! print*,max_exponent(iNuc)
|
||||||
! print*,'minimum exponent for atom n. ',iNuc,' = '
|
! ! print*,'minimum exponent for atom n. ',iNuc,' = '
|
||||||
! print*,min_exponent(iNuc,1:max_ang_mom(iNuc)+1)
|
! ! print*,min_exponent(iNuc,1:max_ang_mom(iNuc)+1)
|
||||||
|
|
||||||
enddo
|
! enddo
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
! End loop over atoms
|
! ! End loop over atoms
|
||||||
!------------------------------------------------------------------------
|
! !------------------------------------------------------------------------
|
||||||
|
|
||||||
! Total number of shells
|
! ! Total number of shells
|
||||||
|
|
||||||
write(*,'(A28,1X,I16)') 'Number of shells',nShell
|
! write(*,'(A28,1X,I16)') 'Number of shells',nShell
|
||||||
write(*,'(A28)') '------------------'
|
! write(*,'(A28)') '------------------'
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
|
|
||||||
! Close file with basis set specification
|
! ! Close file with basis set specification
|
||||||
|
|
||||||
close(unit=2)
|
! close(unit=2)
|
||||||
|
|
||||||
! Calculate number of basis functions
|
! Calculate number of basis functions
|
||||||
|
|
||||||
nBas = 0
|
! nBas = 0
|
||||||
do iShell=1,nShell
|
! do iShell=1,nShell
|
||||||
nBas = nBas + (TotAngMomShell(iShell)*TotAngMomShell(iShell) + 3*TotAngMomShell(iShell) + 2)/2
|
! nBas = nBas + (TotAngMomShell(iShell)*TotAngMomShell(iShell) + 3*TotAngMomShell(iShell) + 2)/2
|
||||||
enddo
|
! enddo
|
||||||
|
|
||||||
write(*,'(A28)') '------------------'
|
! write(*,'(A28)') '------------------'
|
||||||
write(*,'(A28,1X,I16)') 'Number of basis functions',NBas
|
! write(*,'(A28,1X,I16)') 'Number of basis functions',NBas
|
||||||
write(*,'(A28)') '------------------'
|
! write(*,'(A28)') '------------------'
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
|
|
||||||
|
open(unit=3,file='int/nBas.dat')
|
||||||
|
read(3,*) nBas
|
||||||
|
close(unit=3)
|
||||||
|
|
||||||
! Number of virtual orbitals
|
! Number of virtual orbitals
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user