作業中の Fortran プログラムで、入力ファイルの処理中にランタイム エラーが発生しました。
At line 182 of file ../SOURCE_FILE.f90 (unit = 1, file = 'INPUT_FILE.1')
Fortran runtime error: Bad value during integer read
行 182 を見ると、暗黙的/暗黙的な DO ループを含む READ ステートメントが表示されます。
182: READ(IT4, 310 )((IPPRM2(IP,I),IP=1,NP),I=1,16) ! read 6 integers
183: READ(IT4, 320 )((PPARM2(IP,I),IP=1,NP),I=1,14) ! read 5 reals
フォーマット ステートメント:
310 FORMAT(1X,6I12)
デバッガーでこのコードに到達するとNP
、値が 2I
になり、値が 6 になり、値が 67 になります。ループで再初期化する必要があるとIP
思います。I
IP
私の問題は、デバッガーでステップスルーしようとすると、READ ステートメントが実行されたように見えて、エラーがスローされることです。読んでいるときにそれに従う方法がわかりません。関数に足を踏み入れてみましたが、gfortran ライブラリに慣れていないため、難しいルートのようです。入力ファイルは問題ないようです。問題なく読み取られるはずです。これは、この READ ステートメントが意図したとおりにループしていないと思わせます。
私は Fortran とこのような暗黙的な DO ループに完全に慣れていませんが、182 行目は書式文字列 #310 に従って 6 つの整数で読み取られるはずです。ただし、到着したときNP
の値は2であるため、2つの整数を16回しか読み取ろうとしないと思います。
IPPARM
この読み取りステートメントをデバッグして、ファイルから読み取られたときに読み取られた値を調べるにはどうすればよいですか? Fortran ライブラリをステップ実行する必要がありますか?
これらの暗黙のループに関する私の混乱を解消できるヒントをいただければ幸いです。
ありがとう!
注: Linux で gfortran/gcc と gdb を使用しています。