具有两个索引的Fortran数组赋值

时间:2016-02-10 05:56:38

标签: fortran fortran90

我需要用x*x-y*y初始化一个二维数组,其中x和y是索引。

相关代码

REAL, DIMENSION(1:XSIZE,1:YSIZE) :: PHI
PHI(1:XSIZE,1:YSIZE) = reshape((/ (i*i,i=1,XSIZE) /),shape(PHI))

但我真正想要的是像

PHI(1:XSIZE,1:YSIZE) = reshape((/ (i*i-j*j,i=1,XSIZE,j=1,YSIZE) /),shape(PHI))

但由于语法错误,这不起作用。

1 个答案:

答案 0 :(得分:2)

Fortran中的初始化具有特定含义 - 它是对象在程序开始执行之前获取值的过程。您的示例显示赋值,这是在执行程序期间可能发生的许多操作之一。

对于Fortran 90中的正确初始化,您可以执行以下操作:

INTEGER :: ix
INTEGER :: iy
REAL, DIMENSION(XSIZE,YSIZE) :: PHI = RESHAPE(  &
    (/ ( (ix * ix - iy * iy, ix = 1, XSIZE), iy = 1, YSIZE) /),  &
    SHAPE=[XSIZE, YSIZE] )

您还可以使用上面的初始化程序(=之后的表达式)作为赋值语句的右侧。

该值的执行时间分配的其他选项包括使用do构造,或者在以后的标准中使用FORALL。

FORALL (INTEGER :: ix = 1:XSIZE, iy = 1:YSIZE) PHI(ix,iy) = ix*ix - iy*iy