4

我正在为 Fortran 代码编写一个名单输入文件。我知道如果你有一个一维数组,你可以填充一系列元素,

&namelist
array(10) = 0, 1, 2, ......., n
&END

相当于

&namelist
array(10) = 0
array(11) = 1
array(12) = 2
...
array(10 + n) = n
&END

我现在需要编写一个二维数组。我想做最短的等价于

&namelist
array2d(1,1) = 1
array2d(1,2) = 2
&END

我可以这样写吗

&namelist
array2d(1) = 1, 2
&END

还是我需要把它写成

&namelist
array2d(1,1) = 1, 2
&END
4

1 回答 1

7

哇,谢谢你的问题——以前从未听说过名单:) 这很有用!:) 经过一些测试,较旧的 gfortran 版本对此存在问题。假设你有

program nltest
  implicit none
  integer :: a(3,3)
  namelist /mylist/ a
  a = 0
  open(7, file='nlinput.txt')
  read(7, nml = mylist)
  write(*,*) a
end program nltest
  • 读取整个数组,a=1,2,3,4,5,6,7,8,9:无论编译器如何,这都可以正常读取 a(1,1), a(2,1), ... 。
  • 读取一个数组切片,例如a(2,:)=1,2,3:这适用于 ifort 和 gfortran 4.6.1,但不适用于 gfortran 4.3。

array2d(1,:) = 1,2因此,如果代码是用最近的编译器编译的,那么你应该能够编写你想做的事情。

于 2012-05-14T04:01:02.073 回答