在fortran名单列表输入文件中格式化2D数组

时间:2012-05-12 17:38:37

标签: fortran

我正在为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

1 个答案:

答案 0 :(得分:6)

哇,谢谢你的问题 - 之前从未听过名单:)这很有用!! :)经过一些测试,较旧的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:这样可以正常工作并读取(1,1),a(2,1),......无论编译器如何都可以预期。
  • 读取一个数组切片,例如a(2,:)=1,2,3:这适用于ifort和gfortran 4.6.1,但是使用gfortran 4.3则没有。

为了做你想做的事,如果用最近的编译器编译代码,你应该能够编写array2d(1,:) = 1,2