10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-06-21 04:32:14 +02:00

Accelerated filter_connected_i_H_psi0 for large N_int

This commit is contained in:
Anthony Scemama 2015-11-20 22:43:34 +01:00
parent 5d253ea84b
commit a3e12f3d33

View File

@ -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