時刻、計算結果の出力処理の記述

時刻、計算結果の出力処理を記述します。

時間依存の方程式を解くソルバーの場合、タイムステップの数だけ時刻、 計算結果の出力を繰り返します。

また、時刻、計算結果の出力のたびにユーザがソルバーの実行を中止していないか確認し、 中止していたら実行を中止します。

なお、ソルバーが出力する計算結果についてはソルバー定義ファイルには記述しませんので、 ソルバー定義ファイルとの対応関係を気にせず記述できます。

時刻、計算結果の出力処理を追記したソースコードを リスト 9 に示します。強調して示したのが追記した部分です。

リスト 9 時刻、計算結果の出力処理を追記したソースコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  ! (略)
  integer:: isize, jsize
  double precision, dimension(:,:), allocatable:: grid_x, grid_y
  double precision, dimension(:,:), allocatable:: elevation
  integer, dimension(:,:), allocatable:: obstacle
  double precision:: time
  integer:: iteration
  integer:: canceled
  integer:: locked
  double precision, dimension(:,:), allocatable:: velocity_x, velocity_y
  double precision, dimension(:,:), allocatable:: depth
  integer, dimension(:,:), allocatable:: wetflag
  double precision:: convergence

  ! (略)

  ! 属性を読み込む
  call cg_iric_read_grid_real_node(fin, "Elevation", elevation, ier)
  call cg_iric_read_grid_integer_cell(fin, "Obstacle", obstacle, ier)

  allocate(velocity_x(isize,jsize), velocity_y(isize,jsize), depth(isize,jsize), wetflag(isize,jsize))
  iteration = 0
  time = 0
  do
    time = time + timestep
    ! (ここで計算を実行。格子の形状も変化)

    call iric_check_cancel(canceled)
    if (canceled == 1) exit
    call cg_iric_write_sol_start(fin, ier)
    call cg_iric_write_sol_time(fin, time, ier)
    ! 格子を出力
    call cg_iric_write_sol_grid2d_coords(fin, grid_x, grid_y, ier)
    ! 計算結果を出力
    call cg_iric_write_sol_node_real(fin, 'VelocityX', velocity_x, ier)
    call cg_iric_write_sol_node_real(fin, 'VelocityY', velocity_y, ier)
    call cg_iric_write_sol_node_real(fin, 'Depth', depth, ier)
    call cg_iric_write_sol_node_integer(fin, 'Wet', wetflag, ier)
    call cg_iric_write_sol_baseiterative_real(fin, 'Convergence', convergence, ier)
    call cg_iric_write_sol_end(fin, ier)
    iteration = iteration + 1
    if (iteration > maxiterations) exit
  end do

  ! 計算データファイルを閉じる
  call cg_iric_close(fin, ier)
  stop
end program SampleProgram

時刻、計算結果の出力に使う関数の詳細については、 時刻 (もしくはループ回数) の出力, 計算結果の出力 を参照してください。 計算実行中に格子形状が変化する場合、 計算格子の出力 (計算開始後の格子) で説明する関数を使用してください。

計算結果については、iRIC では特別な名前が定義されており、 特定の目的で使用される結果ではその名前を使用する必要があります。 特別な計算結果の名前については 計算結果 を参照してください。