mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 12:23:43 +01:00
OpenMP in MO optimization
This commit is contained in:
parent
e2416a2d68
commit
7afc7e5fa4
2
external/ezfio
vendored
2
external/ezfio
vendored
@ -1 +1 @@
|
|||||||
Subproject commit ed1df9f3c1f51752656ca98da5693a4119add05c
|
Subproject commit d5805497fa0ef30e70e055cde1ecec2963303e93
|
2
external/irpf90
vendored
2
external/irpf90
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 33ca5e1018f3bbb5e695e6ee558f5dac0753b271
|
Subproject commit 0007f72f677fe7d61c5e1ed461882cb239517102
|
@ -15,7 +15,7 @@ subroutine run_optimization
|
|||||||
logical :: not_converged
|
logical :: not_converged
|
||||||
character (len=100) :: filename
|
character (len=100) :: filename
|
||||||
|
|
||||||
PROVIDE psi_det psi_coef mo_two_e_integrals_in_map
|
PROVIDE psi_det psi_coef mo_two_e_integrals_in_map ao_pseudo_integrals
|
||||||
|
|
||||||
not_converged = .True.
|
not_converged = .True.
|
||||||
nb_iter = 0
|
nb_iter = 0
|
@ -39,17 +39,24 @@ subroutine state_average_energy(energy)
|
|||||||
double precision :: get_two_e_integral
|
double precision :: get_two_e_integral
|
||||||
double precision :: mono_e, bi_e
|
double precision :: mono_e, bi_e
|
||||||
integer :: i,j,k,l
|
integer :: i,j,k,l
|
||||||
|
|
||||||
|
energy = nuclear_repulsion
|
||||||
! mono electronic part
|
! mono electronic part
|
||||||
|
!$OMP PARALLEL DEFAULT(NONE) PRIVATE(i,j,k,l,mono_e, bi_e) &
|
||||||
|
!$OMP SHARED(mo_num, mo_integrals_map, two_e_dm_mo, one_e_dm_mo, energy, &
|
||||||
|
!$OMP mo_one_e_integrals)
|
||||||
mono_e = 0d0
|
mono_e = 0d0
|
||||||
|
!$OMP DO
|
||||||
do j = 1, mo_num
|
do j = 1, mo_num
|
||||||
do i = 1, mo_num
|
do i = 1, mo_num
|
||||||
mono_e = mono_e + mo_one_e_integrals(i,j) * one_e_dm_mo(i,j)
|
mono_e = mono_e + mo_one_e_integrals(i,j) * one_e_dm_mo(i,j)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO NOWAIT
|
||||||
|
|
||||||
! bi electronic part
|
! bi electronic part
|
||||||
bi_e = 0d0
|
bi_e = 0d0
|
||||||
|
!$OMP DO
|
||||||
do l = 1, mo_num
|
do l = 1, mo_num
|
||||||
do k = 1, mo_num
|
do k = 1, mo_num
|
||||||
do j = 1, mo_num
|
do j = 1, mo_num
|
||||||
@ -59,13 +66,17 @@ subroutine state_average_energy(energy)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
! State average energy
|
! State average energy
|
||||||
energy = mono_e + 0.5d0 * bi_e + nuclear_repulsion
|
!$OMP CRITICAL
|
||||||
|
energy = energy + mono_e + 0.5d0 * bi_e
|
||||||
|
!$OMP END CRITICAL
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
! Check
|
! Check
|
||||||
!call print_energy_components
|
!call print_energy_components
|
||||||
|
|
||||||
print*,'State average energy:', energy
|
print*,'State average energy:', energy
|
||||||
!print*,ci_energy
|
!print*,ci_energy
|
||||||
|
|
||||||
|
@ -17,12 +17,12 @@
|
|||||||
state_weights = state_average_weight
|
state_weights = state_average_weight
|
||||||
integer :: ispin
|
integer :: ispin
|
||||||
! condition for alpha/beta spin
|
! condition for alpha/beta spin
|
||||||
print*,''
|
! print*,''
|
||||||
print*,''
|
! print*,''
|
||||||
print*,''
|
! print*,''
|
||||||
print*,'providint state_av_act_2_rdm_ab_mo '
|
! print*,'Providing state_av_act_2_rdm_ab_mo '
|
||||||
ispin = 3
|
ispin = 3
|
||||||
print*,'ispin = ',ispin
|
! print*,'ispin = ',ispin
|
||||||
state_av_act_2_rdm_ab_mo = 0.d0
|
state_av_act_2_rdm_ab_mo = 0.d0
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
double precision :: wall_1, wall_2
|
double precision :: wall_1, wall_2
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
state_av_full_occ_2_rdm_ab_mo = 0.d0
|
state_av_full_occ_2_rdm_ab_mo = 0.d0
|
||||||
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! state_av_full_occ_2_rdm_ab_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of alpha/beta + beta/alpha electrons
|
! state_av_full_occ_2_rdm_ab_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of alpha/beta + beta/alpha electrons
|
||||||
!
|
!
|
||||||
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,alpha} a^{\dagger}_{j,beta} a_{l,beta} a_{k,alpha} |Psi_{istate}>
|
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,alpha} a^{\dagger}_{j,beta} a_{l,beta} a_{k,alpha} |Psi_{istate}>
|
||||||
!
|
!
|
||||||
@ -12,11 +12,19 @@
|
|||||||
!
|
!
|
||||||
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\alpha} * N_{\beta} * 2
|
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\alpha} * N_{\beta} * 2
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
||||||
END_DOC
|
END_DOC
|
||||||
|
PROVIDE n_core_orb list_core
|
||||||
state_av_full_occ_2_rdm_ab_mo = 0.d0
|
state_av_full_occ_2_rdm_ab_mo = 0.d0
|
||||||
|
!$OMP PARALLEL PRIVATE(i,j,k,l,iorb,jorb,korb,lorb) &
|
||||||
|
!$OMP DEFAULT(NONE) SHARED(n_act_orb, n_inact_orb, n_core_orb, &
|
||||||
|
!$OMP list_core, list_act, list_inact, no_core_density, &
|
||||||
|
!$OMP one_e_dm_mo_alpha_average, one_e_dm_mo_beta_average, &
|
||||||
|
!$OMP state_av_act_2_rdm_ab_mo, state_av_full_occ_2_rdm_ab_mo)
|
||||||
|
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -25,15 +33,17 @@
|
|||||||
korb = list_act(k)
|
korb = list_act(k)
|
||||||
do l = 1, n_act_orb
|
do l = 1, n_act_orb
|
||||||
lorb = list_act(l)
|
lorb = list_act(l)
|
||||||
! alph beta alph beta
|
! alph beta alph beta
|
||||||
state_av_full_occ_2_rdm_ab_mo(lorb,korb,jorb,iorb) = &
|
state_av_full_occ_2_rdm_ab_mo(lorb,korb,jorb,iorb) = &
|
||||||
state_av_act_2_rdm_ab_mo(l,k,j,i)
|
state_av_act_2_rdm_ab_mo(l,k,j,i)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! BETA ACTIVE - ALPHA inactive
|
!$OMP END DO
|
||||||
!!
|
!! BETA ACTIVE - ALPHA inactive
|
||||||
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -45,9 +55,11 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! ALPHA ACTIVE - BETA inactive
|
!! ALPHA ACTIVE - BETA inactive
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -59,9 +71,11 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! ALPHA INACTIVE - BETA INACTIVE
|
!! ALPHA INACTIVE - BETA INACTIVE
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
@ -70,13 +84,15 @@
|
|||||||
state_av_full_occ_2_rdm_ab_mo(korb,jorb,korb,jorb) = 2.D0
|
state_av_full_occ_2_rdm_ab_mo(korb,jorb,korb,jorb) = 2.D0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!!!!!!!!!!!!
|
!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
||||||
!!!!!!!!!!!! CAN BE USED
|
!!!!!!!!!!!! CAN BE USED
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
!! BETA ACTIVE - ALPHA CORE
|
!! BETA ACTIVE - ALPHA CORE
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -88,9 +104,11 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! ALPHA ACTIVE - BETA CORE
|
!! ALPHA ACTIVE - BETA CORE
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -102,9 +120,11 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! ALPHA CORE - BETA CORE
|
!! ALPHA CORE - BETA CORE
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
@ -113,9 +133,11 @@
|
|||||||
state_av_full_occ_2_rdm_ab_mo(korb,jorb,korb,jorb) = 2.D0
|
state_av_full_occ_2_rdm_ab_mo(korb,jorb,korb,jorb) = 2.D0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
END_PROVIDER
|
!$OMP END PARALLEL
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_aa_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_aa_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
||||||
@ -123,7 +145,7 @@
|
|||||||
state_av_full_occ_2_rdm_aa_mo = 0.d0
|
state_av_full_occ_2_rdm_aa_mo = 0.d0
|
||||||
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! state_av_full_occ_2_rdm_aa_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of alpha/alpha electrons
|
! state_av_full_occ_2_rdm_aa_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of alpha/alpha electrons
|
||||||
!
|
!
|
||||||
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,alpha} a^{\dagger}_{j,alpha} a_{l,alpha} a_{k,alpha} |Psi_{istate}>
|
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,alpha} a^{\dagger}_{j,alpha} a_{l,alpha} a_{k,alpha} |Psi_{istate}>
|
||||||
!
|
!
|
||||||
@ -131,13 +153,20 @@
|
|||||||
!
|
!
|
||||||
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\alpha} * (N_{\alpha} - 1)
|
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\alpha} * (N_{\alpha} - 1)
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
|
PROVIDE n_core_orb list_core
|
||||||
|
!$OMP PARALLEL PRIVATE(i,j,k,l,iorb,jorb,korb,lorb) &
|
||||||
|
!$OMP DEFAULT(NONE) SHARED(n_act_orb, n_inact_orb, n_core_orb, &
|
||||||
|
!$OMP list_core, list_act, list_inact, no_core_density, &
|
||||||
|
!$OMP one_e_dm_mo_alpha_average, one_e_dm_mo_beta_average, &
|
||||||
|
!$OMP state_av_act_2_rdm_aa_mo, state_av_full_occ_2_rdm_aa_mo)
|
||||||
!! PURE ACTIVE PART ALPHA-ALPHA
|
!! PURE ACTIVE PART ALPHA-ALPHA
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -152,74 +181,84 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA ACTIVE - ALPHA inactive
|
!$OMP END DO
|
||||||
!!
|
!! ALPHA ACTIVE - ALPHA inactive
|
||||||
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_aa_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_aa_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! ALPHA INACTIVE - ALPHA INACTIVE
|
!! ALPHA INACTIVE - ALPHA INACTIVE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!!!!!!!!!!
|
!!!!!!!!!!
|
||||||
!!!!!!!!!! if "no_core_density" then you don't put the core part
|
!!!!!!!!!! if "no_core_density" then you don't put the core part
|
||||||
!!!!!!!!!! CAN BE USED
|
!!!!!!!!!! CAN BE USED
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
!! ALPHA ACTIVE - ALPHA CORE
|
!! ALPHA ACTIVE - ALPHA CORE
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_aa_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_aa_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA CORE - ALPHA CORE
|
!$OMP END DO
|
||||||
|
!! ALPHA CORE - ALPHA CORE
|
||||||
|
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_aa_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_aa_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
END_PROVIDER
|
!$OMP END PARALLEL
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_bb_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_bb_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
||||||
implicit none
|
implicit none
|
||||||
state_av_full_occ_2_rdm_bb_mo = 0.d0
|
state_av_full_occ_2_rdm_bb_mo = 0.d0
|
||||||
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! state_av_full_occ_2_rdm_bb_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of beta/beta electrons
|
! state_av_full_occ_2_rdm_bb_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of beta/beta electrons
|
||||||
!
|
!
|
||||||
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,beta} a^{\dagger}_{j,beta} a_{l,beta} a_{k,beta} |Psi_{istate}>
|
! = \sum_{istate} w(istate) * <Psi_{istate}| a^{\dagger}_{i,beta} a^{\dagger}_{j,beta} a_{l,beta} a_{k,beta} |Psi_{istate}>
|
||||||
!
|
!
|
||||||
@ -227,13 +266,20 @@
|
|||||||
!
|
!
|
||||||
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\beta} * (N_{\beta} - 1)
|
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{\beta} * (N_{\beta} - 1)
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
|
PROVIDE n_core_orb list_core
|
||||||
|
!$OMP PARALLEL PRIVATE(i,j,k,l,iorb,jorb,korb,lorb) &
|
||||||
|
!$OMP DEFAULT(NONE) SHARED(n_act_orb, n_inact_orb, n_core_orb, &
|
||||||
|
!$OMP list_core, list_act, list_inact, no_core_density, &
|
||||||
|
!$OMP one_e_dm_mo_alpha_average, one_e_dm_mo_beta_average, &
|
||||||
|
!$OMP state_av_act_2_rdm_bb_mo, state_av_full_occ_2_rdm_bb_mo)
|
||||||
!! PURE ACTIVE PART beta-beta
|
!! PURE ACTIVE PART beta-beta
|
||||||
!!
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -242,80 +288,90 @@
|
|||||||
korb = list_act(k)
|
korb = list_act(k)
|
||||||
do l = 1, n_act_orb
|
do l = 1, n_act_orb
|
||||||
lorb = list_act(l)
|
lorb = list_act(l)
|
||||||
state_av_full_occ_2_rdm_bb_mo(lorb,korb,jorb,iorb) = &
|
state_av_full_occ_2_rdm_bb_mo(lorb,korb,jorb,iorb) = &
|
||||||
state_av_act_2_rdm_bb_mo(l,k,j,i)
|
state_av_act_2_rdm_bb_mo(l,k,j,i)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! beta ACTIVE - beta inactive
|
!$OMP END DO
|
||||||
!!
|
!! beta ACTIVE - beta inactive
|
||||||
|
!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_bb_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_bb_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!! beta INACTIVE - beta INACTIVE
|
!! beta INACTIVE - beta INACTIVE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!!!!!!!!!!!!
|
!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
||||||
!!!!!!!!!!!! CAN BE USED
|
!!!!!!!!!!!! CAN BE USED
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
!! beta ACTIVE - beta CORE
|
!! beta ACTIVE - beta CORE
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_bb_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_bb_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! beta CORE - beta CORE
|
!$OMP END DO
|
||||||
|
!! beta CORE - beta CORE
|
||||||
|
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_bb_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_bb_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
endif
|
endif
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_spin_trace_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
BEGIN_PROVIDER [double precision, state_av_full_occ_2_rdm_spin_trace_mo, (n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb,n_core_inact_act_orb)]
|
||||||
implicit none
|
implicit none
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo = 0.d0
|
state_av_full_occ_2_rdm_spin_trace_mo = 0.d0
|
||||||
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
integer :: i,j,k,l,iorb,jorb,korb,lorb
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! state_av_full_occ_2_rdm_bb_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of beta/beta electrons
|
! state_av_full_occ_2_rdm_bb_mo(i,j,k,l) = STATE AVERAGE physicist notation for 2RDM of beta/beta electrons
|
||||||
!
|
!
|
||||||
! = \sum_{istate} w(istate) * \sum_{sigma,sigma'} <Psi_{istate}| a^{\dagger}_{i,sigma} a^{\dagger'}_{j,sigma} a_{l,sigma'} a_{k,sigma} |Psi_{istate}>
|
! = \sum_{istate} w(istate) * \sum_{sigma,sigma'} <Psi_{istate}| a^{\dagger}_{i,sigma} a^{\dagger'}_{j,sigma} a_{l,sigma'} a_{k,sigma} |Psi_{istate}>
|
||||||
!
|
!
|
||||||
@ -324,14 +380,22 @@
|
|||||||
!
|
!
|
||||||
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{elec} * (N_{elec} - 1)
|
! THE NORMALIZATION (i.e. sum of diagonal elements) IS SET TO N_{elec} * (N_{elec} - 1)
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
! !!!!! WARNING !!!!! ALL SLATER DETERMINANTS IN PSI_DET MUST BELONG TO AN ACTIVE SPACE DEFINED BY "list_act"
|
||||||
!
|
!
|
||||||
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
! !!!!! WARNING !!!!! IF "no_core_density" then all elements involving at least one CORE MO is set to zero
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!
|
PROVIDE n_core_orb list_core
|
||||||
!!!!!!!!!!!!!!!!
|
|
||||||
|
!$OMP PARALLEL PRIVATE(i,j,k,l,iorb,jorb,korb,lorb) &
|
||||||
|
!$OMP DEFAULT(NONE) SHARED(n_act_orb, n_inact_orb, n_core_orb, &
|
||||||
|
!$OMP list_core, list_act, list_inact, no_core_density, &
|
||||||
|
!$OMP one_e_dm_mo_alpha_average, one_e_dm_mo_beta_average, &
|
||||||
|
!$OMP state_av_act_2_rdm_spin_trace_mo, state_av_full_occ_2_rdm_spin_trace_mo)
|
||||||
|
!!!!!!!!!!!!!!!!
|
||||||
|
!!!!!!!!!!!!!!!!
|
||||||
!! PURE ACTIVE PART SPIN-TRACE
|
!! PURE ACTIVE PART SPIN-TRACE
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -340,128 +404,146 @@
|
|||||||
korb = list_act(k)
|
korb = list_act(k)
|
||||||
do l = 1, n_act_orb
|
do l = 1, n_act_orb
|
||||||
lorb = list_act(l)
|
lorb = list_act(l)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(lorb,korb,jorb,iorb) += &
|
state_av_full_occ_2_rdm_spin_trace_mo(lorb,korb,jorb,iorb) += &
|
||||||
state_av_act_2_rdm_spin_trace_mo(l,k,j,i)
|
state_av_act_2_rdm_spin_trace_mo(l,k,j,i)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!! BETA-BETA !!!!!
|
!!!!! BETA-BETA !!!!!
|
||||||
!! beta ACTIVE - beta inactive
|
!! beta ACTIVE - beta inactive
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! beta INACTIVE - beta INACTIVE
|
!$OMP END DO
|
||||||
|
!! beta INACTIVE - beta INACTIVE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
!! beta ACTIVE - beta CORE
|
!! beta ACTIVE - beta CORE
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! beta CORE - beta CORE
|
!$OMP END DO
|
||||||
|
!! beta CORE - beta CORE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!! ALPHA-ALPHA !!!!!
|
!!!!! ALPHA-ALPHA !!!!!
|
||||||
!! ALPHA ACTIVE - ALPHA inactive
|
!! ALPHA ACTIVE - ALPHA inactive
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA INACTIVE - ALPHA INACTIVE
|
!$OMP END DO
|
||||||
|
!! ALPHA INACTIVE - ALPHA INACTIVE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
korb = list_inact(k)
|
korb = list_inact(k)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
!! ALPHA ACTIVE - ALPHA CORE
|
!! ALPHA ACTIVE - ALPHA CORE
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
! 1 2 1 2 : DIRECT TERM
|
! 1 2 1 2 : DIRECT TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! 1 2 1 2 : EXCHANGE TERM
|
! 1 2 1 2 : EXCHANGE TERM
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,korb,iorb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,iorb,korb) += -1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA CORE - ALPHA CORE
|
!$OMP END DO
|
||||||
|
!! ALPHA CORE - ALPHA CORE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,jorb) += 1.0d0
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,jorb,korb) -= 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!
|
||||||
!!!!! ALPHA-BETA + BETA-ALPHA !!!!!
|
!!!!! ALPHA-BETA + BETA-ALPHA !!!!!
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
@ -474,14 +556,16 @@
|
|||||||
! beta alph beta alph
|
! beta alph beta alph
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! BETA INACTIVE - ALPHA ACTIVE
|
! BETA INACTIVE - ALPHA ACTIVE
|
||||||
! beta alph beta alpha
|
! beta alph beta alpha
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! alph beta alph beta
|
! alph beta alph beta
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0d0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA INACTIVE - BETA INACTIVE
|
!$OMP END DO
|
||||||
|
!! ALPHA INACTIVE - BETA INACTIVE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_inact_orb
|
do j = 1, n_inact_orb
|
||||||
jorb = list_inact(j)
|
jorb = list_inact(j)
|
||||||
do k = 1, n_inact_orb
|
do k = 1, n_inact_orb
|
||||||
@ -491,31 +575,35 @@
|
|||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,jorb,korb) += 1.0d0
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,jorb,korb) += 1.0d0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
!!!!!!!!!!!!
|
!!!!!!!!!!!!
|
||||||
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
!!!!!!!!!!!! if "no_core_density" then you don't put the core part
|
||||||
!!!!!!!!!!!! CAN BE USED
|
!!!!!!!!!!!! CAN BE USED
|
||||||
if (.not.no_core_density)then
|
if (.not.no_core_density)then
|
||||||
|
!$OMP DO
|
||||||
do i = 1, n_act_orb
|
do i = 1, n_act_orb
|
||||||
iorb = list_act(i)
|
iorb = list_act(i)
|
||||||
do j = 1, n_act_orb
|
do j = 1, n_act_orb
|
||||||
jorb = list_act(j)
|
jorb = list_act(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
korb = list_core(k)
|
korb = list_core(k)
|
||||||
!! BETA ACTIVE - ALPHA CORE
|
!! BETA ACTIVE - ALPHA CORE
|
||||||
! alph beta alph beta
|
! alph beta alph beta
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0D0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0D0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
! beta alph beta alph
|
! beta alph beta alph
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0D0 * one_e_dm_mo_beta_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0D0 * one_e_dm_mo_beta_average(jorb,iorb)
|
||||||
!! ALPHA ACTIVE - BETA CORE
|
!! ALPHA ACTIVE - BETA CORE
|
||||||
! alph beta alph beta
|
! alph beta alph beta
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0D0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,iorb,korb) += 1.0D0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
! beta alph beta alph
|
! beta alph beta alph
|
||||||
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0D0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
state_av_full_occ_2_rdm_spin_trace_mo(korb,jorb,korb,iorb) += 1.0D0 * one_e_dm_mo_alpha_average(jorb,iorb)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!! ALPHA CORE - BETA CORE
|
!$OMP END DO
|
||||||
|
!! ALPHA CORE - BETA CORE
|
||||||
|
!$OMP DO
|
||||||
do j = 1, n_core_orb
|
do j = 1, n_core_orb
|
||||||
jorb = list_core(j)
|
jorb = list_core(j)
|
||||||
do k = 1, n_core_orb
|
do k = 1, n_core_orb
|
||||||
@ -525,7 +613,9 @@
|
|||||||
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,jorb,korb) += 1.0D0
|
state_av_full_occ_2_rdm_spin_trace_mo(jorb,korb,jorb,korb) += 1.0D0
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
@ -16,6 +16,9 @@ BEGIN_PROVIDER [double precision, two_e_dm_mo, (mo_num,mo_num,mo_num,mo_num)]
|
|||||||
two_e_dm_mo = 0.d0
|
two_e_dm_mo = 0.d0
|
||||||
integer :: i,j,k,l,iorb,jorb,korb,lorb,istate
|
integer :: i,j,k,l,iorb,jorb,korb,lorb,istate
|
||||||
|
|
||||||
|
!$OMP PARALLEL DO PRIVATE(i,j,k,l,iorb,jorb,korb,lorb) &
|
||||||
|
!$OMP DEFAULT(NONE) SHARED(n_core_inact_act_orb, list_core_inact_act, &
|
||||||
|
!$OMP two_e_dm_mo, state_av_full_occ_2_rdm_spin_trace_mo)
|
||||||
do l=1,n_core_inact_act_orb
|
do l=1,n_core_inact_act_orb
|
||||||
lorb = list_core_inact_act(l)
|
lorb = list_core_inact_act(l)
|
||||||
do k=1,n_core_inact_act_orb
|
do k=1,n_core_inact_act_orb
|
||||||
@ -29,7 +32,7 @@ BEGIN_PROVIDER [double precision, two_e_dm_mo, (mo_num,mo_num,mo_num,mo_num)]
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
two_e_dm_mo(:,:,:,:) = two_e_dm_mo(:,:,:,:)
|
!$OMP END PARALLEL DO
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user