4

Fortran コードの名前リスト入力ファイルを作成しています。1D配列がある場合、次の方法で要素の範囲を設定できることを知っています。

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

と同等です

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

2次元配列を書く必要があります。最短で同等のことをしたい

&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 に答える