2012-05-12 39 views
3

我正在为Fortran代码编写名称列表输入文件。我知道,如果你有一维数组,你可以填充由一系列元素,格式化Fortran名单输入文件中的2D阵列

&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 
+0

如果你正在写它,为什么你不尝试以上并找出? – MoonKnight

+0

因为我没有直接写文件。我正在编写一个LabView客户端,与一个将名称列表输入格式化为Fortran代码的Java服务器通信。总而言之,现在要比调试后者更简单。 – user1139069

+0

直到你把它全部弄清楚了,你可以编写一维数组,在Fortran中读取它,并将其重塑为2D。 –

回答

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如果代码是用最近的编译器编译的话。