5

外部データ ファイルから読み取る次のブロックを作成しました。

     open(unit=338,file='bounnodes.dat',form='formatted') 
      DO I=1,NQBOUN
         DO J=1,NUMBOUNNODES(I)
            read(338,2001) NODEBOUN(i,j)
            write(6,*) 'BOUNDARY NODES',  NODEBOUN(i,j)
         ENDDO
       ENDDO
     2001
     FORMAT(32I5)

私が理解している限り、これは から 2 x 32 の配列を読み取るはずbounnodes.datです。end-of-fileただし、読み取り中にエラーが発生し、最初の列が出力されます。

同じコードを使用して 32 x 2 の配列を読み込もうとしましたが、最初の列の 32 要素を読み取りますが0s、次の列に出力されます。

何が起こっているのか説明していただけますか?私のフォーマットは間違っていますか?

4

1 に答える 1

7

Fortran のすべての読み取りステートメントは、次のレコードに進みます。これは、通常のテキスト ファイルの改行を意味します。これを試して:

   DO I=1,NQBOUN
     DO J=1,NUMBOUNNODES(I)
        read(338,2001,advance='no') NODEBOUN(i,j)
        write(*,*) 'BOUNDARY NODES',  NODEBOUN(i,j)
     ENDDO
     read(338,*)
   ENDDO

ここで、NQBOUN は行数、NUMBOUNNODES(I) は行の列数です。(32x2 対 2x32 とは何か、常に問題があります)

暗黙の do を使用して、さらに短くすることができます

   DO I=1,NQBOUN
        read(338,2001) ( NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
        write(*,*) ( 'BOUNDARY NODES', NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
   ENDDO

あるいは

   DO I=1,NQBOUN
        read(338,2001) NODEBOUN(i,:)
        write(*,*) 'BOUNDARY NODES',  NODEBOUN(i,1:NUMBOUNNODES(I))
   ENDDO

これらはすべて Fortran 90 機能を使用します。

于 2012-11-29T11:28:35.187 に答える