格子の調査処理¶
格子を開き、格子のセルの面積の計算、特定の座標を含むセルの探索などを行います。調査が終わったら、格子を閉じます。
このグループの関数は、CGNS ファイルに含まれている格子が構造格子の場合と非構造格子の場合どちらでも使用できます。 格子の調査処理の手順は、以下の通りになります。
CGNS ファイルに含まれる格子を開き、ハンドルを取得します。
ハンドルを引数として渡し、格子について調査の処理を実行します。
使い終わったら、ハンドルを渡して格子を閉じます。
関数 |
備考 |
---|---|
cg_iric_read_grid2d_open |
格子を開く |
cg_iric_read_sol_grid2d_open |
計算結果の格子を開く |
cg_iric_read_grid2d_close |
格子を閉じる |
cg_iric_read_grid2d_cellarea |
格子のセルの面積を計算して返す |
cg_iric_read_grid2d_findcell |
指定した座標を含むセルのIDを返す |
cg_iric_read_grid2d_cellnodecount |
指定したセルを構成する頂点の数を返す |
cg_iric_read_grid2d_interpolate |
指定した位置での値を、格子での値を使って補間して計算するための情報を返す |
cg_iric_read_grid2d_interpolatewithcell |
指定した位置での値を、格子での値を使って補間して計算するための情報を返す |
格子の調査処理の記述例を リスト 164 に示します。
1program TestX
2 use iric
3 implicit none
4
5 integer:: i, ok
6 integer:: fin, g_handle, ier
7 integer:: nodecount, cellnodecount,
8 double precision: area
9 double precision, dimension(:), allocatable:: depth
10 integer, dimension(4):: nodeid_arr
11 double precision:: depth_interpolated
12 double precision, dimension(4):: weights_arr
13
14 ! CGNSファイルを開く
15 call cg_iric_open("test.cgn", IRIC_MODE_MODIFY, fin, ier)
16 if (ier /=0) stop "*** Open error of CGNS file ***"
17
18 ! 格子を開く
19 call cg_iric_read_grid2d_open(fin, g_handle, ier)
20
21 ! 格子のセルの面積を取得
22 call cg_iric_read_grid2d_cellarea(g_handle, 1, area, ier)
23
24 ! 格子の頂点の数を取得
25 call cg_iric_read_grid_nodecount(fin, nodecount, ier)
26
27 ! メモリを確保
28 allocate(depth(nodecount))
29
30 ! 計算結果 depth の値を取得
31 call cg_iric_read_sol_node_real(fin, 1, 'depth', depth, ier)
32
33 ! 座標 (10.8, 12.5) での値を補間して計算するための情報を取得
34 call cg_iric_read_grid2d_interpolate(g_handle, 10.8, 12.5, ok, cellnodecount, nodeid_arr, weights_arr)
35
36 ! 座標 (10.8, 12.5) での depth の値を、取得した情報に基づいて計算
37 depth_interpolated = 0
38 do i = 1, cellnodecount
39 depth_interpolated = depth_interpolated + depth(nodeid_arr(i)) * weights_arr(i)
40 end do
41
42 ! 格子を閉じる
43 call cg_iric_read_grid2d_close(g_handle, ier)
44
45 deallocate(depth)
46 stop
47end program TestX