2012-05-12 44 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如果代碼是用最近的編譯器編譯的話。