根据Fortran的面具读书

时间:2012-05-16 08:09:43

标签: fortran mask

我有一个具有一定数量的行和列的掩码。 我想只读取包含例如1的(i,j)组件。 然后,一旦找到具有1的(i,j)分量,如果(i + 1,j),(ii,j),(i,j + 1),(i,j-1)中的任何一个执行四个不同的动作等于1。

希望这很清楚。 欢迎任何建议。 感谢。

1 个答案:

答案 0 :(得分: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不一定是最快的构造,我们可以讨论使用它的优雅性和可读性,而不是一系列循环,但不要这样做。