Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许索引访问的Fortran关联语法?_Fortran - Fatal编程技术网

允许索引访问的Fortran关联语法?

允许索引访问的Fortran关联语法?,fortran,Fortran,有没有一种很好的方法来编写Fortran ASSOCIATE语句来实现这一点 FORALL (i = 2:n-2) v(:,i) = v(:,i) + MATMUL(A, & c(2)*u(:,i-2) + c(1)*u(:,i-1) + c(0)*u(:,i) + c(1)*u(:,i+1) + c(2)*u(:,i+2)) END FORALL 变成下面这样 ASSOCIATE ( U => ..., V => ...) FOR

有没有一种很好的方法来编写Fortran ASSOCIATE语句来实现这一点

FORALL (i = 2:n-2)
    v(:,i) = v(:,i) + MATMUL(A, &
             c(2)*u(:,i-2) + c(1)*u(:,i-1) + c(0)*u(:,i) + c(1)*u(:,i+1) + c(2)*u(:,i+2))
END FORALL
变成下面这样

ASSOCIATE ( U => ..., V => ...)
    FORALL (i = 2:n-2)
        V(i) = V(i) + MATMUL(A, &
               c(2)*U(i-2) + c(1)*U(i-1) + c(0)*U(i) + c(1)*U(i+1) + c(2)*U(i+2))
    END FORALL
END ASSOCIATE
我正在看Adams等人的Fortran 2003手册第8.2节,但我不知道如何编写
associate name=>selector
构造,以允许对
associate name
进行索引访问


很明显,我要说的是几句台词的过度使用。我有一大堆要浓缩的东西。

除非我误读了,否则我认为这是不可能的。说明(第8.1.4.3节):

在“选择类型”或“关联”构造中,每个关联实体与其关联实体具有相同的等级 关联选择器

就我所见,您需要一个秩1关联实体(
V
),并且需要秩2
关联选择器(保持
v
)。

如果目标是使代码更短/更好,我认为实现这一目标的最佳方法不需要关联
结构:

forall(i=2:n-2)
  v(:,i) = v(:,i) + MATMUL(A,MATMUL(u(:,i-2:i+2),c([2,1,0,1,2]))
end forall
只要5个大小的系数数组不变,就可以将其预初始化为

real :: c5(5)
c5 = c([2,1,0,1,2])
然后在一条直线上运行

forall(i=2:n-2) v(:,i) = v(:,i) + MATMUL(A,MATMUL(u(:,i-2:i+2),c5))

请注意,它必须是
lbound(u,2)谢谢您的回答。除了玩预处理器游戏,还有什么标准的习惯用法来完成我想要的吗?@Rhys:我认为习惯用法应该是使用指向数组部分的指针,但我不认为这会使你的代码更容易理解、更整洁或更短,这似乎是你的目标。@Mark:我完全同意指向数组部分的指针并没有让它变得更好。谢谢各位。