From 1e390d83574392887c6e3890b9f860c98cd66904 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 11 Jul 2023 23:50:31 +0200 Subject: [PATCH] Reduce memory --- src/ao_two_e_ints/cholesky.irp.f | 25 ++----------------------- src/ccsd/ccsd_space_orb_sub.irp.f | 7 +++++++ 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/ao_two_e_ints/cholesky.irp.f b/src/ao_two_e_ints/cholesky.irp.f index 7d02d27f..175ccf6e 100644 --- a/src/ao_two_e_ints/cholesky.irp.f +++ b/src/ao_two_e_ints/cholesky.irp.f @@ -33,8 +33,7 @@ END_PROVIDER double precision, parameter :: dscale = 1.d0 double precision, allocatable :: D(:), Delta(:,:), Ltmp_p(:,:), Ltmp_q(:,:) - integer, allocatable :: Lset(:), Dset(:), addr(:,:), LDmap(:), DLmap(:) - integer, allocatable :: Lset_rev(:), Dset_rev(:) + integer, allocatable :: Lset(:), Dset(:), addr(:,:) logical, allocatable :: computed(:) integer :: i,j,k,m,p,q, qj, dj, p2, q2 @@ -47,8 +46,6 @@ END_PROVIDER double precision, external :: ao_two_e_integral integer :: block_size, iblock, ierr - integer(omp_lock_kind), allocatable :: lock(:) - double precision :: mem double precision, external :: memory_of_double, memory_of_int @@ -100,12 +97,8 @@ END_PROVIDER rank = 0 - allocate( D(ndim), Lset(ndim), LDmap(ndim), DLmap(ndim), Dset(ndim) ) - allocate( Lset_rev(ndim), Dset_rev(ndim), lock(ndim) ) + allocate( D(ndim), Lset(ndim), Dset(ndim) ) allocate( addr(3,ndim) ) - do k=1,ndim - call omp_init_lock(lock(k)) - enddo ! 1. k=0 @@ -139,12 +132,10 @@ END_PROVIDER ! 2. np=0 - Lset_rev = 0 do p=1,ndim if ( dscale*dscale*Dmax*D(p) > tau*tau ) then np = np+1 Lset(np) = p - Lset_rev(p) = np endif enddo @@ -169,16 +160,10 @@ END_PROVIDER ! c. nq=0 - LDmap = 0 - DLmap = 0 - Dset_rev = 0 do p=1,np if ( D(Lset(p)) > Dmin ) then nq = nq+1 Dset(nq) = Lset(p) - Dset_rev(Dset(nq)) = nq - LDmap(p) = nq - DLmap(nq) = p endif enddo @@ -380,21 +365,15 @@ END_PROVIDER enddo np=0 - Lset_rev = 0 do p=1,ndim if ( dscale*dscale*Dmax*D(p) > tau*tau ) then np = np+1 Lset(np) = p - Lset_rev(p) = np endif enddo enddo - do k=1,ndim - call omp_destroy_lock(lock(k)) - enddo - allocate(cholesky_ao(ao_num,ao_num,rank), stat=ierr) if (ierr /= 0) then call print_memory_usage() diff --git a/src/ccsd/ccsd_space_orb_sub.irp.f b/src/ccsd/ccsd_space_orb_sub.irp.f index f97514cd..b48ca7da 100644 --- a/src/ccsd/ccsd_space_orb_sub.irp.f +++ b/src/ccsd/ccsd_space_orb_sub.irp.f @@ -18,6 +18,13 @@ subroutine run_ccsd_space_orb integer(bit_kind) :: det(N_int,2) integer :: nO, nV, nOa, nVa + if (do_ao_cholesky) then + PROVIDE cholesky_mo_transp + FREE cholesky_ao + else + PROVIDE mo_two_e_integrals_in_map + endif + det = psi_det(:,:,cc_ref) print*,'Reference determinant:' call print_det(det,N_int)