【Fortran90/95】サブルーチン内での変数のせいでのエラー「Dummy argument ‘~’ with INTENT(IN) in variable definition context (item in READ)」の対処方法

Fortran

Dummy argument ‘~’ with INTENT(IN) in variable definition context (item in READ)

というエラーが、以下のような形で発生。

 

mat_nd.f90:11:13:

read(20, *) a(i, 1:n)
1
Error: Dummy argument ‘a’ with INTENT(IN) in variable definition context (item in READ) at (1)
mat_nd.f90:15:13:

read(20, *) b(i, 1:n)
1
Error: Dummy argument ‘b’ with INTENT(IN) in variable definition context (item in READ) at (1)
mat_nd.f90:40:4:

use mat_read
1
Fatal Error: Can’t open module file ‘mat_read.mod’ for reading at (1): No such file or directory
compilation terminated.

ついでにFatal Errorも・・・。

原因は以下の6行目のところ。

 

どうやら、intent(in)で主プログラムからの読み込みのみしかできないことになっていて、読み込んでサブルーチン内で実行して出来たa,bに主プログラムがアクセスできないということなのだろう。

事実、 Fatal Errorで「Can’t open module file ‘mat_read.mod’…」とあるし。

 

ということで、この回答を参考に、intent(in)をintent(inout)に変更。

これで、主プログラム内で、サブルーチンで処理したa,bの変数をつかえる。

 

なお、そのように修正したことで、「Fatal Error: Can’t open module file~」というエラー文もなくなった。