From 956cebf6647ef8d2648839361048fc8803475eac Mon Sep 17 00:00:00 2001 From: Abdallah Ammar Date: Wed, 11 Dec 2024 11:38:55 +0100 Subject: [PATCH] working on optim Fock matrix --- src/AOtoMO/Hartree_matrix_AO_basis.f90 | 69 +++++++++++++++----------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/src/AOtoMO/Hartree_matrix_AO_basis.f90 b/src/AOtoMO/Hartree_matrix_AO_basis.f90 index 0d0810d..4d12a5b 100644 --- a/src/AOtoMO/Hartree_matrix_AO_basis.f90 +++ b/src/AOtoMO/Hartree_matrix_AO_basis.f90 @@ -47,92 +47,103 @@ subroutine Hartree_matrix_AO_basis_hpc(nBas, ERI_size, P, ERI_chem, H) integer :: mu, nu, la, si integer :: nunu, lala, nula, lasi, numu + integer :: nunu0, lala0 integer*8 :: nunununu, nunulala, nununula, nunulasi integer*8 :: lalanunu, lasinunu, numulala, lalanumu integer*8 :: numunula, numulasi, lasinumu, nununumu - integer*8 :: munu0, munu - integer*8 :: sila0, sila - integer*8 :: munulasi0, munulasi + integer*8 :: nunununu0, numunumu0 do nu = 1, nBas - nunu = (nu * (nu - 1)) / 2 + nu - nunununu = (nunu * (nunu - 1)) / 2 + nunu + nunu0 = shiftr(nu * (nu - 1), 1) + nunu = nunu0 + nu + nunununu0 = shiftr(nunu * (nunu - 1), 1) + + nunununu = nunununu0 + nunu H(nu,nu) = P(nu,nu) * ERI_chem(nunununu) do la = 1, nu-1 - lala = (la * (la - 1)) / 2 + la - nunulala = (nunu * (nunu - 1)) / 2 + lala + lala0 = shiftr(la * (la - 1), 1) + + lala = lala0 + la + nunulala = nunununu0 + lala H(nu,nu) = H(nu,nu) + P(la,la) * ERI_chem(nunulala) - nula = (nu * (nu - 1)) / 2 + la - nununula = (nunu * (nunu - 1)) / 2 + nula + nula = nunu0 + la + nununula = nunununu0 + nula H(nu,nu) = H(nu,nu) + 2.d0 * P(la,nu) * ERI_chem(nununula) do si = 1, la - 1 - lasi = (la * (la - 1)) / 2 + si - nunulasi = (nunu * (nunu - 1)) / 2 + lasi + lasi = lala0 + si + nunulasi = nunununu0 + lasi H(nu,nu) = H(nu,nu) + 2.d0 * P(si,la) * ERI_chem(nunulasi) enddo enddo do la = nu + 1, nBas - lala = (la * (la - 1)) / 2 + la - lalanunu = (lala * (lala - 1)) / 2 + nunu + lala0 = shiftr(la * (la - 1), 1) + + lala = lala0 + la + lalanunu = shiftr(lala * (lala - 1), 1) + nunu H(nu,nu) = H(nu,nu) + P(la,la) * ERI_chem(lalanunu) do si = 1, la - 1 - lasi = (la * (la - 1)) / 2 + si - lasinunu = (lasi * (lasi - 1)) / 2 + nunu + lasi = lala0 + si + lasinunu = shiftr(lasi * (lasi - 1), 1) + nunu H(nu,nu) = H(nu,nu) + 2.d0 * P(si,la) * ERI_chem(lasinunu) enddo enddo do mu = 1, nu - 1 - numu = (nu * (nu - 1)) / 2 + mu - nununumu = (nunu * (nunu - 1)) / 2 + numu + numu = nunu0 + mu + + numunumu0 = shiftr(numu * (numu - 1), 1) + + nununumu = nunununu0 + numu H(mu,nu) = p(nu,nu) * ERI_chem(nununumu) do la = 1, nu - 1 - lala = (la * (la - 1)) / 2 + la - numulala = (numu * (numu - 1)) / 2 + lala + lala = shiftr(la * (la - 1), 1) + la + numulala = numunumu0 + lala H(mu,nu) = H(mu,nu) + p(la,la) * ERI_chem(numulala) enddo do la = nu + 1, nBas - lala = (la * (la - 1)) / 2 + la - lalanumu = (lala * (lala - 1)) / 2 + numu + lala = shiftr(la * (la - 1), 1) + la + lalanumu = shiftr(lala * (lala - 1), 1) + numu H(mu,nu) = H(mu,nu) + p(la,la) * ERI_chem(lalanumu) enddo do la = 1, mu - nula = (nu * (nu - 1)) / 2 + la - numunula = (numu * (numu - 1)) / 2 + nula + nula = nunu0 + la + numunula = numunumu0 + nula H(mu,nu) = H(mu,nu) + 2.d0 * P(la,nu) * ERI_chem(numunula) enddo do la = mu + 1, nu - 1 - nula = (nu * (nu - 1)) / 2 + la - numunula = (nula * (nula - 1)) / 2 + numu + nula = nunu0 + la + numunula = shiftr(nula * (nula - 1), 1) + numu H(mu,nu) = H(mu,nu) + 2.d0 * P(la,nu) * ERI_chem(numunula) enddo do la = 2, nu - 1 + lala0 = shiftr(la * (la - 1), 1) do si = 1, la - 1 - lasi = (la * (la - 1)) / 2 + si - numulasi = (numu * (numu - 1)) / 2 + lasi + lasi = lala0 + si + numulasi = numunumu0 + lasi H(mu,nu) = H(mu,nu) + 2.d0 * P(si,la) * ERI_chem(numulasi) enddo enddo do la = nu + 1, nBas + lala0 = shiftr(la * (la - 1), 1) do si = 1, la - 1 - lasi = (la * (la - 1)) / 2 + si - lasinumu = (lasi * (lasi - 1)) / 2 + numu + lasi = lala0 + si + lasinumu = shiftr(lasi * (lasi - 1), 1) + numu H(mu,nu) = H(mu,nu) + 2.d0 * P(si,la) * ERI_chem(lasinumu) enddo enddo