chap10/sample3.f90

サンプルコードのダウンロード

 1! <<< 注意 >>>
 2! gfortran-4.3でコンパイルするためには内部手続きとして定義した関数はbisectionに渡
 3! せない. ifortやgfortran-4.6ではちゃんとコンパイルできるが, 可搬性を考慮して関数
 4! を別モジュール内で定義して用いることにする.
 5module mod_equation
 6  implicit none
 7contains
 8  ! 方程式
 9  function f(x) result(ret)
10    implicit none
11    real(8), intent(in) :: x
12    real(8) :: ret
13
14    ret = x - cos(x)
15
16    return
17  endfunction f
18endmodule mod_equation
19
20! 関数やサブルーチンの引数渡し
21program sample
22  use mod_bisection
23  use mod_equation
24  implicit none
25
26  integer :: status
27  real(8) :: x1, x2, err
28
29  ! 二分法で方程式の解を求める(関数fを引数として渡す)
30  x1 = 0.0
31  x2 = 1.0
32  call bisection(f, x1, x2, err, status, maxit=20, tol=1.0e-6_8)
33
34  select case(status)
35  case(0)
36    write(*, fmt='(a)') 'Iteration converged !'
37  case(1)
38    write(*, fmt='(a)') 'Iteration did not converge !'
39  case(-1)
40    write(*, fmt='(a)') 'Error'
41    stop
42  case default
43    write(*, fmt='(a)') 'Unknown error'
44    stop
45  endselect
46
47  write(*, fmt='("Solution = ", e18.12, ", Error = ", e8.2)') x1, err
48
49  stop
50endprogram sample