具有两个索引的 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
我需要用 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