境界条件の読み込み

CGNSファイルから、境界条件を読み込みます。

表 70 利用する関数

関数

備考

cg_iric_read_bc_count

境界条件の数を取得する

cg_iric_read_bc_indicessize

境界条件の設定された要素 (格子点もしくはセル) の数を取得する

cg_iric_read_bc_indices

境界条件の設定された要素 (格子点もしくはセル) のインデックスの配列を取得する

cg_iric_read_bc_integer

整数型境界条件の値を取得する

cg_iric_read_bc_real

実数(倍精度)境界条件の値を取得する

cg_iric_read_bc_realsingle

実数(単精度)境界条件の値を取得する

cg_iric_read_bc_string

文字列型境界条件の値を取得する

cg_iric_read_bc_functionalsize

関数型境界条件のサイズを取得する

cg_iric_read_bc_functional

倍精度実数の関数型境界条件の値を取得する

cg_iric_read_bc_functionalwithname

単精度実数の関数型境界条件の値を取得する

同じ種類の境界条件を、1つの格子に複数定義することができます。 例えば、流入口を一つの格子に複数定義し、流入量をそれぞれ独立に与えることができます。

境界条件を読み込む処理の記述例を リスト 163 に示します。 この例では、流入口 (Inflow) の数を cg_iric_read_bc_count で調べ、 必要なメモリを確保してから境界条件の設定情報を読み込んでいます。 なお、GUIで指定した境界条件の名前は cg_iric_read_bc_string で読み込めます。

リスト 163 境界条件を読み込む処理の記述例
 1program Sample8
 2  use iric
 3  implicit none
 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_iric_open('bctest.cgn', IRIC_MODE_MODIFY, fin, ier)
21  if (ier /=0) STOP "*** Open error of CGNS file ***"
22
23  ! 流入口の数を取得する
24  call cg_iric_read_bc_count(fin, 'inflow', condcount)
25  ! 流入口の数に従って、パラメータの保存用のメモリを確保する。
26  allocate(condindexlen(condcount), intparam(condcount), realparam(condcount))
27  allocate(stringparam(condcount), func_size(condcount))
28  print *, 'condcount ', condcount
29
30  ! 境界条件が設定された格子点の数と、関数型の境界条件の最大サイズを調べる
31  indexlenmax = 0
32  funcsizemax = 0
33  do condid = 1, condcount
34    call cg_iric_read_bc_indicessize(fin, 'inflow', condid, condindexlen(condid), ier)
35    if (indexlenmax < condindexlen(condid)) then
36      indexlenmax = condindexlen(condid)
37    end if
38    call cg_iric_read_bc_functionalsize(fin, 'inflow', condid, 'funcparam', func_size(condid), ier);
39    if (funcsizemax < func_size(condid)) then
40      funcsizemax = func_size(condid)
41    end if
42  end do
43
44  ! 格子点のインデックス格納用の配列と、関数型境界条件の格納用変数のメモリを確保
45  allocate(condindices(condcount, 2, indexlenmax))
46  allocate(func_param(condcount, funcsizemax), func_value(condcount, funcsizemax))
47  ! インデックスと、境界条件 を読み込み
48  do condid = 1, condcount
49    call cg_iric_read_bc_indices(fin, 'inflow', condid, condindices(condid:condid,:,:), ier)
50    call cg_iric_read_bc_integer(fin, 'inflow', condid, 'intparam', intparam(condid:condid), ier)
51    call cg_iric_read_bc_real(fin, 'inflow', condid, 'realparam', realparam(condid:condid), ier)
52    call cg_iric_read_bc_string(fin, 'inflow', condid, 'stringparam', tmpstr, ier)
53    stringparam(condid) = tmpstr
54    call cg_iric_read_bc_functional(fin, 'inflow', condid, 'funcparam', func_param(condid:condid,:), func_value(condid:condid,:), ier)
55  end do
56
57  ! 読み込まれた境界条件を表示
58  do condid = 1, condcount
59    do indexid = 1, condindexlen(condid)
60      print *, 'condindices ', condindices(condid:condid,:,indexid:indexid)
61    end do
62    print *, 'intparam ', intparam(condid:condid)
63    print *, 'realparam ', realparam(condid:condid)
64    print *, 'stringparam ', stringparam(condid)
65    print *, 'funcparam X ', func_param(condid:condid, 1:func_size(condid))
66    print *, 'funcparam Y ', func_value(condid:condid, 1:func_size(condid))
67  end do
68
69  ! CGNS ファイルのクローズ
70  call cg_iric_close(fin, ier)
71  stop
72end program Sample8