mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-30 15:15:38 +01:00
add ccsd
This commit is contained in:
parent
f0d9b37678
commit
fadbddc869
225
src/ccsd/80.ccsd_spin.bats
Normal file
225
src/ccsd/80.ccsd_spin.bats
Normal file
@ -0,0 +1,225 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
source $QP_ROOT/tests/bats/common.bats.sh
|
||||
source $QP_ROOT/quantum_package.rc
|
||||
|
||||
|
||||
function run() {
|
||||
thresh1=1e-6
|
||||
thresh2=1e-6
|
||||
test_exe scf || skip
|
||||
qp set_file $1
|
||||
qp edit --check
|
||||
#qp run scf
|
||||
qp set_frozen_core
|
||||
qp set utils_cc cc_par_t true
|
||||
qp set utils_cc cc_thresh_conv 1e-12
|
||||
file="$(echo $1 | sed 's/.ezfio//g')"
|
||||
qp run ccsd_spin_orb | tee $file.ccsd.out
|
||||
energy1="$(grep 'E(CCSD)' $file.ccsd.out | tail -n 1 | awk '{printf $3}')"
|
||||
energy2="$(grep 'E(T)' $file.ccsd.out | tail -n 1 | awk '{printf $3}')"
|
||||
#rm $file.ccsd.out
|
||||
eq $energy1 $2 $thresh1
|
||||
eq $energy2 $3 $thresh2
|
||||
}
|
||||
|
||||
@test "b2_stretched" {
|
||||
run b2_stretched.ezfio -49.136487344382 -0.003497589175
|
||||
}
|
||||
|
||||
@test "be" {
|
||||
run be.ezfio -14.623559003577 -0.000230982022
|
||||
}
|
||||
|
||||
@test "c2h2" {
|
||||
run c2h2.ezfio -12.394008897618 -0.010790491561
|
||||
}
|
||||
|
||||
@test "ch4" {
|
||||
run ch4.ezfio -40.390721785799 -0.004476100282
|
||||
}
|
||||
|
||||
@test "clf" {
|
||||
run clf.ezfio -559.186562904081 -0.006577143392
|
||||
}
|
||||
|
||||
@test "clo" {
|
||||
run clo.ezfio -534.564874409332 -0.007584571424
|
||||
}
|
||||
|
||||
@test "co2" {
|
||||
run co2.ezfio -188.129602527766 -0.018040668885
|
||||
}
|
||||
|
||||
@test "dhno" {
|
||||
run dhno.ezfio -130.816650109473 -0.012197331453
|
||||
}
|
||||
|
||||
@test "f2" {
|
||||
run f2.ezfio -199.287826338097 -0.017592872692
|
||||
}
|
||||
|
||||
@test "f" {
|
||||
run f.ezfio -99.616644511121 -0.003624525307
|
||||
}
|
||||
|
||||
@test "h2o2" {
|
||||
run h2o2.ezfio -151.182552729963 -0.009511682086
|
||||
}
|
||||
|
||||
@test "h2o" {
|
||||
run h2o.ezfio -76.237710276526 -0.003001800577
|
||||
}
|
||||
|
||||
@test "h2s" {
|
||||
run h2s.ezfio -398.861214015390 -0.003300559757
|
||||
}
|
||||
|
||||
@test "h3coh" {
|
||||
run h3coh.ezfio -115.221296424969 -0.003566171432
|
||||
}
|
||||
|
||||
@test "hbo" {
|
||||
run hbo.ezfio -100.213539770415 -0.006851489212
|
||||
}
|
||||
|
||||
@test "hcn" {
|
||||
run hcn.ezfio -93.190247992657 -0.013418135043
|
||||
}
|
||||
|
||||
@test "hco" {
|
||||
run hco.ezfio -113.405413962350 -0.007973455337
|
||||
}
|
||||
|
||||
@test "lif" {
|
||||
run lif.ezfio -107.270402903250 -0.007742969005
|
||||
}
|
||||
|
||||
@test "n2" {
|
||||
run n2.ezfio -109.355358930472 -0.018477744342
|
||||
}
|
||||
|
||||
@test "n2h4" {
|
||||
run n2h4.ezfio -111.556885923139 -0.009048077008
|
||||
}
|
||||
|
||||
@test "nh3" {
|
||||
run nh3.ezfio -56.465503060954 -0.007638273755
|
||||
}
|
||||
|
||||
@test "oh" {
|
||||
run oh.ezfio -75.614606132774 -0.004126661739
|
||||
}
|
||||
|
||||
@test "sih2_3b1" {
|
||||
run sih2_3b1.ezfio -290.016780973072 -0.000497825874
|
||||
}
|
||||
|
||||
@test "sih3" {
|
||||
run sih3.ezfio -5.575343504534 -0.002094123268
|
||||
}
|
||||
|
||||
@test "so" {
|
||||
run so.ezfio -26.035945178665 -0.010594351274
|
||||
}
|
||||
|
||||
#@test "b2_stretched" {
|
||||
#run b2_stretched.ezfio -49.136487344382 -49.139984933557
|
||||
#}
|
||||
#
|
||||
#@test "be" {
|
||||
#run be.ezfio -14.623559003577 -14.623789985599
|
||||
#}
|
||||
#
|
||||
#@test "c2h2" {
|
||||
#run c2h2.ezfio -12.394008897618 -12.404799389179
|
||||
#}
|
||||
#
|
||||
#@test "ch4" {
|
||||
#run ch4.ezfio -40.390721784961 -40.395197884406
|
||||
#}
|
||||
#
|
||||
#@test "clf" {
|
||||
#run clf.ezfio -559.186562906072 -559.193140046904
|
||||
#}
|
||||
#
|
||||
#@test "clo" {
|
||||
#run clo.ezfio -534.564874409333 -534.572458980757
|
||||
#}
|
||||
#
|
||||
#@test "co2" {
|
||||
#run co2.ezfio -188.129602511724 -188.147643198675
|
||||
#}
|
||||
#
|
||||
#@test "dhno" {
|
||||
#run dhno.ezfio -130.816650109473 -130.828847440925
|
||||
#}
|
||||
#
|
||||
#@test "f2" {
|
||||
#run f2.ezfio -199.287826338097 -199.305419210789
|
||||
#}
|
||||
#
|
||||
#@test "f" {
|
||||
#run f.ezfio -99.616644511120 -99.620269036428
|
||||
#}
|
||||
#
|
||||
#@test "h2o2" {
|
||||
#run h2o2.ezfio -151.182552729963 -151.192064412049
|
||||
#}
|
||||
#
|
||||
#@test "h2o" {
|
||||
#run h2o.ezfio -76.237710276526 -76.240712077103
|
||||
#}
|
||||
#
|
||||
#@test "h2s" {
|
||||
#run h2s.ezfio -398.861214015416 -398.864514575146
|
||||
#}
|
||||
#
|
||||
#@test "h3coh" {
|
||||
#run h3coh.ezfio -115.221296424969 -115.224862596401
|
||||
#}
|
||||
#
|
||||
#@test "hbo" {
|
||||
#run hbo.ezfio -100.213539770415 -100.220391259627
|
||||
#}
|
||||
#
|
||||
#@test "hcn" {
|
||||
#run hcn.ezfio -93.190247983000 -93.203666131216
|
||||
#}
|
||||
#
|
||||
#@test "hco" {
|
||||
#run hco.ezfio -113.405413962350 -113.413387417687
|
||||
#}
|
||||
#
|
||||
#@test "lif" {
|
||||
#run lif.ezfio -107.270402903211 -107.278145872216
|
||||
#}
|
||||
#
|
||||
#@test "n2" {
|
||||
#run n2.ezfio -109.355358930472 -109.373836674814
|
||||
#}
|
||||
#
|
||||
#@test "n2h4" {
|
||||
#run n2h4.ezfio -111.556885922642 -111.565934000556
|
||||
#}
|
||||
#
|
||||
#@test "nh3" {
|
||||
#run nh3.ezfio -56.465503060954 -56.473141334709
|
||||
#}
|
||||
#
|
||||
#@test "oh" {
|
||||
#run oh.ezfio -75.614606131897 -75.618732794235
|
||||
#}
|
||||
#
|
||||
#@test "sih2_3b1" {
|
||||
#run sih2_3b1.ezfio -290.016780973071 -290.017278798946
|
||||
#}
|
||||
#
|
||||
#@test "sih3" {
|
||||
#run sih3.ezfio -5.575343504534 -5.577437627802
|
||||
#}
|
||||
#
|
||||
#@test "so" {
|
||||
#run so.ezfio -26.035945181998 -26.046539528491
|
||||
#}
|
||||
|
225
src/ccsd/81.ccsd_space.bats
Normal file
225
src/ccsd/81.ccsd_space.bats
Normal file
@ -0,0 +1,225 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
source $QP_ROOT/tests/bats/common.bats.sh
|
||||
source $QP_ROOT/quantum_package.rc
|
||||
|
||||
|
||||
function run() {
|
||||
thresh1=1e-6
|
||||
thresh2=1e-6
|
||||
test_exe scf || skip
|
||||
qp set_file $1
|
||||
qp edit --check
|
||||
#qp run scf
|
||||
qp set_frozen_core
|
||||
qp set utils_cc cc_par_t true
|
||||
qp set utils_cc cc_thresh_conv 1e-12
|
||||
file="$(echo $1 | sed 's/.ezfio//g')"
|
||||
qp run ccsd_space_orb | tee $file.ccsd.out
|
||||
energy1="$(grep 'E(CCSD)' $file.ccsd.out | tail -n 1 | awk '{printf $3}')"
|
||||
energy2="$(grep 'E(T)' $file.ccsd.out | tail -n 1 | awk '{printf $3}')"
|
||||
#rm $file.ccsd.out
|
||||
eq $energy1 $2 $thresh1
|
||||
eq $energy2 $3 $thresh2
|
||||
}
|
||||
|
||||
@test "b2_stretched" {
|
||||
run b2_stretched.ezfio -49.136487344382 -0.003497589175
|
||||
}
|
||||
|
||||
@test "be" {
|
||||
run be.ezfio -14.623559003577 -0.000230982022
|
||||
}
|
||||
|
||||
@test "c2h2" {
|
||||
run c2h2.ezfio -12.394008897618 -0.010790491561
|
||||
}
|
||||
|
||||
@test "ch4" {
|
||||
run ch4.ezfio -40.390721785799 -0.004476100282
|
||||
}
|
||||
|
||||
@test "clf" {
|
||||
run clf.ezfio -559.186562904081 -0.006577143392
|
||||
}
|
||||
|
||||
#@test "clo" {
|
||||
#run clo.ezfio -534.564874409332 -0.007584571424
|
||||
#}
|
||||
|
||||
@test "co2" {
|
||||
run co2.ezfio -188.129602527766 -0.018040668885
|
||||
}
|
||||
|
||||
#@test "dhno" {
|
||||
#run dhno.ezfio -130.816650109473 -0.012197331453
|
||||
#}
|
||||
|
||||
@test "f2" {
|
||||
run f2.ezfio -199.287826338097 -0.017592872692
|
||||
}
|
||||
|
||||
#@test "f" {
|
||||
#run f.ezfio -99.616644511121 -0.003624525307
|
||||
#}
|
||||
|
||||
@test "h2o2" {
|
||||
run h2o2.ezfio -151.182552729963 -0.009511682086
|
||||
}
|
||||
|
||||
@test "h2o" {
|
||||
run h2o.ezfio -76.237710276526 -0.003001800577
|
||||
}
|
||||
|
||||
@test "h2s" {
|
||||
run h2s.ezfio -398.861214015390 -0.003300559757
|
||||
}
|
||||
|
||||
@test "h3coh" {
|
||||
run h3coh.ezfio -115.221296424969 -0.003566171432
|
||||
}
|
||||
|
||||
@test "hbo" {
|
||||
run hbo.ezfio -100.213539770415 -0.006851489212
|
||||
}
|
||||
|
||||
@test "hcn" {
|
||||
run hcn.ezfio -93.190247992657 -0.013418135043
|
||||
}
|
||||
|
||||
#@test "hco" {
|
||||
#run hco.ezfio -113.405413962350 -0.007973455337
|
||||
#}
|
||||
|
||||
@test "lif" {
|
||||
run lif.ezfio -107.270402903250 -0.007742969005
|
||||
}
|
||||
|
||||
@test "n2" {
|
||||
run n2.ezfio -109.355358930472 -0.018477744342
|
||||
}
|
||||
|
||||
@test "n2h4" {
|
||||
run n2h4.ezfio -111.556885923139 -0.009048077008
|
||||
}
|
||||
|
||||
@test "nh3" {
|
||||
run nh3.ezfio -56.465503060954 -0.007638273755
|
||||
}
|
||||
|
||||
#@test "oh" {
|
||||
#run oh.ezfio -75.614606132774 -0.004126661739
|
||||
#}
|
||||
|
||||
#@test "sih2_3b1" {
|
||||
#run sih2_3b1.ezfio -290.016780973072 -0.000497825874
|
||||
#}
|
||||
|
||||
#@test "sih3" {
|
||||
#run sih3.ezfio -5.575343504534 -0.002094123268
|
||||
#}
|
||||
|
||||
#@test "so" {
|
||||
#run so.ezfio -26.035945178665 -0.010594351274
|
||||
#}
|
||||
|
||||
#@test "b2_stretched" {
|
||||
#run b2_stretched.ezfio -49.136487344382 -49.139984933557
|
||||
#}
|
||||
#
|
||||
#@test "be" {
|
||||
#run be.ezfio -14.623559003577 -14.623789985599
|
||||
#}
|
||||
#
|
||||
#@test "c2h2" {
|
||||
#run c2h2.ezfio -12.394008897618 -12.404799389179
|
||||
#}
|
||||
#
|
||||
#@test "ch4" {
|
||||
#run ch4.ezfio -40.390721784961 -40.395197884406
|
||||
#}
|
||||
#
|
||||
#@test "clf" {
|
||||
#run clf.ezfio -559.186562906072 -559.193140046904
|
||||
#}
|
||||
#
|
||||
##@test "clo" {
|
||||
##run clo.ezfio -534.564874409333 -534.572458980757
|
||||
##}
|
||||
#
|
||||
#@test "co2" {
|
||||
#run co2.ezfio -188.129602511724 -188.147643198675
|
||||
#}
|
||||
#
|
||||
##@test "dhno" {
|
||||
##run dhno.ezfio -130.816650109473 -130.828847440925
|
||||
##}
|
||||
#
|
||||
#@test "f2" {
|
||||
#run f2.ezfio -199.287826338097 -199.305419210789
|
||||
#}
|
||||
#
|
||||
##@test "f" {
|
||||
##run f.ezfio -99.616644511120 -99.620269036428
|
||||
##}
|
||||
#
|
||||
#@test "h2o2" {
|
||||
#run h2o2.ezfio -151.182552729963 -151.192064412049
|
||||
#}
|
||||
#
|
||||
#@test "h2o" {
|
||||
#run h2o.ezfio -76.237710276526 -76.240712077103
|
||||
#}
|
||||
#
|
||||
#@test "h2s" {
|
||||
#run h2s.ezfio -398.861214015416 -398.864514575146
|
||||
#}
|
||||
#
|
||||
#@test "h3coh" {
|
||||
#run h3coh.ezfio -115.221296424969 -115.224862596401
|
||||
#}
|
||||
#
|
||||
#@test "hbo" {
|
||||
#run hbo.ezfio -100.213539770415 -100.220391259627
|
||||
#}
|
||||
#
|
||||
#@test "hcn" {
|
||||
#run hcn.ezfio -93.190247983000 -93.203666131216
|
||||
#}
|
||||
#
|
||||
##@test "hco" {
|
||||
##run hco.ezfio -113.405413962350 -113.413387417687
|
||||
##}
|
||||
#
|
||||
#@test "lif" {
|
||||
#run lif.ezfio -107.270402903211 -107.278145872216
|
||||
#}
|
||||
#
|
||||
#@test "n2" {
|
||||
#run n2.ezfio -109.355358930472 -109.373836674814
|
||||
#}
|
||||
#
|
||||
#@test "n2h4" {
|
||||
#run n2h4.ezfio -111.556885922642 -111.565934000556
|
||||
#}
|
||||
#
|
||||
#@test "nh3" {
|
||||
#run nh3.ezfio -56.465503060954 -56.473141334709
|
||||
#}
|
||||
#
|
||||
##@test "oh" {
|
||||
##run oh.ezfio -75.614606131897 -75.618732794235
|
||||
##}
|
||||
#
|
||||
##@test "sih2_3b1" {
|
||||
##run sih2_3b1.ezfio -290.016780973071 -290.017278798946
|
||||
##}
|
||||
#
|
||||
##@test "sih3" {
|
||||
##run sih3.ezfio -5.575343504534 -5.577437627802
|
||||
##}
|
||||
#
|
||||
##@test "so" {
|
||||
##run so.ezfio -26.035945181998 -26.046539528491
|
||||
##}
|
||||
|
2
src/ccsd/NEED
Normal file
2
src/ccsd/NEED
Normal file
@ -0,0 +1,2 @@
|
||||
hartree_fock
|
||||
utils_cc
|
31
src/ccsd/README.md
Normal file
31
src/ccsd/README.md
Normal file
@ -0,0 +1,31 @@
|
||||
# CCSD in spin orbitals and spatial orbitals
|
||||
|
||||
CCSD and CCSD(T) in spin orbitals for open and closed shell systems.
|
||||
CCSD and CCSD(T) in spatial orbitals for closed shell systems.
|
||||
|
||||
## Calculations
|
||||
The program will automatically choose the version in spin or spatial orbitals
|
||||
To run the general program:
|
||||
```
|
||||
qp run ccsd
|
||||
```
|
||||
Nevertheless, you can enforce the run in spin orbitals with
|
||||
```
|
||||
qp run ccsd_spin_orb
|
||||
```
|
||||
|
||||
## Settings
|
||||
The settings can be changed with:
|
||||
```
|
||||
qp set utils_cc cc_#param #val
|
||||
```
|
||||
For more informations on the settings, look at the module utils_cc and its documentation.
|
||||
|
||||
## Org files
|
||||
The org files are stored in the directory org in order to avoid overwriting on user changes.
|
||||
The org files can be modified, to export the change to the source code, run
|
||||
```
|
||||
./TANGLE_org_mode.sh and
|
||||
mv *.irp.f ../.
|
||||
```
|
||||
|
18
src/ccsd/ccsd.irp.f
Normal file
18
src/ccsd/ccsd.irp.f
Normal file
@ -0,0 +1,18 @@
|
||||
program ccsd
|
||||
|
||||
implicit none
|
||||
|
||||
BEGIN_DOC
|
||||
! CCSD program
|
||||
END_DOC
|
||||
|
||||
read_wf = .True.
|
||||
touch read_wf
|
||||
|
||||
if (.not. cc_ref_is_open_shell) then
|
||||
call run_ccsd_space_orb
|
||||
else
|
||||
call run_ccsd_spin_orb
|
||||
endif
|
||||
|
||||
end
|
12
src/ccsd/ccsd_space_orb.irp.f
Normal file
12
src/ccsd/ccsd_space_orb.irp.f
Normal file
@ -0,0 +1,12 @@
|
||||
! Code
|
||||
|
||||
program ccsd
|
||||
|
||||
implicit none
|
||||
|
||||
read_wf = .True.
|
||||
touch read_wf
|
||||
|
||||
call run_ccsd_space_orb
|
||||
|
||||
end
|
2078
src/ccsd/ccsd_space_orb_sub.irp.f
Normal file
2078
src/ccsd/ccsd_space_orb_sub.irp.f
Normal file
File diff suppressed because it is too large
Load Diff
16
src/ccsd/ccsd_spin_orb.irp.f
Normal file
16
src/ccsd/ccsd_spin_orb.irp.f
Normal file
@ -0,0 +1,16 @@
|
||||
! Prog
|
||||
|
||||
program ccsd
|
||||
|
||||
implicit none
|
||||
|
||||
BEGIN_DOC
|
||||
! CCSD in spin orbitals
|
||||
END_DOC
|
||||
|
||||
read_wf = .True.
|
||||
touch read_wf
|
||||
|
||||
call run_ccsd_spin_orb
|
||||
|
||||
end
|
2301
src/ccsd/ccsd_spin_orb_sub.irp.f
Normal file
2301
src/ccsd/ccsd_spin_orb_sub.irp.f
Normal file
File diff suppressed because it is too large
Load Diff
412
src/ccsd/ccsd_t_space_orb.irp.f
Normal file
412
src/ccsd/ccsd_t_space_orb.irp.f
Normal file
@ -0,0 +1,412 @@
|
||||
! Dumb way
|
||||
|
||||
subroutine ccsd_par_t_space(nO,nV,t1,t2,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO, nV)
|
||||
double precision, intent(in) :: t2(nO, nO, nV, nV)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: W(:,:,:,:,:,:)
|
||||
double precision, allocatable :: V(:,:,:,:,:,:)
|
||||
integer :: i,j,k,a,b,c
|
||||
|
||||
allocate(W(nO,nO,nO,nV,nV,nV))
|
||||
allocate(V(nO,nO,nO,nV,nV,nV))
|
||||
|
||||
call form_w(nO,nV,t2,W)
|
||||
call form_v(nO,nV,t1,W,V)
|
||||
|
||||
energy = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
energy = energy + (4d0 * W(i,j,k,a,b,c) + W(i,j,k,b,c,a) + W(i,j,k,c,a,b)) * (V(i,j,k,a,b,c) - V(i,j,k,c,b,a)) / (cc_space_f_o(i) + cc_space_f_o(j) + cc_space_f_o(k) - cc_space_f_v(a) - cc_space_f_v(b) - cc_space_f_v(c)) !delta_ooovvv(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
energy = energy / 3d0
|
||||
|
||||
deallocate(V,W)
|
||||
end
|
||||
|
||||
subroutine form_w(nO,nV,t2,W)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t2(nO, nO, nV, nV)
|
||||
double precision, intent(out) :: W(nO, nO, nO, nV, nV, nV)
|
||||
|
||||
integer :: i,j,k,l,a,b,c,d
|
||||
|
||||
W = 0d0
|
||||
do c = 1, nV
|
||||
print*,'W:',c,'/',nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
|
||||
do d = 1, nV
|
||||
W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
! chem (bd|ai)
|
||||
! phys <ba|di>
|
||||
+ cc_space_v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
+ cc_space_v_vvvo(c,a,d,i) * t2(j,k,b,d) & ! bc kj
|
||||
+ cc_space_v_vvvo(a,c,d,k) * t2(j,i,b,d) & ! prev ac ik
|
||||
+ cc_space_v_vvvo(b,c,d,k) * t2(i,j,a,d) & ! prev ab ij
|
||||
+ cc_space_v_vvvo(c,b,d,j) * t2(i,k,a,d) & ! prev bc kj
|
||||
+ cc_space_v_vvvo(a,b,d,j) * t2(k,i,c,d) ! prev ac ik
|
||||
enddo
|
||||
|
||||
do l = 1, nO
|
||||
W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
! chem (ck|jl)
|
||||
! phys <cj|kl>
|
||||
- cc_space_v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
- cc_space_v_vooo(b,k,j,l) * t2(i,l,a,c) & ! bc kj
|
||||
- cc_space_v_vooo(b,i,j,l) * t2(k,l,c,a) & ! prev ac ik
|
||||
- cc_space_v_vooo(a,j,i,l) * t2(k,l,c,b) & ! prev ab ij
|
||||
- cc_space_v_vooo(a,k,i,l) * t2(j,l,b,c) & ! prev bc kj
|
||||
- cc_space_v_vooo(c,i,k,l) * t2(j,l,b,a) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
subroutine form_v(nO,nV,t1,w,v)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO, nV)
|
||||
double precision, intent(in) :: W(nO, nO, nO, nV, nV, nV)
|
||||
double precision, intent(out) :: V(nO, nO, nO, nV, nV, nV)
|
||||
|
||||
integer :: i,j,k,a,b,c
|
||||
|
||||
V = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
V(i,j,k,a,b,c) = V(i,j,k,a,b,c) + W(i,j,k,a,b,c) &
|
||||
+ cc_space_v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
+ cc_space_v_vvoo(a,c,i,k) * t1(j,b) &
|
||||
+ cc_space_v_vvoo(a,b,i,j) * t1(k,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
! Main
|
||||
|
||||
subroutine ccsd_par_t_space_v2(nO,nV,t1,t2,f_o,f_v,v_vvvo,v_vvoo,v_vooo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO,nV), f_o(nO), f_v(nV)
|
||||
double precision, intent(in) :: t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: v_vvvo(nV,nV,nV,nO), v_vvoo(nV,nV,nO,nO), v_vooo(nV,nO,nO,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: W(:,:,:,:,:,:)
|
||||
double precision, allocatable :: V(:,:,:,:,:,:)
|
||||
double precision, allocatable :: W_ijk(:,:,:), V_ijk(:,:,:)
|
||||
double precision, allocatable :: X_vvvo(:,:,:,:), X_ovoo(:,:,:,:), X_vvoo(:,:,:,:)
|
||||
double precision, allocatable :: T_vvoo(:,:,:,:), T_ovvo(:,:,:,:), T_vo(:,:)
|
||||
integer :: i,j,k,l,a,b,c,d
|
||||
double precision :: e,ta,tb, delta, delta_ijk
|
||||
|
||||
!allocate(W(nV,nV,nV,nO,nO,nO))
|
||||
!allocate(V(nV,nV,nV,nO,nO,nO))
|
||||
allocate(W_ijk(nV,nV,nV), V_ijk(nV,nV,nV))
|
||||
allocate(X_vvvo(nV,nV,nV,nO), X_ovoo(nO,nV,nO,nO), X_vvoo(nV,nV,nO,nO))
|
||||
allocate(T_vvoo(nV,nV,nO,nO), T_ovvo(nO,nV,nV,nO), T_vo(nV,nO))
|
||||
|
||||
! Temporary arrays
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,T_vvoo,T_ovvo,T_vo,X_vvvo,X_ovoo,X_vvoo, &
|
||||
!$OMP t1,t2,v_vvvo,v_vooo,v_vvoo) &
|
||||
!$OMP PRIVATE(a,b,c,d,i,j,k,l) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
|
||||
!v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
!X_vvvo(d,b,a,i) * T_vvoo(d,c,k,j)
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do i = 1, nO
|
||||
do a = 1, nV
|
||||
do b = 1, nV
|
||||
do d = 1, nV
|
||||
X_vvvo(d,b,a,i) = v_vvvo(b,a,d,i)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
do c = 1, nV
|
||||
do d = 1, nV
|
||||
T_vvoo(d,c,k,j) = t2(k,j,c,d)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
!X_ovoo(l,c,j,k) * T_ovvo(l,a,b,i) &
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do c = 1, nV
|
||||
do l = 1, nO
|
||||
X_ovoo(l,c,j,k) = v_vooo(c,j,k,l)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do i = 1, nO
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do l = 1, nO
|
||||
T_ovvo(l,a,b,i) = t2(i,l,a,b)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
!X_vvoo(b,c,k,j) * T1_vo(a,i) &
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
X_vvoo(b,c,k,j) = v_vvoo(b,c,j,k)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(1)
|
||||
do i = 1, nO
|
||||
do a = 1, nV
|
||||
T_vo(a,i) = t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
call wall_time(ta)
|
||||
energy = 0d0
|
||||
do i = 1, nO
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
delta_ijk = f_o(i) + f_o(j) + f_o(k)
|
||||
call form_w_ijk(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W_ijk)
|
||||
call form_v_ijk(nO,nV,i,j,k,T_vo,X_vvoo,W_ijk,V_ijk)
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(energy,nV,i,j,k,W_ijk,V_ijk,f_o,f_v,delta_ijk) &
|
||||
!$OMP PRIVATE(a,b,c,e,delta) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
e = 0d0
|
||||
!$OMP DO
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta = 1d0 / (delta_ijk - f_v(a) - f_v(b) - f_v(c))
|
||||
!energy = energy + (4d0 * W(i,j,k,a,b,c) + W(i,j,k,b,c,a) + W(i,j,k,c,a,b)) * (V(i,j,k,a,b,c) - V(i,j,k,c,b,a)) / (cc_space_f_o(i) + cc_space_f_o(j) + cc_space_f_o(k) - cc_space_f_v(a) - cc_space_f_v(b) - cc_space_f_v(c)) !delta_ooovvv(i,j,k,a,b,c)
|
||||
e = e + (4d0 * W_ijk(a,b,c) + W_ijk(b,c,a) + W_ijk(c,a,b)) &
|
||||
* (V_ijk(a,b,c) - V_ijk(c,b,a)) * delta
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP CRITICAL
|
||||
energy = energy + e
|
||||
!$OMP END CRITICAL
|
||||
!$OMP END PARALLEL
|
||||
enddo
|
||||
enddo
|
||||
call wall_time(tb)
|
||||
write(*,'(F12.2,A5,F12.2,A2)') dble(i)/dble(nO)*100d0, '% in ', tb - ta, ' s'
|
||||
enddo
|
||||
|
||||
energy = energy / 3d0
|
||||
|
||||
deallocate(W_ijk,V_ijk,X_vvvo,X_ovoo,T_vvoo,T_ovvo,T_vo)
|
||||
!deallocate(V,W)
|
||||
end
|
||||
|
||||
! W_ijk
|
||||
|
||||
subroutine form_w_ijk(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV,i,j,k
|
||||
!double precision, intent(in) :: t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: T_vvoo(nV,nV,nO,nO), T_ovvo(nO,nV,nV,nO)
|
||||
double precision, intent(in) :: X_vvvo(nV,nV,nV,nO), X_ovoo(nO,nV,nO,nO)
|
||||
double precision, intent(out) :: W(nV,nV,nV)!,nO,nO,nO)
|
||||
|
||||
integer :: l,a,b,c,d
|
||||
|
||||
!W = 0d0
|
||||
!do i = 1, nO
|
||||
! do j = 1, nO
|
||||
! do k = 1, nO
|
||||
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W) &
|
||||
!$OMP PRIVATE(a,b,c,d,l) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
W(a,b,c) = 0d0
|
||||
|
||||
do d = 1, nV
|
||||
!W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
W(a,b,c) = W(a,b,c) &
|
||||
! chem (bd|ai)
|
||||
! phys <ba|di>
|
||||
!+ cc_space_v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
!+ cc_space_v_vvvo(c,a,d,i) * t2(j,k,b,d) & ! bc kj
|
||||
!+ cc_space_v_vvvo(a,c,d,k) * t2(j,i,b,d) & ! prev ac ik
|
||||
!+ cc_space_v_vvvo(b,c,d,k) * t2(i,j,a,d) & ! prev ab ij
|
||||
!+ cc_space_v_vvvo(c,b,d,j) * t2(i,k,a,d) & ! prev bc kj
|
||||
!+ cc_space_v_vvvo(a,b,d,j) * t2(k,i,c,d) ! prev ac ik
|
||||
+ X_vvvo(d,b,a,i) * T_vvoo(d,c,k,j) &
|
||||
+ X_vvvo(d,c,a,i) * T_vvoo(d,b,j,k) & ! bc kj
|
||||
+ X_vvvo(d,a,c,k) * T_vvoo(d,b,j,i) & ! prev ac ik
|
||||
+ X_vvvo(d,b,c,k) * T_vvoo(d,a,i,j) & ! prev ab ij
|
||||
+ X_vvvo(d,c,b,j) * T_vvoo(d,a,i,k) & ! prev bc kj
|
||||
+ X_vvvo(d,a,b,j) * T_vvoo(d,c,k,i) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
|
||||
do l = 1, nO
|
||||
!W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
W(a,b,c) = W(a,b,c) &
|
||||
! chem (ck|jl)
|
||||
! phys <cj|kl>
|
||||
!- cc_space_v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
!- cc_space_v_vooo(b,k,j,l) * t2(i,l,a,c) & ! bc kj
|
||||
!- cc_space_v_vooo(b,i,j,l) * t2(k,l,c,a) & ! prev ac ik
|
||||
!- cc_space_v_vooo(a,j,i,l) * t2(k,l,c,b) & ! prev ab ij
|
||||
!- cc_space_v_vooo(a,k,i,l) * t2(j,l,b,c) & ! prev bc kj
|
||||
!- cc_space_v_vooo(c,i,k,l) * t2(j,l,b,a) ! prev ac ik
|
||||
- X_ovoo(l,c,j,k) * T_ovvo(l,a,b,i) &
|
||||
- X_ovoo(l,b,k,j) * T_ovvo(l,a,c,i) & ! bc kj
|
||||
- X_ovoo(l,b,i,j) * T_ovvo(l,c,a,k) & ! prev ac ik
|
||||
- X_ovoo(l,a,j,i) * T_ovvo(l,c,b,k) & ! prev ab ij
|
||||
- X_ovoo(l,a,k,i) * T_ovvo(l,b,c,j) & ! prev bc kj
|
||||
- X_ovoo(l,c,i,k) * T_ovvo(l,b,a,j) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! enddo
|
||||
! enddo
|
||||
!enddo
|
||||
|
||||
end
|
||||
|
||||
! V_ijk
|
||||
|
||||
subroutine form_v_ijk(nO,nV,i,j,k,T_vo,X_vvoo,w,v)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV,i,j,k
|
||||
!double precision, intent(in) :: t1(nO,nV)
|
||||
double precision, intent(in) :: T_vo(nV,nO)
|
||||
double precision, intent(in) :: X_vvoo(nV,nV,nO,nO)
|
||||
double precision, intent(in) :: W(nV,nV,nV)!,nO,nO,nO)
|
||||
double precision, intent(out) :: V(nV,nV,nV)!,nO,nO,nO)
|
||||
|
||||
integer :: a,b,c
|
||||
|
||||
!V = 0d0
|
||||
!do i = 1, nO
|
||||
! do j = 1, nO
|
||||
! do k = 1, nO
|
||||
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,i,j,k,T_vo,X_vvoo,W,V) &
|
||||
!$OMP PRIVATE(a,b,c) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
!V(i,j,k,a,b,c) = V(i,j,k,a,b,c) + W(i,j,k,a,b,c) &
|
||||
V(a,b,c) = W(a,b,c) &
|
||||
!+ cc_space_v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
!+ cc_space_v_vvoo(a,c,i,k) * t1(j,b) &
|
||||
!+ cc_space_v_vvoo(a,b,i,j) * t1(k,c)
|
||||
+ X_vvoo(b,c,k,j) * T_vo(a,i) &
|
||||
+ X_vvoo(a,c,k,i) * T_vo(b,j) &
|
||||
+ X_vvoo(a,b,j,i) * T_vo(c,k)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! enddo
|
||||
! enddo
|
||||
!enddo
|
||||
|
||||
end
|
376
src/ccsd/ccsd_t_spin_orb.irp.f
Normal file
376
src/ccsd/ccsd_t_spin_orb.irp.f
Normal file
@ -0,0 +1,376 @@
|
||||
! v1
|
||||
|
||||
subroutine ccsd_par_t_spin(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,v_vvvo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO, nV
|
||||
double precision, intent(in) :: t1(nO,nV), t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: f_o(nO), f_v(nV), f_ov(nO,nV)
|
||||
double precision, intent(in) :: v_ooov(nO,nO,nO,nV)
|
||||
double precision, intent(in) :: v_vvoo(nV,nV,nO,nO), v_vvvo(nV,nV,nV,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: t3(:,:,:,:,:,:), s(:,:)
|
||||
double precision :: e_t, e_st, e_dt, delta_abc, delta
|
||||
integer :: i,j,k,l,m,a,b,c,d,e
|
||||
|
||||
allocate(t3(nO,nO,nO,nV,nV,nV), s(nO,nV))
|
||||
|
||||
t3 = 0d0
|
||||
|
||||
! T3
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
do e = 1, nV
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) &
|
||||
+ t2(j,k,a,e) * v_vvvo(b,c,e,i) &
|
||||
- t2(i,k,a,e) * v_vvvo(b,c,e,j) & ! - P(ij)
|
||||
- t2(j,i,a,e) * v_vvvo(b,c,e,k) & ! - P(ik)
|
||||
- t2(j,k,b,e) * v_vvvo(a,c,e,i) & ! - P(ab)
|
||||
- t2(j,k,c,e) * v_vvvo(b,a,e,i) & ! - P(ac)
|
||||
+ t2(i,k,b,e) * v_vvvo(a,c,e,j) & ! + P(ij) P(ab)
|
||||
+ t2(i,k,c,e) * v_vvvo(b,a,e,j) & ! + P(ij) P(ac)
|
||||
+ t2(j,i,b,e) * v_vvvo(a,c,e,k) & ! + P(ik) P(ab)
|
||||
+ t2(j,i,c,e) * v_vvvo(b,a,e,k) ! + P(ik) P(ac)
|
||||
enddo
|
||||
do m = 1, nO
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) &
|
||||
+ t2(m,i,b,c) * v_ooov(j,k,m,a) &
|
||||
- t2(m,j,b,c) * v_ooov(i,k,m,a) & ! - P(ij)
|
||||
- t2(m,k,b,c) * v_ooov(j,i,m,a) & ! - P(ik)
|
||||
- t2(m,i,a,c) * v_ooov(j,k,m,b) & ! - P(ab)
|
||||
- t2(m,i,b,a) * v_ooov(j,k,m,c) & ! - P(ac)
|
||||
+ t2(m,j,a,c) * v_ooov(i,k,m,b) & ! + P(ij) P(ab)
|
||||
+ t2(m,j,b,a) * v_ooov(i,k,m,c) & ! + P(ij) P(ac)
|
||||
+ t2(m,k,a,c) * v_ooov(j,i,m,b) & ! + P(ik) P(ab)
|
||||
+ t2(m,k,b,a) * v_ooov(j,i,m,c) ! + P(ik) P(ac)
|
||||
enddo
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) * (1d0 / delta)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
|
||||
! E_T
|
||||
e_t = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
e_t = e_t + t3(i,j,k,a,b,c) * delta * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
e_t = e_t / 36d0
|
||||
|
||||
! E_ST
|
||||
s = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
s(i,a) = s(i,a) + v_vvoo(b,c,j,k) * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
e_st = 0d0
|
||||
do a = 1, nV
|
||||
do i = 1, nO
|
||||
e_st = e_st + s(i,a) * t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
e_st = e_st * 0.25d0
|
||||
|
||||
! E_DT
|
||||
e_dt = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
e_dt = e_dt + t2(i,j,a,b) * f_ov(k,c) * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
e_dt = e_dt * 0.25d0
|
||||
|
||||
! (T)
|
||||
!print*,e_t,e_st,e_dt
|
||||
energy = e_t + e_st + e_dt
|
||||
|
||||
deallocate(t3,s)
|
||||
|
||||
end
|
||||
|
||||
! v2
|
||||
|
||||
subroutine ccsd_par_t_spin_v2(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO, nV
|
||||
double precision, intent(in) :: t1(nO,nV), t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: f_o(nO), f_v(nV), f_ov(nO,nV)
|
||||
double precision, intent(in) :: v_ooov(nO,nO,nO,nV)
|
||||
double precision, intent(in) :: v_vvoo(nV,nV,nO,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: t3_bc(:,:,:,:), s(:,:), e_t(:), e_dt(:)
|
||||
double precision, allocatable :: A_vovv(:,:,:,:), v_vvvo(:,:,:,:)
|
||||
double precision, allocatable :: T_voov(:,:,:,:), B_ooov(:,:,:,:)
|
||||
double precision :: e_st, delta_abc, delta, ta, tb
|
||||
integer :: i,j,k,l,m,a,b,c,d,e
|
||||
|
||||
allocate(t3_bc(nO,nO,nO,nV), s(nO,nV), e_t(nV), e_dt(nV))
|
||||
allocate(A_vovv(nV,nO,nV,nV),v_vvvo(nV,nV,nV,nO),T_voov(nV,nO,nO,nV),B_ooov(nO,nO,nO,nV))
|
||||
|
||||
call gen_v_spin(cc_nV_m,cc_nV_m,cc_nV_m,cc_nO_m, &
|
||||
cc_nV_S,cc_nV_S,cc_nV_S,cc_nO_S, &
|
||||
cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, &
|
||||
nV,nV,nV,nO, v_vvvo)
|
||||
|
||||
! Init
|
||||
s = 0d0
|
||||
e_t = 0d0
|
||||
e_st = 0d0
|
||||
e_dt = 0d0
|
||||
|
||||
call wall_time(ta)
|
||||
!$OMP PARALLEL &
|
||||
!$OMP PRIVATE(i,j,k,m,a,b,c,e) &
|
||||
!$OMP SHARED(A_vovv,ta,tb,t3_bc,s,e_t,e_st,e_dt,t2,v_vvvo,v_ooov, &
|
||||
!$OMP v_vvoo,f_o,f_v,f_ov,delta,delta_abc,nO,nV,T_voov,B_ooov) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do i = 1, nO
|
||||
do e = 1, nV
|
||||
A_vovv(e,i,b,c) = v_vvvo(b,c,e,i)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$omp do collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do e = 1, nV
|
||||
T_voov(e,j,k,a) = t2(j,k,a,e)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$omp end do nowait
|
||||
|
||||
!$omp do collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do m = 1, nO
|
||||
B_ooov(m,j,k,a) = v_ooov(j,k,m,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$omp end do
|
||||
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
|
||||
! T3(:,:,:,:,b,c)
|
||||
! Init
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
t3_bc(i,j,k,a) = 0d0
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
do e = 1, nV
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) &
|
||||
!+ t2(j,k,a,e) * v_vvvo(b,c,e,i) &
|
||||
!- t2(i,k,a,e) * v_vvvo(b,c,e,j) & ! - P(ij)
|
||||
!- t2(j,i,a,e) * v_vvvo(b,c,e,k) & ! - P(ik)
|
||||
!- t2(j,k,b,e) * v_vvvo(a,c,e,i) & ! - P(ab)
|
||||
!- t2(j,k,c,e) * v_vvvo(b,a,e,i) & ! - P(ac)
|
||||
!+ t2(i,k,b,e) * v_vvvo(a,c,e,j) & ! + P(ij) P(ab)
|
||||
!+ t2(i,k,c,e) * v_vvvo(b,a,e,j) & ! + P(ij) P(ac)
|
||||
!+ t2(j,i,b,e) * v_vvvo(a,c,e,k) & ! + P(ik) P(ab)
|
||||
!+ t2(j,i,c,e) * v_vvvo(b,a,e,k) ! + P(ik) P(ac)
|
||||
+ T_voov(e,j,k,a) * A_vovv(e,i,b,c) &
|
||||
- T_voov(e,i,k,a) * A_vovv(e,j,b,c) & ! - P(ij)
|
||||
- T_voov(e,j,i,a) * A_vovv(e,k,b,c) & ! - P(ik)
|
||||
- T_voov(e,j,k,b) * A_vovv(e,i,a,c) & ! - P(ab)
|
||||
- T_voov(e,j,k,c) * A_vovv(e,i,b,a) & ! - P(ac)
|
||||
+ T_voov(e,i,k,b) * A_vovv(e,j,a,c) & ! + P(ij) P(ab)
|
||||
+ T_voov(e,i,k,c) * A_vovv(e,j,b,a) & ! + P(ij) P(ac)
|
||||
+ T_voov(e,j,i,b) * A_vovv(e,k,a,c) & ! + P(ik) P(ab)
|
||||
+ T_voov(e,j,i,c) * A_vovv(e,k,b,a) ! + P(ik) P(ac)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
do m = 1, nO
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) &
|
||||
!+ t2(m,i,b,c) * v_ooov(j,k,m,a) &
|
||||
!- t2(m,j,b,c) * v_ooov(i,k,m,a) & ! - P(ij)
|
||||
!- t2(m,k,b,c) * v_ooov(j,i,m,a) & ! - P(ik)
|
||||
!- t2(m,i,a,c) * v_ooov(j,k,m,b) & ! - P(ab)
|
||||
!- t2(m,i,b,a) * v_ooov(j,k,m,c) & ! - P(ac)
|
||||
!+ t2(m,j,a,c) * v_ooov(i,k,m,b) & ! + P(ij) P(ab)
|
||||
!+ t2(m,j,b,a) * v_ooov(i,k,m,c) & ! + P(ij) P(ac)
|
||||
!+ t2(m,k,a,c) * v_ooov(j,i,m,b) & ! + P(ik) P(ab)
|
||||
!+ t2(m,k,b,a) * v_ooov(j,i,m,c) ! + P(ik) P(ac)
|
||||
+ t2(m,i,b,c) * B_ooov(m,j,k,a) &
|
||||
- t2(m,j,b,c) * B_ooov(m,i,k,a) & ! - P(ij)
|
||||
- t2(m,k,b,c) * B_ooov(m,j,i,a) & ! - P(ik)
|
||||
- t2(m,i,a,c) * B_ooov(m,j,k,b) & ! - P(ab)
|
||||
- t2(m,i,b,a) * B_ooov(m,j,k,c) & ! - P(ac)
|
||||
+ t2(m,j,a,c) * B_ooov(m,i,k,b) & ! + P(ij) P(ab)
|
||||
+ t2(m,j,b,a) * B_ooov(m,i,k,c) & ! + P(ij) P(ac)
|
||||
+ t2(m,k,a,c) * B_ooov(m,j,i,b) & ! + P(ik) P(ab)
|
||||
+ t2(m,k,b,a) * B_ooov(m,j,i,c) ! + P(ik) P(ac)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) * (1d0 / delta)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
! E_T
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
e_t(a) = e_t(a) + t3_bc(i,j,k,a) * delta * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
! E_ST
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
s(i,a) = s(i,a) + v_vvoo(b,c,j,k) * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
! E_DT
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
e_dt(a) = e_dt(a) + t2(i,j,a,b) * f_ov(k,c) * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
enddo
|
||||
!$OMP MASTER
|
||||
call wall_time(tb)
|
||||
write(*,'(A1,F6.2,A5,F10.2,A2)') ' ', dble(c)/dble(nV)*100d0, '% in ', tb-ta, ' s'
|
||||
!$OMP END MASTER
|
||||
enddo
|
||||
!$OMP END PARALLEL
|
||||
|
||||
do a = 2, nV
|
||||
e_t(1) = e_t(1) + e_t(a)
|
||||
enddo
|
||||
|
||||
do a = 2, nV
|
||||
e_dt(1) = e_dt(1) + e_dt(a)
|
||||
enddo
|
||||
|
||||
e_t = e_t / 36d0
|
||||
|
||||
do a = 1, nV
|
||||
do i = 1, nO
|
||||
e_st = e_st + s(i,a) * t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
e_st = e_st * 0.25d0
|
||||
|
||||
e_dt = e_dt * 0.25d0
|
||||
|
||||
! (T)
|
||||
!print*,e_t(1),e_st,e_dt(1)
|
||||
energy = e_t(1) + e_st + e_dt(1)
|
||||
|
||||
deallocate(t3_bc,s)
|
||||
|
||||
end
|
2121
src/ccsd/org/ccsd_space_orb.org
Normal file
2121
src/ccsd/org/ccsd_space_orb.org
Normal file
File diff suppressed because it is too large
Load Diff
2352
src/ccsd/org/ccsd_spin_orb.org
Normal file
2352
src/ccsd/org/ccsd_spin_orb.org
Normal file
File diff suppressed because it is too large
Load Diff
428
src/ccsd/org/ccsd_t_space_orb.org
Normal file
428
src/ccsd/org/ccsd_t_space_orb.org
Normal file
@ -0,0 +1,428 @@
|
||||
Ref:
|
||||
Integral-Direct and Parallel Implementation of the CCSD(T) Method:
|
||||
Algorithmic Developments and Large-Scale Applications
|
||||
László Gyevi-Nagy, Mihály Kállay, and Péter R. Nagy
|
||||
J. Chem. Theory Comput. 2020, 16, 1, 366–384
|
||||
https://doi.org/10.1021/acs.jctc.9b00957
|
||||
|
||||
* Dumb way
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine ccsd_par_t_space(nO,nV,t1,t2,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO, nV)
|
||||
double precision, intent(in) :: t2(nO, nO, nV, nV)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: W(:,:,:,:,:,:)
|
||||
double precision, allocatable :: V(:,:,:,:,:,:)
|
||||
integer :: i,j,k,a,b,c
|
||||
|
||||
allocate(W(nO,nO,nO,nV,nV,nV))
|
||||
allocate(V(nO,nO,nO,nV,nV,nV))
|
||||
|
||||
call form_w(nO,nV,t2,W)
|
||||
call form_v(nO,nV,t1,W,V)
|
||||
|
||||
energy = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
energy = energy + (4d0 * W(i,j,k,a,b,c) + W(i,j,k,b,c,a) + W(i,j,k,c,a,b)) * (V(i,j,k,a,b,c) - V(i,j,k,c,b,a)) / (cc_space_f_o(i) + cc_space_f_o(j) + cc_space_f_o(k) - cc_space_f_v(a) - cc_space_f_v(b) - cc_space_f_v(c)) !delta_ooovvv(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
energy = energy / 3d0
|
||||
|
||||
deallocate(V,W)
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine form_w(nO,nV,t2,W)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t2(nO, nO, nV, nV)
|
||||
double precision, intent(out) :: W(nO, nO, nO, nV, nV, nV)
|
||||
|
||||
integer :: i,j,k,l,a,b,c,d
|
||||
|
||||
W = 0d0
|
||||
do c = 1, nV
|
||||
print*,'W:',c,'/',nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
|
||||
do d = 1, nV
|
||||
W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
! chem (bd|ai)
|
||||
! phys <ba|di>
|
||||
+ cc_space_v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
+ cc_space_v_vvvo(c,a,d,i) * t2(j,k,b,d) & ! bc kj
|
||||
+ cc_space_v_vvvo(a,c,d,k) * t2(j,i,b,d) & ! prev ac ik
|
||||
+ cc_space_v_vvvo(b,c,d,k) * t2(i,j,a,d) & ! prev ab ij
|
||||
+ cc_space_v_vvvo(c,b,d,j) * t2(i,k,a,d) & ! prev bc kj
|
||||
+ cc_space_v_vvvo(a,b,d,j) * t2(k,i,c,d) ! prev ac ik
|
||||
enddo
|
||||
|
||||
do l = 1, nO
|
||||
W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
! chem (ck|jl)
|
||||
! phys <cj|kl>
|
||||
- cc_space_v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
- cc_space_v_vooo(b,k,j,l) * t2(i,l,a,c) & ! bc kj
|
||||
- cc_space_v_vooo(b,i,j,l) * t2(k,l,c,a) & ! prev ac ik
|
||||
- cc_space_v_vooo(a,j,i,l) * t2(k,l,c,b) & ! prev ab ij
|
||||
- cc_space_v_vooo(a,k,i,l) * t2(j,l,b,c) & ! prev bc kj
|
||||
- cc_space_v_vooo(c,i,k,l) * t2(j,l,b,a) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine form_v(nO,nV,t1,w,v)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO, nV)
|
||||
double precision, intent(in) :: W(nO, nO, nO, nV, nV, nV)
|
||||
double precision, intent(out) :: V(nO, nO, nO, nV, nV, nV)
|
||||
|
||||
integer :: i,j,k,a,b,c
|
||||
|
||||
V = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
V(i,j,k,a,b,c) = V(i,j,k,a,b,c) + W(i,j,k,a,b,c) &
|
||||
+ cc_space_v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
+ cc_space_v_vvoo(a,c,i,k) * t1(j,b) &
|
||||
+ cc_space_v_vvoo(a,b,i,j) * t1(k,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
* Better way
|
||||
** Main
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine ccsd_par_t_space_v2(nO,nV,t1,t2,f_o,f_v,v_vvvo,v_vvoo,v_vooo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV
|
||||
double precision, intent(in) :: t1(nO,nV), f_o(nO), f_v(nV)
|
||||
double precision, intent(in) :: t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: v_vvvo(nV,nV,nV,nO), v_vvoo(nV,nV,nO,nO), v_vooo(nV,nO,nO,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: W(:,:,:,:,:,:)
|
||||
double precision, allocatable :: V(:,:,:,:,:,:)
|
||||
double precision, allocatable :: W_ijk(:,:,:), V_ijk(:,:,:)
|
||||
double precision, allocatable :: X_vvvo(:,:,:,:), X_ovoo(:,:,:,:), X_vvoo(:,:,:,:)
|
||||
double precision, allocatable :: T_vvoo(:,:,:,:), T_ovvo(:,:,:,:), T_vo(:,:)
|
||||
integer :: i,j,k,l,a,b,c,d
|
||||
double precision :: e,ta,tb, delta, delta_ijk
|
||||
|
||||
!allocate(W(nV,nV,nV,nO,nO,nO))
|
||||
!allocate(V(nV,nV,nV,nO,nO,nO))
|
||||
allocate(W_ijk(nV,nV,nV), V_ijk(nV,nV,nV))
|
||||
allocate(X_vvvo(nV,nV,nV,nO), X_ovoo(nO,nV,nO,nO), X_vvoo(nV,nV,nO,nO))
|
||||
allocate(T_vvoo(nV,nV,nO,nO), T_ovvo(nO,nV,nV,nO), T_vo(nV,nO))
|
||||
|
||||
! Temporary arrays
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,T_vvoo,T_ovvo,T_vo,X_vvvo,X_ovoo,X_vvoo, &
|
||||
!$OMP t1,t2,v_vvvo,v_vooo,v_vvoo) &
|
||||
!$OMP PRIVATE(a,b,c,d,i,j,k,l) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
|
||||
!v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
!X_vvvo(d,b,a,i) * T_vvoo(d,c,k,j)
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do i = 1, nO
|
||||
do a = 1, nV
|
||||
do b = 1, nV
|
||||
do d = 1, nV
|
||||
X_vvvo(d,b,a,i) = v_vvvo(b,a,d,i)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
do c = 1, nV
|
||||
do d = 1, nV
|
||||
T_vvoo(d,c,k,j) = t2(k,j,c,d)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
!X_ovoo(l,c,j,k) * T_ovvo(l,a,b,i) &
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do c = 1, nV
|
||||
do l = 1, nO
|
||||
X_ovoo(l,c,j,k) = v_vooo(c,j,k,l)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do i = 1, nO
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do l = 1, nO
|
||||
T_ovvo(l,a,b,i) = t2(i,l,a,b)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
!X_vvoo(b,c,k,j) * T1_vo(a,i) &
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
X_vvoo(b,c,k,j) = v_vvoo(b,c,j,k)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(1)
|
||||
do i = 1, nO
|
||||
do a = 1, nV
|
||||
T_vo(a,i) = t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
call wall_time(ta)
|
||||
energy = 0d0
|
||||
do i = 1, nO
|
||||
do j = 1, nO
|
||||
do k = 1, nO
|
||||
delta_ijk = f_o(i) + f_o(j) + f_o(k)
|
||||
call form_w_ijk(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W_ijk)
|
||||
call form_v_ijk(nO,nV,i,j,k,T_vo,X_vvoo,W_ijk,V_ijk)
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(energy,nV,i,j,k,W_ijk,V_ijk,f_o,f_v,delta_ijk) &
|
||||
!$OMP PRIVATE(a,b,c,e,delta) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
e = 0d0
|
||||
!$OMP DO
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta = 1d0 / (delta_ijk - f_v(a) - f_v(b) - f_v(c))
|
||||
!energy = energy + (4d0 * W(i,j,k,a,b,c) + W(i,j,k,b,c,a) + W(i,j,k,c,a,b)) * (V(i,j,k,a,b,c) - V(i,j,k,c,b,a)) / (cc_space_f_o(i) + cc_space_f_o(j) + cc_space_f_o(k) - cc_space_f_v(a) - cc_space_f_v(b) - cc_space_f_v(c)) !delta_ooovvv(i,j,k,a,b,c)
|
||||
e = e + (4d0 * W_ijk(a,b,c) + W_ijk(b,c,a) + W_ijk(c,a,b)) &
|
||||
* (V_ijk(a,b,c) - V_ijk(c,b,a)) * delta
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP CRITICAL
|
||||
energy = energy + e
|
||||
!$OMP END CRITICAL
|
||||
!$OMP END PARALLEL
|
||||
enddo
|
||||
enddo
|
||||
call wall_time(tb)
|
||||
write(*,'(F12.2,A5,F12.2,A2)') dble(i)/dble(nO)*100d0, '% in ', tb - ta, ' s'
|
||||
enddo
|
||||
|
||||
energy = energy / 3d0
|
||||
|
||||
deallocate(W_ijk,V_ijk,X_vvvo,X_ovoo,T_vvoo,T_ovvo,T_vo)
|
||||
!deallocate(V,W)
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
** W_ijk
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine form_w_ijk(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV,i,j,k
|
||||
!double precision, intent(in) :: t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: T_vvoo(nV,nV,nO,nO), T_ovvo(nO,nV,nV,nO)
|
||||
double precision, intent(in) :: X_vvvo(nV,nV,nV,nO), X_ovoo(nO,nV,nO,nO)
|
||||
double precision, intent(out) :: W(nV,nV,nV)!,nO,nO,nO)
|
||||
|
||||
integer :: l,a,b,c,d
|
||||
|
||||
!W = 0d0
|
||||
!do i = 1, nO
|
||||
! do j = 1, nO
|
||||
! do k = 1, nO
|
||||
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,i,j,k,T_vvoo,T_ovvo,X_vvvo,X_ovoo,W) &
|
||||
!$OMP PRIVATE(a,b,c,d,l) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
W(a,b,c) = 0d0
|
||||
|
||||
do d = 1, nV
|
||||
!W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
W(a,b,c) = W(a,b,c) &
|
||||
! chem (bd|ai)
|
||||
! phys <ba|di>
|
||||
!+ cc_space_v_vvvo(b,a,d,i) * t2(k,j,c,d) &
|
||||
!+ cc_space_v_vvvo(c,a,d,i) * t2(j,k,b,d) & ! bc kj
|
||||
!+ cc_space_v_vvvo(a,c,d,k) * t2(j,i,b,d) & ! prev ac ik
|
||||
!+ cc_space_v_vvvo(b,c,d,k) * t2(i,j,a,d) & ! prev ab ij
|
||||
!+ cc_space_v_vvvo(c,b,d,j) * t2(i,k,a,d) & ! prev bc kj
|
||||
!+ cc_space_v_vvvo(a,b,d,j) * t2(k,i,c,d) ! prev ac ik
|
||||
+ X_vvvo(d,b,a,i) * T_vvoo(d,c,k,j) &
|
||||
+ X_vvvo(d,c,a,i) * T_vvoo(d,b,j,k) & ! bc kj
|
||||
+ X_vvvo(d,a,c,k) * T_vvoo(d,b,j,i) & ! prev ac ik
|
||||
+ X_vvvo(d,b,c,k) * T_vvoo(d,a,i,j) & ! prev ab ij
|
||||
+ X_vvvo(d,c,b,j) * T_vvoo(d,a,i,k) & ! prev bc kj
|
||||
+ X_vvvo(d,a,b,j) * T_vvoo(d,c,k,i) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
|
||||
do l = 1, nO
|
||||
!W(i,j,k,a,b,c) = W(i,j,k,a,b,c) &
|
||||
W(a,b,c) = W(a,b,c) &
|
||||
! chem (ck|jl)
|
||||
! phys <cj|kl>
|
||||
!- cc_space_v_vooo(c,j,k,l) * t2(i,l,a,b) &
|
||||
!- cc_space_v_vooo(b,k,j,l) * t2(i,l,a,c) & ! bc kj
|
||||
!- cc_space_v_vooo(b,i,j,l) * t2(k,l,c,a) & ! prev ac ik
|
||||
!- cc_space_v_vooo(a,j,i,l) * t2(k,l,c,b) & ! prev ab ij
|
||||
!- cc_space_v_vooo(a,k,i,l) * t2(j,l,b,c) & ! prev bc kj
|
||||
!- cc_space_v_vooo(c,i,k,l) * t2(j,l,b,a) ! prev ac ik
|
||||
- X_ovoo(l,c,j,k) * T_ovvo(l,a,b,i) &
|
||||
- X_ovoo(l,b,k,j) * T_ovvo(l,a,c,i) & ! bc kj
|
||||
- X_ovoo(l,b,i,j) * T_ovvo(l,c,a,k) & ! prev ac ik
|
||||
- X_ovoo(l,a,j,i) * T_ovvo(l,c,b,k) & ! prev ab ij
|
||||
- X_ovoo(l,a,k,i) * T_ovvo(l,b,c,j) & ! prev bc kj
|
||||
- X_ovoo(l,c,i,k) * T_ovvo(l,b,a,j) ! prev ac ik
|
||||
enddo
|
||||
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! enddo
|
||||
! enddo
|
||||
!enddo
|
||||
|
||||
end
|
||||
#+END_SRC
|
||||
|
||||
** V_ijk
|
||||
#+BEGIN_SRC f90 :comments org :tangle ccsd_t_space_orb.irp.f
|
||||
subroutine form_v_ijk(nO,nV,i,j,k,T_vo,X_vvoo,w,v)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO,nV,i,j,k
|
||||
!double precision, intent(in) :: t1(nO,nV)
|
||||
double precision, intent(in) :: T_vo(nV,nO)
|
||||
double precision, intent(in) :: X_vvoo(nV,nV,nO,nO)
|
||||
double precision, intent(in) :: W(nV,nV,nV)!,nO,nO,nO)
|
||||
double precision, intent(out) :: V(nV,nV,nV)!,nO,nO,nO)
|
||||
|
||||
integer :: a,b,c
|
||||
|
||||
!V = 0d0
|
||||
!do i = 1, nO
|
||||
! do j = 1, nO
|
||||
! do k = 1, nO
|
||||
|
||||
!$OMP PARALLEL &
|
||||
!$OMP SHARED(nO,nV,i,j,k,T_vo,X_vvoo,W,V) &
|
||||
!$OMP PRIVATE(a,b,c) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
!$OMP DO collapse(2)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
!V(i,j,k,a,b,c) = V(i,j,k,a,b,c) + W(i,j,k,a,b,c) &
|
||||
V(a,b,c) = W(a,b,c) &
|
||||
!+ cc_space_v_vvoo(b,c,j,k) * t1(i,a) &
|
||||
!+ cc_space_v_vvoo(a,c,i,k) * t1(j,b) &
|
||||
!+ cc_space_v_vvoo(a,b,i,j) * t1(k,c)
|
||||
+ X_vvoo(b,c,k,j) * T_vo(a,i) &
|
||||
+ X_vvoo(a,c,k,i) * T_vo(b,j) &
|
||||
+ X_vvoo(a,b,j,i) * T_vo(c,k)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! enddo
|
||||
! enddo
|
||||
!enddo
|
||||
|
||||
end
|
||||
#+END_SRC
|
385
src/ccsd/org/ccsd_t_spin_orb.org
Normal file
385
src/ccsd/org/ccsd_t_spin_orb.org
Normal file
@ -0,0 +1,385 @@
|
||||
* CCSD(T) spin orb
|
||||
|
||||
Ref:
|
||||
John D. Watts, Jürgen Gauss, and Rodney J. Bartlett
|
||||
J. Chem. Phys. 98, 8718 (1993)
|
||||
http://dx.doi.org/10.1063/1.464480
|
||||
|
||||
** v1
|
||||
#+begin_src f90 :comments org :tangle ccsd_t_spin_orb.irp.f
|
||||
subroutine ccsd_par_t_spin(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,v_vvvo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO, nV
|
||||
double precision, intent(in) :: t1(nO,nV), t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: f_o(nO), f_v(nV), f_ov(nO,nV)
|
||||
double precision, intent(in) :: v_ooov(nO,nO,nO,nV)
|
||||
double precision, intent(in) :: v_vvoo(nV,nV,nO,nO), v_vvvo(nV,nV,nV,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: t3(:,:,:,:,:,:), s(:,:)
|
||||
double precision :: e_t, e_st, e_dt, delta_abc, delta
|
||||
integer :: i,j,k,l,m,a,b,c,d,e
|
||||
|
||||
allocate(t3(nO,nO,nO,nV,nV,nV), s(nO,nV))
|
||||
|
||||
t3 = 0d0
|
||||
|
||||
! T3
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
do e = 1, nV
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) &
|
||||
+ t2(j,k,a,e) * v_vvvo(b,c,e,i) &
|
||||
- t2(i,k,a,e) * v_vvvo(b,c,e,j) & ! - P(ij)
|
||||
- t2(j,i,a,e) * v_vvvo(b,c,e,k) & ! - P(ik)
|
||||
- t2(j,k,b,e) * v_vvvo(a,c,e,i) & ! - P(ab)
|
||||
- t2(j,k,c,e) * v_vvvo(b,a,e,i) & ! - P(ac)
|
||||
+ t2(i,k,b,e) * v_vvvo(a,c,e,j) & ! + P(ij) P(ab)
|
||||
+ t2(i,k,c,e) * v_vvvo(b,a,e,j) & ! + P(ij) P(ac)
|
||||
+ t2(j,i,b,e) * v_vvvo(a,c,e,k) & ! + P(ik) P(ab)
|
||||
+ t2(j,i,c,e) * v_vvvo(b,a,e,k) ! + P(ik) P(ac)
|
||||
enddo
|
||||
do m = 1, nO
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) &
|
||||
+ t2(m,i,b,c) * v_ooov(j,k,m,a) &
|
||||
- t2(m,j,b,c) * v_ooov(i,k,m,a) & ! - P(ij)
|
||||
- t2(m,k,b,c) * v_ooov(j,i,m,a) & ! - P(ik)
|
||||
- t2(m,i,a,c) * v_ooov(j,k,m,b) & ! - P(ab)
|
||||
- t2(m,i,b,a) * v_ooov(j,k,m,c) & ! - P(ac)
|
||||
+ t2(m,j,a,c) * v_ooov(i,k,m,b) & ! + P(ij) P(ab)
|
||||
+ t2(m,j,b,a) * v_ooov(i,k,m,c) & ! + P(ij) P(ac)
|
||||
+ t2(m,k,a,c) * v_ooov(j,i,m,b) & ! + P(ik) P(ab)
|
||||
+ t2(m,k,b,a) * v_ooov(j,i,m,c) ! + P(ik) P(ac)
|
||||
enddo
|
||||
t3(i,j,k,a,b,c) = t3(i,j,k,a,b,c) * (1d0 / delta)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
|
||||
! E_T
|
||||
e_t = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
e_t = e_t + t3(i,j,k,a,b,c) * delta * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
e_t = e_t / 36d0
|
||||
|
||||
! E_ST
|
||||
s = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
s(i,a) = s(i,a) + v_vvoo(b,c,j,k) * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
e_st = 0d0
|
||||
do a = 1, nV
|
||||
do i = 1, nO
|
||||
e_st = e_st + s(i,a) * t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
e_st = e_st * 0.25d0
|
||||
|
||||
! E_DT
|
||||
e_dt = 0d0
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
e_dt = e_dt + t2(i,j,a,b) * f_ov(k,c) * t3(i,j,k,a,b,c)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
e_dt = e_dt * 0.25d0
|
||||
|
||||
! (T)
|
||||
!print*,e_t,e_st,e_dt
|
||||
energy = e_t + e_st + e_dt
|
||||
|
||||
deallocate(t3,s)
|
||||
|
||||
end
|
||||
#+end_src
|
||||
|
||||
** v2
|
||||
#+begin_src f90 :comments org :tangle ccsd_t_spin_orb.irp.f
|
||||
subroutine ccsd_par_t_spin_v2(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,energy)
|
||||
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: nO, nV
|
||||
double precision, intent(in) :: t1(nO,nV), t2(nO,nO,nV,nV)
|
||||
double precision, intent(in) :: f_o(nO), f_v(nV), f_ov(nO,nV)
|
||||
double precision, intent(in) :: v_ooov(nO,nO,nO,nV)
|
||||
double precision, intent(in) :: v_vvoo(nV,nV,nO,nO)
|
||||
double precision, intent(out) :: energy
|
||||
|
||||
double precision, allocatable :: t3_bc(:,:,:,:), s(:,:), e_t(:), e_dt(:)
|
||||
double precision, allocatable :: A_vovv(:,:,:,:), v_vvvo(:,:,:,:)
|
||||
double precision, allocatable :: T_voov(:,:,:,:), B_ooov(:,:,:,:)
|
||||
double precision :: e_st, delta_abc, delta, ta, tb
|
||||
integer :: i,j,k,l,m,a,b,c,d,e
|
||||
|
||||
allocate(t3_bc(nO,nO,nO,nV), s(nO,nV), e_t(nV), e_dt(nV))
|
||||
allocate(A_vovv(nV,nO,nV,nV),v_vvvo(nV,nV,nV,nO),T_voov(nV,nO,nO,nV),B_ooov(nO,nO,nO,nV))
|
||||
|
||||
call gen_v_spin(cc_nV_m,cc_nV_m,cc_nV_m,cc_nO_m, &
|
||||
cc_nV_S,cc_nV_S,cc_nV_S,cc_nO_S, &
|
||||
cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, &
|
||||
nV,nV,nV,nO, v_vvvo)
|
||||
|
||||
! Init
|
||||
s = 0d0
|
||||
e_t = 0d0
|
||||
e_st = 0d0
|
||||
e_dt = 0d0
|
||||
|
||||
call wall_time(ta)
|
||||
!$OMP PARALLEL &
|
||||
!$OMP PRIVATE(i,j,k,m,a,b,c,e) &
|
||||
!$OMP SHARED(A_vovv,ta,tb,t3_bc,s,e_t,e_st,e_dt,t2,v_vvvo,v_ooov, &
|
||||
!$OMP v_vvoo,f_o,f_v,f_ov,delta,delta_abc,nO,nV,T_voov,B_ooov) &
|
||||
!$OMP DEFAULT(NONE)
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
do i = 1, nO
|
||||
do e = 1, nV
|
||||
A_vovv(e,i,b,c) = v_vvvo(b,c,e,i)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
!$omp do collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do e = 1, nV
|
||||
T_voov(e,j,k,a) = t2(j,k,a,e)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$omp end do nowait
|
||||
|
||||
!$omp do collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do m = 1, nO
|
||||
B_ooov(m,j,k,a) = v_ooov(j,k,m,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$omp end do
|
||||
|
||||
do c = 1, nV
|
||||
do b = 1, nV
|
||||
|
||||
! T3(:,:,:,:,b,c)
|
||||
! Init
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
t3_bc(i,j,k,a) = 0d0
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
do e = 1, nV
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) &
|
||||
!+ t2(j,k,a,e) * v_vvvo(b,c,e,i) &
|
||||
!- t2(i,k,a,e) * v_vvvo(b,c,e,j) & ! - P(ij)
|
||||
!- t2(j,i,a,e) * v_vvvo(b,c,e,k) & ! - P(ik)
|
||||
!- t2(j,k,b,e) * v_vvvo(a,c,e,i) & ! - P(ab)
|
||||
!- t2(j,k,c,e) * v_vvvo(b,a,e,i) & ! - P(ac)
|
||||
!+ t2(i,k,b,e) * v_vvvo(a,c,e,j) & ! + P(ij) P(ab)
|
||||
!+ t2(i,k,c,e) * v_vvvo(b,a,e,j) & ! + P(ij) P(ac)
|
||||
!+ t2(j,i,b,e) * v_vvvo(a,c,e,k) & ! + P(ik) P(ab)
|
||||
!+ t2(j,i,c,e) * v_vvvo(b,a,e,k) ! + P(ik) P(ac)
|
||||
+ T_voov(e,j,k,a) * A_vovv(e,i,b,c) &
|
||||
- T_voov(e,i,k,a) * A_vovv(e,j,b,c) & ! - P(ij)
|
||||
- T_voov(e,j,i,a) * A_vovv(e,k,b,c) & ! - P(ik)
|
||||
- T_voov(e,j,k,b) * A_vovv(e,i,a,c) & ! - P(ab)
|
||||
- T_voov(e,j,k,c) * A_vovv(e,i,b,a) & ! - P(ac)
|
||||
+ T_voov(e,i,k,b) * A_vovv(e,j,a,c) & ! + P(ij) P(ab)
|
||||
+ T_voov(e,i,k,c) * A_vovv(e,j,b,a) & ! + P(ij) P(ac)
|
||||
+ T_voov(e,j,i,b) * A_vovv(e,k,a,c) & ! + P(ik) P(ab)
|
||||
+ T_voov(e,j,i,c) * A_vovv(e,k,b,a) ! + P(ik) P(ac)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO collapse(3)
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
do m = 1, nO
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) &
|
||||
!+ t2(m,i,b,c) * v_ooov(j,k,m,a) &
|
||||
!- t2(m,j,b,c) * v_ooov(i,k,m,a) & ! - P(ij)
|
||||
!- t2(m,k,b,c) * v_ooov(j,i,m,a) & ! - P(ik)
|
||||
!- t2(m,i,a,c) * v_ooov(j,k,m,b) & ! - P(ab)
|
||||
!- t2(m,i,b,a) * v_ooov(j,k,m,c) & ! - P(ac)
|
||||
!+ t2(m,j,a,c) * v_ooov(i,k,m,b) & ! + P(ij) P(ab)
|
||||
!+ t2(m,j,b,a) * v_ooov(i,k,m,c) & ! + P(ij) P(ac)
|
||||
!+ t2(m,k,a,c) * v_ooov(j,i,m,b) & ! + P(ik) P(ab)
|
||||
!+ t2(m,k,b,a) * v_ooov(j,i,m,c) ! + P(ik) P(ac)
|
||||
+ t2(m,i,b,c) * B_ooov(m,j,k,a) &
|
||||
- t2(m,j,b,c) * B_ooov(m,i,k,a) & ! - P(ij)
|
||||
- t2(m,k,b,c) * B_ooov(m,j,i,a) & ! - P(ik)
|
||||
- t2(m,i,a,c) * B_ooov(m,j,k,b) & ! - P(ab)
|
||||
- t2(m,i,b,a) * B_ooov(m,j,k,c) & ! - P(ac)
|
||||
+ t2(m,j,a,c) * B_ooov(m,i,k,b) & ! + P(ij) P(ab)
|
||||
+ t2(m,j,b,a) * B_ooov(m,i,k,c) & ! + P(ij) P(ac)
|
||||
+ t2(m,k,a,c) * B_ooov(m,j,i,b) & ! + P(ik) P(ab)
|
||||
+ t2(m,k,b,a) * B_ooov(m,j,i,c) ! + P(ik) P(ac)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
t3_bc(i,j,k,a) = t3_bc(i,j,k,a) * (1d0 / delta)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
|
||||
! E_T
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
delta_abc = f_v(a) + f_v(b) + f_v(c)
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
delta = f_o(i) + f_o(j) + f_o(k) - delta_abc
|
||||
e_t(a) = e_t(a) + t3_bc(i,j,k,a) * delta * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
! E_ST
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
s(i,a) = s(i,a) + v_vvoo(b,c,j,k) * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO nowait
|
||||
|
||||
! E_DT
|
||||
!$OMP DO
|
||||
do a = 1, nV
|
||||
do k = 1, nO
|
||||
do j = 1, nO
|
||||
do i = 1, nO
|
||||
e_dt(a) = e_dt(a) + t2(i,j,a,b) * f_ov(k,c) * t3_bc(i,j,k,a)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
!$OMP END DO
|
||||
enddo
|
||||
!$OMP MASTER
|
||||
call wall_time(tb)
|
||||
write(*,'(A1,F6.2,A5,F10.2,A2)') ' ', dble(c)/dble(nV)*100d0, '% in ', tb-ta, ' s'
|
||||
!$OMP END MASTER
|
||||
enddo
|
||||
!$OMP END PARALLEL
|
||||
|
||||
do a = 2, nV
|
||||
e_t(1) = e_t(1) + e_t(a)
|
||||
enddo
|
||||
|
||||
do a = 2, nV
|
||||
e_dt(1) = e_dt(1) + e_dt(a)
|
||||
enddo
|
||||
|
||||
e_t = e_t / 36d0
|
||||
|
||||
do a = 1, nV
|
||||
do i = 1, nO
|
||||
e_st = e_st + s(i,a) * t1(i,a)
|
||||
enddo
|
||||
enddo
|
||||
e_st = e_st * 0.25d0
|
||||
|
||||
e_dt = e_dt * 0.25d0
|
||||
|
||||
! (T)
|
||||
!print*,e_t(1),e_st,e_dt(1)
|
||||
energy = e_t(1) + e_st + e_dt(1)
|
||||
|
||||
deallocate(t3_bc,s)
|
||||
|
||||
end
|
||||
#+end_src
|
Loading…
Reference in New Issue
Block a user