From 0f6cecccfa229ebf664da090b0f3c735ccf3d7a2 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 22 Sep 2014 18:26:22 +0200 Subject: [PATCH] HF small Acceleration --- src/Hartree_Fock/ref_bitmask.irp.f | 36 +++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/Hartree_Fock/ref_bitmask.irp.f b/src/Hartree_Fock/ref_bitmask.irp.f index 7f760562..c93b8b34 100644 --- a/src/Hartree_Fock/ref_bitmask.irp.f +++ b/src/Hartree_Fock/ref_bitmask.irp.f @@ -1,5 +1,4 @@ - BEGIN_PROVIDER [ double precision, ref_bitmask_energy ] -&BEGIN_PROVIDER [ double precision, mono_elec_ref_bitmask_energy ] + BEGIN_PROVIDER [ double precision, mono_elec_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, kinetic_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, nucl_elec_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, bi_elec_ref_bitmask_energy ] @@ -16,20 +15,17 @@ call bitstring_to_list(ref_bitmask(1,2), occ(1,2), i, N_int) - ref_bitmask_energy = 0.d0 mono_elec_ref_bitmask_energy = 0.d0 kinetic_ref_bitmask_energy = 0.d0 nucl_elec_ref_bitmask_energy = 0.d0 bi_elec_ref_bitmask_energy = 0.d0 do i = 1, elec_beta_num - ref_bitmask_energy += mo_mono_elec_integral(occ(i,1),occ(i,1)) + mo_mono_elec_integral(occ(i,2),occ(i,2)) kinetic_ref_bitmask_energy += mo_kinetic_integral(occ(i,1),occ(i,1)) + mo_kinetic_integral(occ(i,2),occ(i,2)) nucl_elec_ref_bitmask_energy += mo_nucl_elec_integral(occ(i,1),occ(i,1)) + mo_nucl_elec_integral(occ(i,2),occ(i,2)) enddo do i = elec_beta_num+1,elec_alpha_num - ref_bitmask_energy += mo_mono_elec_integral(occ(i,1),occ(i,1)) kinetic_ref_bitmask_energy += mo_kinetic_integral(occ(i,1),occ(i,1)) nucl_elec_ref_bitmask_energy += mo_nucl_elec_integral(occ(i,1),occ(i,1)) enddo @@ -37,21 +33,45 @@ do j= 1, elec_alpha_num do i = j+1, elec_alpha_num bi_elec_ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,1),occ(j,1)) - ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,1),occ(j,1)) enddo enddo do j= 1, elec_beta_num do i = j+1, elec_beta_num bi_elec_ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,2),occ(j,2)) - ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,2),occ(j,2)) enddo do i= 1, elec_alpha_num bi_elec_ref_bitmask_energy += mo_bielec_integral_jj(occ(i,1),occ(j,2)) - ref_bitmask_energy += mo_bielec_integral_jj(occ(i,1),occ(j,2)) enddo enddo mono_elec_ref_bitmask_energy = kinetic_ref_bitmask_energy + nucl_elec_ref_bitmask_energy END_PROVIDER + BEGIN_PROVIDER [ double precision, ref_bitmask_energy ] + use bitmasks + implicit none + BEGIN_DOC + ! Energy of the reference bitmask used in Slater rules + END_DOC + + integer :: occ(N_int*bit_kind_size,2) + integer :: i,j + double precision :: ni,nj + + call bitstring_to_list(ref_bitmask(1,1), occ(1,1), i, N_int) + call bitstring_to_list(ref_bitmask(1,2), occ(1,2), i, N_int) + + + ref_bitmask_energy = 0.d0 + + do j=1,ao_num + do i=1,ao_num + ref_bitmask_energy += 0.5d0 * ( & + (ao_mono_elec_integral(i,j) + Fock_matrix_alpha_ao(i,j) ) * HF_density_matrix_ao_alpha(i,j) + & + (ao_mono_elec_integral(i,j) + Fock_matrix_beta_ao (i,j) ) * HF_density_matrix_ao_beta (i,j) ) + enddo + enddo + +END_PROVIDER +