グリッド内のすべてのポイントをループし、各ポイントについて、特定の条件が十分な数の隣接ポイントに対して保持されているかどうかを確認するコードがあります。さらに、グリッド上に周期的な境界があります。
この問題はライフゲームとよく似ています。
私の現在のコードは次のようになります
do k=1,ksize; do j=1,jsize; do i=1,isize ! Loop over all points
ncount = 0
kkloop: do kk=k-1,k+1 ! Loop over neighbours
ktmp = kk
if(kk>ksize) ktmp = 1 ! Handle periodic boundary
if(kk<1) ktmp = ksize
do jj=j-1,j+1
jtmp = jj
if(jj>jsize) jtmp = 1
if(jj<1) jtmp = jsize
do ii=i-1,i+1
if(ii == 0 .and. jj == 0 .and. kk == 0) cycle ! Skip self
itmp = ii
if(ii>isize) itmp = 1
if(ii<1) itmp = isize
if(grid(itmp,jtmp,ktmp)) ncount = ncount + 1 ! Check condition for neighbour
if(ncount > threshold) then ! Enough neigbours with condition?
do_stuff(i,j,k)
break kkloop
end if
end do
end do
end do
end do; end do; end do
これはエレガントでもなく、おそらく非常に効率的でもありません。これを行うより良い方法はありますか?このコードは何度も繰り返されるので、できるだけ速くしたいと思います。