在Fortran中根据掩码进行读取

在Fortran中根据掩码进行读取,fortran,mask,Fortran,Mask,我有一个有一定数量行和列的掩码。 我只想阅读包含示例1的(I,j)组件。 然后,一旦找到具有1的(i,j)分量,如果发现(i+1,j)、(i-i,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的(I,j)组件。 然后,一旦找到具有1的(i,j)分量,如果发现(i+1,j)、(i-i,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
不一定是最快的构造,我们可以讨论使用它的优雅性和可读性,而不是一系列循环,但我们不要这样做