(*) のような行を含む古い Fortran コードを更新しようとしています。
allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0
最初に、私はそれらをに変更しました
allocate( a(2), source=0.0 )
allocate( b(2), source=0.0 )
しかし、これは明らかにそれほど単純ではありません。だから私はそれらを組み合わせてみました
allocate( a(2), b(2), source=0.0 ) !! (1)
うまくいくとは思っていませんでしたが、実際には gfortran >=4.8 および Sun fortran 8.7 で動作しました (ifort-14 では動作しませんでした)。そこで、 F2003とF2008のドキュメントの ALLOCATE セクションを調べたところ、F2008 では「SOURCE= が表示された場合、 allocation-listに含まれる割り当てオブジェクトは 1 つだけでなければならない」という制限が削除されたようです。これは、上記の行 1 は F2008 では問題なく、異なる動作は単に F2008 のサポートの程度が異なるためであるということですか?
(*) 実際のコードでは、派生型の配列コンポーネントをいくつか割り当てようとして、allocate( conf% crd(3,N), conf% vel(3,N), conf% frc(3,N), blah, blah,... )
それぞれにゼロを割り当てようとしていました。そのため、これらの行をいくらか単純化できるかどうか疑問に思っていました。