From 9661db8cf8e6d255be54df8677a2998ef74c8316 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 9 Dec 2015 21:21:03 +0100 Subject: [PATCH] Updated bitmasks when the number of MOs is < ao_num --- config/ifort.cfg | 1 + src/Bitmask/bitmasks.irp.f | 40 +++++++++++++++++-- .../pot_ao_pseudo_ints.irp.f | 4 +- src/Utils/LinearAlgebra.irp.f | 4 +- 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/config/ifort.cfg b/config/ifort.cfg index bfa41c03..2b2fe0a2 100644 --- a/config/ifort.cfg +++ b/config/ifort.cfg @@ -52,6 +52,7 @@ FCFLAGS : -xSSE4.2 -O2 -ip -ftz [DEBUG] FC : -g -traceback FCFLAGS : -xSSE2 -C -fpe0 +IRPF90_FLAGS : --openmp # OpenMP flags ################# diff --git a/src/Bitmask/bitmasks.irp.f b/src/Bitmask/bitmasks.irp.f index 29588369..f54532ca 100644 --- a/src/Bitmask/bitmasks.irp.f +++ b/src/Bitmask/bitmasks.irp.f @@ -141,6 +141,19 @@ BEGIN_PROVIDER [ integer(bit_kind), generators_bitmask_restart, (N_int,2,6,N_gen enddo endif + integer :: i + do k=1,N_generators_bitmask + do ispin=1,2 + do i=1,N_int + generators_bitmask_restart(i,ispin,s_hole ,k) = iand(full_ijkl_bitmask(i,d_hole1),generators_bitmask_restart(i,ispin,s_hole,k) ) + generators_bitmask_restart(i,ispin,s_part ,k) = iand(full_ijkl_bitmask(i,d_part1),generators_bitmask_restart(i,ispin,s_part,k) ) + generators_bitmask_restart(i,ispin,d_hole1,k) = iand(full_ijkl_bitmask(i,d_hole1),generators_bitmask_restart(i,ispin,d_hole1,k) ) + generators_bitmask_restart(i,ispin,d_part1,k) = iand(full_ijkl_bitmask(i,d_part1),generators_bitmask_restart(i,ispin,d_part1,k) ) + generators_bitmask_restart(i,ispin,d_hole2,k) = iand(full_ijkl_bitmask(i,d_hole2),generators_bitmask_restart(i,ispin,d_hole2,k) ) + generators_bitmask_restart(i,ispin,d_part2,k) = iand(full_ijkl_bitmask(i,d_part2),generators_bitmask_restart(i,ispin,d_part2,k) ) + enddo + enddo + enddo END_PROVIDER @@ -172,7 +185,7 @@ BEGIN_PROVIDER [ integer(bit_kind), generators_bitmask, (N_int,2,6,N_generators_ if (exists) then call ezfio_get_bitmasks_generators(generators_bitmask) else - integer :: k, ispin + integer :: k, ispin, i do k=1,N_generators_bitmask do ispin=1,2 generators_bitmask(:,ispin,s_hole ,k) = full_ijkl_bitmask(:,d_hole1) @@ -185,6 +198,18 @@ BEGIN_PROVIDER [ integer(bit_kind), generators_bitmask, (N_int,2,6,N_generators_ enddo endif + do k=1,N_generators_bitmask + do ispin=1,2 + do i=1,N_int + generators_bitmask(i,ispin,s_hole ,k) = iand(full_ijkl_bitmask(i,d_hole1),generators_bitmask(i,ispin,s_hole,k) ) + generators_bitmask(i,ispin,s_part ,k) = iand(full_ijkl_bitmask(i,d_part1),generators_bitmask(i,ispin,s_part,k) ) + generators_bitmask(i,ispin,d_hole1,k) = iand(full_ijkl_bitmask(i,d_hole1),generators_bitmask(i,ispin,d_hole1,k) ) + generators_bitmask(i,ispin,d_part1,k) = iand(full_ijkl_bitmask(i,d_part1),generators_bitmask(i,ispin,d_part1,k) ) + generators_bitmask(i,ispin,d_hole2,k) = iand(full_ijkl_bitmask(i,d_hole2),generators_bitmask(i,ispin,d_hole2,k) ) + generators_bitmask(i,ispin,d_part2,k) = iand(full_ijkl_bitmask(i,d_part2),generators_bitmask(i,ispin,d_part2,k) ) + enddo + enddo + enddo END_PROVIDER BEGIN_PROVIDER [ integer, N_cas_bitmask ] @@ -223,7 +248,7 @@ BEGIN_PROVIDER [ integer(bit_kind), cas_bitmask, (N_int,2,N_cas_bitmask) ] ! Bitmasks for CAS reference determinants. (N_int, alpha/beta, CAS reference) END_DOC logical :: exists - integer :: i,i_part,i_gen,j + integer :: i,i_part,i_gen,j,k PROVIDE ezfio_filename call ezfio_has_bitmasks_cas(exists) @@ -240,14 +265,21 @@ BEGIN_PROVIDER [ integer(bit_kind), cas_bitmask, (N_int,2,N_cas_bitmask) ] else i_part = 2 i_gen = 1 - do j = 1, N_cas_bitmask - do i = 1, N_int + do j=1, N_cas_bitmask + do i=1, N_int cas_bitmask(i,1,j) = generators_bitmask_restart(i,1,i_part,i_gen) cas_bitmask(i,2,j) = generators_bitmask_restart(i,2,i_part,i_gen) enddo enddo endif endif + do i=1,N_cas_bitmask + do j = 1, N_cas_bitmask + do k=1,N_int + cas_bitmask(k,j,i) = iand(cas_bitmask(k,j,i),full_ijkl_bitmask(k,j)) + enddo + enddo + enddo END_PROVIDER diff --git a/src/Integrals_Monoelec/pot_ao_pseudo_ints.irp.f b/src/Integrals_Monoelec/pot_ao_pseudo_ints.irp.f index 2856807b..59693cdb 100644 --- a/src/Integrals_Monoelec/pot_ao_pseudo_ints.irp.f +++ b/src/Integrals_Monoelec/pot_ao_pseudo_ints.irp.f @@ -24,7 +24,7 @@ BEGIN_PROVIDER [ double precision, ao_pseudo_integral_local, (ao_num_align,ao_nu double precision :: cpu_1, cpu_2, wall_1, wall_2, wall_0 integer :: thread_num - !$ integer :: omp_get_thread_num + integer :: omp_get_thread_num ao_pseudo_integral_local = 0.d0 @@ -118,7 +118,7 @@ BEGIN_PROVIDER [ double precision, ao_pseudo_integral_local, (ao_num_align,ao_nu integer :: power_A(3),power_B(3) integer :: i,j,k,l,n_pt_in,m double precision :: Vloc, Vpseudo - !$ integer :: omp_get_thread_num + integer :: omp_get_thread_num double precision :: cpu_1, cpu_2, wall_1, wall_2, wall_0 integer :: thread_num diff --git a/src/Utils/LinearAlgebra.irp.f b/src/Utils/LinearAlgebra.irp.f index a859a913..746b5f13 100644 --- a/src/Utils/LinearAlgebra.irp.f +++ b/src/Utils/LinearAlgebra.irp.f @@ -79,7 +79,7 @@ subroutine ortho_canonical(overlap,LDA,N,C,LDC,m) m=n do i=1,n - if ( D(i) >= 1.d-4 ) then + if ( D(i) >= 1.d-6 ) then D(i) = 1.d0/dsqrt(D(i)) else m = i-1 @@ -151,7 +151,7 @@ subroutine ortho_lowdin(overlap,LDA,N,C,LDC,m) !$OMP DO do i=1,n - if ( D(i) < 1.d-5 ) then + if ( D(i) < 1.d-6 ) then D(i) = 0.d0 else D(i) = 1.d0/dsqrt(D(i))