mirror of
https://github.com/QuantumPackage/qp2.git
synced 2025-01-03 09:05:39 +01:00
gain a factor 27 on tc_scf
This commit is contained in:
parent
5358bd9a61
commit
ce79917152
@ -29,7 +29,7 @@ BEGIN_PROVIDER [double precision, tc_grad_square_ao_test, (ao_num, ao_num, ao_nu
|
|||||||
do j = 1, ao_num
|
do j = 1, ao_num
|
||||||
do l = 1, ao_num
|
do l = 1, ao_num
|
||||||
ac_mat(k,i,l,j) += ao_ik_r * ( u12sq_j1bsq_test(l,j,ipoint) + u12_grad1_u12_j1b_grad1_j1b_test(l,j,ipoint) )
|
ac_mat(k,i,l,j) += ao_ik_r * ( u12sq_j1bsq_test(l,j,ipoint) + u12_grad1_u12_j1b_grad1_j1b_test(l,j,ipoint) )
|
||||||
bc_mat(k,i,l,j) += ao_ik_r * grad12_j12(l,j,ipoint)
|
bc_mat(k,i,l,j) += ao_ik_r * grad12_j12_test(l,j,ipoint)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -132,3 +132,55 @@ END_PROVIDER
|
|||||||
|
|
||||||
! ---
|
! ---
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, grad12_j12_test, (ao_num, ao_num, n_points_final_grid) ]
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
integer :: ipoint, i, j, m, igauss
|
||||||
|
double precision :: r(3), delta, coef
|
||||||
|
double precision :: tmp1
|
||||||
|
double precision :: time0, time1
|
||||||
|
double precision, external :: overlap_gauss_r12_ao
|
||||||
|
|
||||||
|
print*, ' providing grad12_j12_test ...'
|
||||||
|
call wall_time(time0)
|
||||||
|
|
||||||
|
PROVIDE j1b_type
|
||||||
|
|
||||||
|
if(j1b_type .eq. 3) then
|
||||||
|
|
||||||
|
do ipoint = 1, n_points_final_grid
|
||||||
|
tmp1 = v_1b(ipoint)
|
||||||
|
tmp1 = tmp1 * tmp1
|
||||||
|
do j = 1, ao_num
|
||||||
|
do i = 1, ao_num
|
||||||
|
grad12_j12_test(i,j,ipoint) = tmp1 * int2_grad1u2_grad2u2_j1b2_test(i,j,ipoint)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
grad12_j12_test = 0.d0
|
||||||
|
do ipoint = 1, n_points_final_grid
|
||||||
|
r(1) = final_grid_points(1,ipoint)
|
||||||
|
r(2) = final_grid_points(2,ipoint)
|
||||||
|
r(3) = final_grid_points(3,ipoint)
|
||||||
|
do j = 1, ao_num
|
||||||
|
do i = 1, ao_num
|
||||||
|
do igauss = 1, n_max_fit_slat
|
||||||
|
delta = expo_gauss_1_erf_x_2(igauss)
|
||||||
|
coef = coef_gauss_1_erf_x_2(igauss)
|
||||||
|
grad12_j12_test(i,j,ipoint) += -0.25d0 * coef * overlap_gauss_r12_ao(r, delta, i, j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
call wall_time(time1)
|
||||||
|
print*, ' Wall time for grad12_j12_test = ', time1 - time0
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
! ---
|
||||||
|
@ -8,16 +8,20 @@ BEGIN_PROVIDER [double precision, ao_tc_int_chemist, (ao_num, ao_num, ao_num, ao
|
|||||||
double precision :: wall1, wall0
|
double precision :: wall1, wall0
|
||||||
|
|
||||||
call wall_time(wall0)
|
call wall_time(wall0)
|
||||||
|
|
||||||
do j = 1, ao_num
|
if(test_cycle_tc)then
|
||||||
do l = 1, ao_num
|
ao_tc_int_chemist = ao_tc_int_chemist_test
|
||||||
do i = 1, ao_num
|
else
|
||||||
do k = 1, ao_num
|
do j = 1, ao_num
|
||||||
ao_tc_int_chemist(k,i,l,j) = tc_grad_square_ao(k,i,l,j) + tc_grad_and_lapl_ao(k,i,l,j) + ao_two_e_coul(k,i,l,j)
|
do l = 1, ao_num
|
||||||
enddo
|
do i = 1, ao_num
|
||||||
enddo
|
do k = 1, ao_num
|
||||||
enddo
|
ao_tc_int_chemist(k,i,l,j) = tc_grad_square_ao(k,i,l,j) + tc_grad_and_lapl_ao(k,i,l,j) + ao_two_e_coul(k,i,l,j)
|
||||||
enddo
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
call wall_time(wall1)
|
call wall_time(wall1)
|
||||||
print *, ' wall time for ao_tc_int_chemist ', wall1 - wall0
|
print *, ' wall time for ao_tc_int_chemist ', wall1 - wall0
|
||||||
@ -26,6 +30,29 @@ END_PROVIDER
|
|||||||
|
|
||||||
! ---
|
! ---
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [double precision, ao_tc_int_chemist_test, (ao_num, ao_num, ao_num, ao_num)]
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
integer :: i, j, k, l
|
||||||
|
double precision :: wall1, wall0
|
||||||
|
|
||||||
|
call wall_time(wall0)
|
||||||
|
|
||||||
|
do j = 1, ao_num
|
||||||
|
do l = 1, ao_num
|
||||||
|
do i = 1, ao_num
|
||||||
|
do k = 1, ao_num
|
||||||
|
ao_tc_int_chemist_test(k,i,l,j) = tc_grad_square_ao_test(k,i,l,j) + tc_grad_and_lapl_ao_test(k,i,l,j) + ao_two_e_coul(k,i,l,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
call wall_time(wall1)
|
||||||
|
print *, ' wall time for ao_tc_int_chemist_test ', wall1 - wall0
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
! ---
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, ao_two_e_coul, (ao_num, ao_num, ao_num, ao_num) ]
|
BEGIN_PROVIDER [double precision, ao_two_e_coul, (ao_num, ao_num, ao_num, ao_num) ]
|
||||||
|
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
|
@ -166,3 +166,9 @@ doc: Thresholds on the Imag part of energy
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: 1.e-7
|
default: 1.e-7
|
||||||
|
|
||||||
|
[test_cycle_tc]
|
||||||
|
type: logical
|
||||||
|
doc: If |true|, the integrals of the three-body jastrow are computed with cycles
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: False
|
||||||
|
|
||||||
|
@ -9,10 +9,10 @@ program test_ints
|
|||||||
print *, 'starting ...'
|
print *, 'starting ...'
|
||||||
|
|
||||||
my_grid_becke = .True.
|
my_grid_becke = .True.
|
||||||
my_n_pt_r_grid = 10
|
my_n_pt_r_grid = 30
|
||||||
! my_n_pt_a_grid = 50
|
my_n_pt_a_grid = 50
|
||||||
! my_n_pt_r_grid = 10 ! small grid for quick debug
|
! my_n_pt_r_grid = 10 ! small grid for quick debug
|
||||||
my_n_pt_a_grid = 14 ! small grid for quick debug
|
! my_n_pt_a_grid = 14 ! small grid for quick debug
|
||||||
touch my_grid_becke my_n_pt_r_grid my_n_pt_a_grid
|
touch my_grid_becke my_n_pt_r_grid my_n_pt_a_grid
|
||||||
|
|
||||||
my_n_pt_r_extra_grid = 30
|
my_n_pt_r_extra_grid = 30
|
||||||
@ -38,10 +38,19 @@ program test_ints
|
|||||||
! call routine_int2_grad1u2_grad2u2_j1b2
|
! call routine_int2_grad1u2_grad2u2_j1b2
|
||||||
! call routine_int2_u_grad1u_j1b2
|
! call routine_int2_u_grad1u_j1b2
|
||||||
! call test_total_grad_lapl
|
! call test_total_grad_lapl
|
||||||
call test_total_grad_square
|
! call test_total_grad_square
|
||||||
|
call test_ao_tc_int_chemist
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
subroutine test_ao_tc_int_chemist
|
||||||
|
implicit none
|
||||||
|
provide ao_tc_int_chemist
|
||||||
|
! provide ao_tc_int_chemist_test
|
||||||
|
! provide tc_grad_square_ao_test
|
||||||
|
! provide tc_grad_and_lapl_ao_test
|
||||||
|
end
|
||||||
|
|
||||||
subroutine routine_test_j1b
|
subroutine routine_test_j1b
|
||||||
implicit none
|
implicit none
|
||||||
integer :: i,icount,j
|
integer :: i,icount,j
|
||||||
|
Loading…
Reference in New Issue
Block a user