境界条件の読み込み¶
CGNSファイルから、境界条件を読み込みます。
関数 |
備考 |
|---|---|
cg_iric_read_bc_count_f |
境界条件の数を取得する |
cg_iric_read_bc_indicessize_f |
境界条件の設定された要素 (格子点もしくはセル) の数を取得する |
cg_iric_read_bc_indices_f |
境界条件の設定された要素 (格子点もしくはセル) のインデックスの配列を取得する |
cg_iric_read_bc_integer_f |
整数型境界条件の値を取得する |
cg_iric_read_bc_real_f |
実数(倍精度)境界条件の値を取得する |
cg_iric_read_bc_realsingle_f |
実数(単精度)境界条件の値を取得する |
cg_iric_read_bc_string_f |
文字列型境界条件の値を取得する |
cg_iric_read_bc_functionalsize_f |
関数型境界条件のサイズを取得する |
cg_iric_read_bc_functional_f |
倍精度実数の関数型境界条件の値を取得する |
cg_iric_read_bc_functionalwithname_f |
単精度実数の関数型境界条件の値を取得する |
同じ種類の境界条件を、1つの格子に複数定義することができます。 例えば、流入口を一つの格子に複数定義し、流入量をそれぞれ独立に与えることができます。
境界条件を読み込む処理の記述例を リスト 96 に示します。 この例では、流入口 (Inflow) の数を cg_iric_read_bc_count_f で調べ、 必要なメモリを確保してから境界条件の設定情報を読み込んでいます。 なお、GUIで指定した境界条件の名前は cg_iric_read_bc_string_f で読み込めます。
1program Sample8
2 implicit none
3 include 'cgnslib_f.h'
4
5 integer:: fin, ier, isize, jsize, ksize, i, j, k, aret
6 integer:: condid, indexid
7 integer:: condcount, indexlenmax, funcsizemax
8 integer:: tmplen
9 integer, dimension(:), allocatable:: condindexlen
10 integer, dimension(:,:,:), allocatable:: condindices
11 integer, dimension(:), allocatable:: intparam
12 double precision, dimension(:), allocatable:: realparam
13 character(len=200), dimension(:), allocatable:: stringparam
14 character(len=200):: tmpstr
15 integer, dimension(:), allocatable:: func_size
16 double precision, dimension(:,:), allocatable:: func_param;
17 double precision, dimension(:,:), allocatable:: func_value;
18
19 ! CGNS ファイルのオープン
20 call cg_open_f('bctest.cgn', CG_MODE_MODIFY, fin, ier)
21 if (ier /=0) STOP "*** Open error of CGNS file ***"
22
23 ! 内部変数の初期化
24 call cg_iric_init_f(fin, ier)
25 if (ier /=0) STOP "*** Initialize error of CGNS file ***"
26
27 ! 流入口の数を取得する
28 call cg_iric_read_bc_count_f('inflow', condcount)
29 ! 流入口の数に従って、パラメータの保存用のメモリを確保する。
30 allocate(condindexlen(condcount), intparam(condcount), realparam(condcount))
31 allocate(stringparam(condcount), func_size(condcount))
32 print *, 'condcount ', condcount
33
34 ! 境界条件が設定された格子点の数と、関数型の境界条件の最大サイズを調べる
35 indexlenmax = 0
36 funcsizemax = 0
37 do condid = 1, condcount
38 call cg_iric_read_bc_indicessize_f('inflow', condid, condindexlen(condid), ier)
39 if (indexlenmax < condindexlen(condid)) then
40 indexlenmax = condindexlen(condid)
41 end if
42 call cg_iric_read_bc_functionalsize_f('inflow', condid, 'funcparam', func_size(condid), ier);
43 if (funcsizemax < func_size(condid)) then
44 funcsizemax = func_size(condid)
45 end if
46 end do
47
48 ! 格子点のインデックス格納用の配列と、関数型境界条件の格納用変数のメモリを確保
49 allocate(condindices(condcount, 2, indexlenmax))
50 allocate(func_param(condcount, funcsizemax), func_value(condcount, funcsizemax))
51 ! インデックスと、境界条件 を読み込み
52 do condid = 1, condcount
53 call cg_iric_read_bc_indices_f('inflow', condid, condindices(condid:condid,:,:), ier)
54 call cg_iric_read_bc_integer_f('inflow', condid, 'intparam', intparam(condid:condid), ier)
55 call cg_iric_read_bc_real_f('inflow', condid, 'realparam', realparam(condid:condid), ier)
56 call cg_iric_read_bc_string_f('inflow', condid, 'stringparam', tmpstr, ier)
57 stringparam(condid) = tmpstr
58 call cg_iric_read_bc_functional_f('inflow', condid, 'funcparam', func_param(condid:condid,:), func_value(condid:condid,:), ier)
59 end do
60
61 ! 読み込まれた境界条件を表示
62 do condid = 1, condcount
63 do indexid = 1, condindexlen(condid)
64 print *, 'condindices ', condindices(condid:condid,:,indexid:indexid)
65 end do
66 print *, 'intparam ', intparam(condid:condid)
67 print *, 'realparam ', realparam(condid:condid)
68 print *, 'stringparam ', stringparam(condid)
69 print *, 'funcparam X ', func_param(condid:condid, 1:func_size(condid))
70 print *, 'funcparam Y ', func_value(condid:condid, 1:func_size(condid))
71 end do
72
73 ! CGNS ファイルのクローズ
74 call cg_close_f(fin, ier)
75 stop
76end program Sample8