特定の数の行と列を持つマスクがあります。たとえば 1 を含む (i,j) コンポーネントだけを読みたいと思います。次に、1 を含む (i,j) コンポーネントが見つかったら、(i+1,j),(ii ,j),(i,j+1),(i,j-1) が 1 に等しいことがわかります。
これが明確であることを願っています。どんなアドバイスでも大歓迎です。ありがとう。
マスクを次のようにします。
integer, dimension(1:r,1:c) :: mask
次に、次のフラグメントが正しい方向を示しているはずです。
forall (i=1:r, j=1:c, mask(i,j)==1)
if ( mask(i-1,j)==1) then
! do the right thing
else if ( mask(i+1,j)==1) then
! I hope you get the picture now
...
+/- i/j
配列の境界の外に出る というエッジケースに対処するのはあなたに任せます。forall
は必ずしも最速の構文であるとは限りません。ループのシーケンスではなく、それを使用することの優雅さと可読性について議論することもできますが、そうではありません。