副プログラム
計算過程の複雑化したプログラムをメインのみで実行するのはミスが生じる原因となります。
副プログラムを利用することで、アルゴリズムごとの機能を明確化しましょう。
module subprog !モジュールの宣言
implicit none
contains
subroutine A !メインから分離させたプログラムAを書く
・・・
end subroutine A
subroutine B !メインから分離させたプログラムBを書く
・・・
end subroutine B
end module subprog !モジュール終了の宣言
main program C !副プログラムを使ってメインを実行する
・・・
end program C
モジュール関数
副プログラムで関数を定義する方法。
function f(x) result(y)
real(8),intent(in)::x !メインプログラムから引用する関数
real(8)::y
y=x**2.0d0 !xの2乗を計算する
end function f
半径1~5について球の体積を求めるプログラム
module subprog
implicit none
contains
function f(x) result(y)
real(8),intent(in)::x
real(8)::y,pi
pi=3.1415d0
y=(4.0d0*pi*x**3.0d0)/3.0d0
end function f
end module subprog
program main
use subprog
implicit none
real(8) :: h,y,x
integer :: k
do k=1,5
h = 1.0d0
x = dble(k) * h
y = f(x)
write(*, *) x, y
end do
end program main
1.0000000000000000 4.1886666666666672
2.0000000000000000 33.509333333333338
3.0000000000000000 113.09400000000001
4.0000000000000000 268.07466666666670
5.0000000000000000 523.58333333333337
ファイルの作成を行うプログラム
平方根を計算するプログラム。
副プログラムで平方根を計算してファイルに保存、メインプログラムでファイルを開いて出力する。
module subprog
implicit none
contains
function fort(x) result(y)
real(8),intent(in)::x
real(8)::y
open(10, file = 'model.txt')
y=sqrt(x) !sqrtで平方根を計算する
write(10,*) y
close(10)
end function fort
end module subprog
program main
use subprog
implicit none
real(8) :: a,y
a=5.0d0
y=fort(a)
open(10, file = 'model.txt')
read(10,*) a
write(*,*) 'sq root=',a
close(10)
end program main
sq root= 2.2360679774997898
コメント