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

Fortran array assignment with two indices

我需要用 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))

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

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