mirror of
https://github.com/QuantumPackage/qp2.git
synced 2025-04-26 10:14:45 +02:00
ao_extra_one_e_dm works
This commit is contained in:
parent
a61f6291da
commit
e0d93d193b
@ -1,3 +1,4 @@
|
|||||||
ao_extra_basis
|
ao_extra_basis
|
||||||
ao_one_e_ints
|
ao_one_e_ints
|
||||||
ao_two_e_ints
|
ao_two_e_ints
|
||||||
|
determinants
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
double precision function coul_full_pq_r_1s(p,q,R,R_p,R_q)
|
double precision function coul_full_ao_pq_r_1s(p,q,R,R_p,R_q)
|
||||||
implicit none
|
implicit none
|
||||||
|
include 'constants.include.F'
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! coul_full_pq_r_1s(p,q,r) = \int d^3r phi_p(r) phi_q(r) 1/(r-R)
|
! coul_full_pq_r_1s(p,q,r) = \int d^3r phi_p(r) phi_q(r) 1/(r-R)
|
||||||
!
|
!
|
||||||
@ -18,6 +19,37 @@ double precision function coul_full_pq_r_1s(p,q,R,R_p,R_q)
|
|||||||
dist+= (P_pq(2)-R(2)) * (P_pq(2)-R(2))
|
dist+= (P_pq(2)-R(2)) * (P_pq(2)-R(2))
|
||||||
dist+= (P_pq(3)-R(3)) * (P_pq(3)-R(3))
|
dist+= (P_pq(3)-R(3)) * (P_pq(3)-R(3))
|
||||||
dist = dsqrt(dist)
|
dist = dsqrt(dist)
|
||||||
coul_full_pq_r_1s = coefaos * coef * derf(sqrt_gamma_pq_ao_extra(q,p) * dist)/dist
|
if(dist.gt.1.d-10)then
|
||||||
|
coul_full_ao_pq_r_1s = coefaos * coef * derf(sqrt_gamma_pq_ao_extra(q,p) * dist)/dist
|
||||||
|
else
|
||||||
|
coul_full_ao_pq_r_1s = coefaos * coef * 2.d0 * sqrt_gamma_pq_ao_extra(q,p) * inv_sq_pi
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
double precision function coul_pq_r_1s(p,q,R,R_p,R_q)
|
||||||
|
implicit none
|
||||||
|
include 'constants.include.F'
|
||||||
|
BEGIN_DOC
|
||||||
|
! coul_full_pq_r_1s(p,q,r) = \int d^3r exp(-alpha_p (r-R_p)^2) exp(-alpha_q (r-R_q)^2) 1/|r-R|
|
||||||
|
!
|
||||||
|
! where alpha_p and alpha_q are the 1s extra basis
|
||||||
|
!
|
||||||
|
! WARNING :: works only for purely 1s extra basis !!
|
||||||
|
END_DOC
|
||||||
|
double precision, intent(in) :: R(3),R_p(3),R_q(3)
|
||||||
|
integer, intent(in) :: p,q
|
||||||
|
double precision :: dist,P_pq(3)
|
||||||
|
P_pq = ao_extra_expo(p,1) * R_p + ao_extra_expo(q,1) * R_q
|
||||||
|
P_pq = P_pq * inv_gamma_pq_ao_extra(q,p)
|
||||||
|
dist = (P_pq(1)-R(1)) * (P_pq(1)-R(1))
|
||||||
|
dist+= (P_pq(2)-R(2)) * (P_pq(2)-R(2))
|
||||||
|
dist+= (P_pq(3)-R(3)) * (P_pq(3)-R(3))
|
||||||
|
dist = dsqrt(dist)
|
||||||
|
if(dist.gt.1.d-10)then
|
||||||
|
coul_pq_r_1s = derf(sqrt_gamma_pq_ao_extra(q,p) * dist)/dist
|
||||||
|
else
|
||||||
|
coul_pq_r_1s = 2.d0 * sqrt_gamma_pq_ao_extra(q,p) * inv_sq_pi
|
||||||
|
endif
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -10,7 +10,9 @@ program extra_basis_int
|
|||||||
! call routine_test_pot_ne_mixed
|
! call routine_test_pot_ne_mixed
|
||||||
! call routine_pot_ne
|
! call routine_pot_ne
|
||||||
! call routine_test_pot_ne_extra_mixed
|
! call routine_test_pot_ne_extra_mixed
|
||||||
call routine_test_coul_1s
|
! call routine_test_coul_1s
|
||||||
|
call print_v_ne_extra_basis
|
||||||
|
call print_v_ne_basis
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -128,7 +130,7 @@ subroutine routine_test_coul_1s
|
|||||||
implicit none
|
implicit none
|
||||||
integer :: i,j
|
integer :: i,j
|
||||||
double precision :: r(3) ,mu_in,NAI_pol_mult_erf_ao_extra
|
double precision :: r(3) ,mu_in,NAI_pol_mult_erf_ao_extra
|
||||||
double precision :: ref,new, accu,coul_full_pq_r_1s,v_nucl_extra_ao
|
double precision :: ref,new, accu,coul_full_ao_pq_r_1s,v_nucl_extra_ao
|
||||||
r(1) = 0.d0
|
r(1) = 0.d0
|
||||||
r(2) = 0.5d0
|
r(2) = 0.5d0
|
||||||
r(3) = -1.5d0
|
r(3) = -1.5d0
|
||||||
@ -140,10 +142,50 @@ subroutine routine_test_coul_1s
|
|||||||
! do i = 1, 1
|
! do i = 1, 1
|
||||||
! do j = 1, 1
|
! do j = 1, 1
|
||||||
ref = NAI_pol_mult_erf_ao_extra(i, j, mu_in, r)
|
ref = NAI_pol_mult_erf_ao_extra(i, j, mu_in, r)
|
||||||
new = coul_full_pq_r_1s(i,j,r,ao_extra_center_1s(1,i),ao_extra_center_1s(1,j))
|
new = coul_full_ao_pq_r_1s(i,j,r,ao_extra_center_1s(1,i),ao_extra_center_1s(1,j))
|
||||||
! new = v_nucl_extra_ao(i,j)
|
! new = v_nucl_extra_ao(i,j)
|
||||||
accu += dabs(new-ref)
|
accu += dabs(new-ref)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
print*,'accu = ',accu
|
print*,'accu = ',accu
|
||||||
end
|
end
|
||||||
|
|
||||||
|
subroutine print_v_ne_extra_basis
|
||||||
|
implicit none
|
||||||
|
integer :: i_ao,j_ao,i
|
||||||
|
double precision :: integral, accu, charge, coord(3), coul_pq_r_1s
|
||||||
|
|
||||||
|
accu = 0.d0
|
||||||
|
do i_ao = 1, ao_extra_num
|
||||||
|
do j_ao = 1, ao_extra_num
|
||||||
|
do i = 1, nucl_num
|
||||||
|
charge = nucl_charge(i)
|
||||||
|
coord(1:3) = nucl_coord_transp(1:3,i)
|
||||||
|
integral = coul_pq_r_1s(i_ao,j_ao,coord,ao_extra_center_1s(1,i_ao),ao_extra_center_1s(1,j_ao))
|
||||||
|
accu += -charge * integral * effective_ao_extra_dm(j_ao,i_ao)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
print*,'accu = ',accu
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine print_v_ne_basis
|
||||||
|
implicit none
|
||||||
|
integer :: i_ao,j_ao,i
|
||||||
|
double precision :: integral, accu, charge, coord(3), coul_full_pq_r_1s,NAI_pol_mult_erf_ao
|
||||||
|
|
||||||
|
accu = 0.d0
|
||||||
|
do i_ao = 1, ao_num
|
||||||
|
do j_ao = 1, ao_num
|
||||||
|
do i = 1, nucl_num
|
||||||
|
charge = nucl_charge(i)
|
||||||
|
coord(1:3) = nucl_coord_transp(1:3,i)
|
||||||
|
integral = NAI_pol_mult_erf_ao(i_ao, j_ao, 1d+10, coord)
|
||||||
|
accu += -charge * integral * one_e_dm_ao(j_ao,i_ao)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
print*,'accu = ',accu
|
||||||
|
|
||||||
|
end
|
||||||
|
@ -94,7 +94,7 @@ interface: ezfio, provider
|
|||||||
[ao_extra_one_e_dm]
|
[ao_extra_one_e_dm]
|
||||||
type: double precision
|
type: double precision
|
||||||
doc: reduced density matrix on the ao extra basis
|
doc: reduced density matrix on the ao extra basis
|
||||||
size: (ao_extra_basis.ao_extra_num,ao_extra_basis.ao_extra_num)
|
size: (ao_extra_basis.ao_extra_num,ao_extra_basis.ao_extra_num,1)
|
||||||
interface: ezfio, provider
|
interface: ezfio, provider
|
||||||
|
|
||||||
[ao_extra_center]
|
[ao_extra_center]
|
||||||
|
@ -14,7 +14,7 @@ BEGIN_PROVIDER [ double precision, effective_ao_extra_dm, (ao_extra_num, ao_extr
|
|||||||
integer :: i,j
|
integer :: i,j
|
||||||
do i = 1, ao_extra_num
|
do i = 1, ao_extra_num
|
||||||
do j = 1, ao_extra_num
|
do j = 1, ao_extra_num
|
||||||
effective_ao_extra_dm(j,i) = ao_extra_one_e_dm(j,i) * ao_extra_coef_normalized(j,1) * ao_extra_coef_normalized(i,1) &
|
effective_ao_extra_dm(j,i) = ao_extra_one_e_dm(j,i,1) * ao_extra_coef_normalized(j,1) * ao_extra_coef_normalized(i,1) &
|
||||||
* inv_pi_gamma_pq_3_2_ao_extra(j,i) * E_pq_ao_extra(j,i)
|
* inv_pi_gamma_pq_3_2_ao_extra(j,i) * E_pq_ao_extra(j,i)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
Loading…
x
Reference in New Issue
Block a user