我需要用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))
但由于语法错误,这不起作用。
答案 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