From a3e12f3d33b2cb3478f7b457c8907a0728d21a58 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 20 Nov 2015 22:43:34 +0100 Subject: [PATCH] Accelerated filter_connected_i_H_psi0 for large N_int --- src/Determinants/filter_connected.irp.f | 29 +++++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Determinants/filter_connected.irp.f b/src/Determinants/filter_connected.irp.f index cc304b59..005aa020 100644 --- a/src/Determinants/filter_connected.irp.f +++ b/src/Determinants/filter_connected.irp.f @@ -132,7 +132,7 @@ subroutine filter_connected_i_H_psi0(key1,key2,Nint,sze,idx) popcnt(xor( key1(1,2,i), key2(1,2))) if (degree_x2 > 4) then cycle - else if(degree_x2 .ne. 0)then + else if(degree_x2 /= 0)then idx(l) = i l = l+1 endif @@ -148,7 +148,7 @@ subroutine filter_connected_i_H_psi0(key1,key2,Nint,sze,idx) popcnt(xor( key1(2,2,i), key2(2,2))) if (degree_x2 > 4) then cycle - else if(degree_x2 .ne. 0)then + else if(degree_x2 /= 0)then idx(l) = i l = l+1 endif @@ -166,7 +166,7 @@ subroutine filter_connected_i_H_psi0(key1,key2,Nint,sze,idx) popcnt(xor( key1(3,2,i), key2(3,2))) if (degree_x2 > 4) then cycle - else if(degree_x2 .ne. 0)then + else if(degree_x2 /= 0)then idx(l) = i l = l+1 endif @@ -175,23 +175,28 @@ subroutine filter_connected_i_H_psi0(key1,key2,Nint,sze,idx) else !DIR$ LOOP COUNT (1000) - do i=1,sze + outer: do i=1,sze degree_x2 = 0 !DEC$ LOOP COUNT MIN(4) do m=1,Nint - degree_x2 = degree_x2+ popcnt(xor( key1(m,1,i), key2(m,1))) +& - popcnt(xor( key1(m,2,i), key2(m,2))) - if (degree_x2 > 4) then - exit + if ( key1(m,1,i) /= key2(m,1)) then + degree_x2 = degree_x2+ popcnt(xor( key1(m,1,i), key2(m,1))) + if (degree_x2 > 4) then + cycle outer + endif + endif + if ( key1(m,2,i) /= key2(m,2)) then + degree_x2 = degree_x2+ popcnt(xor( key1(m,2,i), key2(m,2))) + if (degree_x2 > 4) then + cycle outer + endif endif enddo - if (degree_x2 > 4) then - cycle - else if(degree_x2 .ne. 0)then + if(degree_x2 /= 0)then idx(l) = i l = l+1 endif - enddo + enddo outer endif idx(0) = l-1