====== モジュールサブローチンの基本形 ======
===== モジュールサブルーチンの記述方法 =====
**モジュール副プログラム**は、モジュールの中に書かれたサブルーチンと関数であり、これらのモジュールサブルーチン、モジュール関数と呼ぶ。list3_2.f90に例を示す。
module subprog !モジュールの宣言
implicit none !この宣言は必ず行う
contains !この後にサブルーチンや関数を記述する
subroutine swap(a, b) !サブルーチンの開始行
!implicit none !上記のimplicit文でモジュール内を設定
integer a,b
integer tmp !主プログラムのtmpとは実態違う
tmp = a
a = b
b = tmp
end subtoutine swap !サブルーチンの終了行
end module subprog !モジュールの終了行
program exchange !主プログラム
use subprog !モジュールsubprogの使用宣言
implicit none !この宣言は必ず行う
integer :: x=77, y=9095, tmp=0 !初期値設定と整数型変数を宣言
write(*,*) 'x, y, tmp = ',x, y, tmp !確認のための出力
call swap(x, y) !モジュールサブルーチンを呼ぶ(x,yは実引数)
write(*,*) 'x, y, tmp = ',x, y, tmp !確認のための出力
end program exchange !主プログラムの終了行
list3_2.f90のようにモジュールは主プログラムよりも上位に記述すること
モジュールの記述形式は、以下のようになる。\\
module モジュールの名前
... (モジュールの内容)
end module
\\
\\
サブルーチンの記述形式は、以下のようになる。\\
subroutine サブルーチン名(仮引数, 仮引数, 仮引数 ...)
... (サブルーチンの内容)
end subroutine サブルーチン名
\\
\\
モジュールサブルーチンを記述する場合には、モジュール内にcontains文を書き、その後にサブルーチンを書く。contains文は、対になるend文を持たない単独の文である。
contains文の後には、複数のサブルーチンや関数を書くことができる。
contain文よりも前に書かれたimplicit none漸減は、contains文以下でもm有効であるので、サブルーチン内におけるimplicit none宣言は省略可能である。
サブルーチンを含むモジュールの基本的な構造は次のようになる。
module モジュールの名称
implicit none
contains
subroutine サブルーチン名(仮引数, 仮引数, 仮引数 ...)
!... (サブルーチンの内容)
end subroutine サブルーチン名
!... (他のサブルーチンを同様に記述)
end module モジュールの名称
===== モジュールサブルーチンの利用方法 =====
===== return文 =====
===== 実引数と仮引数 =====