複合型

概要

複合型は、ここまでで説明してきた、文字列、整数、実数などの条件を複数組み合わせたものです。

valueType に complex を指定した <Definition> 要素を作成し、その内側に整数型、実数型などの 条件を定義します。

定義方法

リスト 96 複合型の条件の定義例
 1<Item name="fish" caption="Fishes">
 2  <Definition valueType="complex" >
 3    <Item name="type" caption="Type">
 4      <Definition valueType="integer" option="true" default="1">
 5        <Enumerations>
 6          <Enumeration value="1" caption="Fish"/>
 7          <Enumeration value="2" caption="Crub"/>
 8          <Enumeration value="3" caption="Shrimp"/>
 9        </Enumerations>
10      </Definition>
11    </Item>
12    <Item name="size" caption="Size">
13      <Definition valueType="real" default="0.13" />
14    </Item>
15    <Item name="remarks" caption="Remarks">
16      <Definition valueType="string" default="" />
17    </Item>
18  </Definition>
19</Item>

条件の表示例

../_images/widget_example_complex.png

図 59 複合型の条件の表示例

読み込み処理の記述方法

計算条件・格子生成条件

FORTRAN

リスト 97 複合型の条件を読み込むための処理の記述例 (計算条件・格子生成条件) FORTRAN
 1integer:: ier, fish_count
 2integer, dimension(:), allocatable:: fish_type
 3double precision, dimension(:), allocatable:: fish_size
 4character(200), dimension(:), allocatable:: fish_remarks
 5integer:: i
 6
 7! サイズを調べる
 8call cg_iRIC_Read_Complex_Count(fid, "fish", fish_count, ier)
 9! メモリを確保
10allocate(fish_type(fish_count))
11allocate(fish_size(fish_count))
12allocate(fish_remarks(fish_count))
13! 確保したメモリに値を読み込む
14do i = 1, fish_count
15  call cg_iRIC_Read_Complex_Integer(fid, "fish", i, "type", fish_type(i), ier)
16  call cg_iRIC_Read_Complex_Real(fid, "fish", i, "size", fish_size(i), ier)
17  call cg_iRIC_Read_Complex_String(fid, "fish", i, "remarks", fish_remarks(i), ier)
18end do

C/C++

リスト 98 複合型の条件を読み込むための処理の記述例 (計算条件・格子生成条件) C++
 1int ier, fish_count;
 2std::vector<int> fish_type;
 3std::vector<double> fish_size;
 4int strlen;
 5std::vector<std::vector<char> > fish_remarks;
 6
 7// サイズを調べる
 8ier = cg_iRIC_Read_Complex_Count(fid, "fish", &fish_count)
 9// メモリを確保
10fish_type.assign(fish_count, 0);
11fish_size.assign(fish_count, 0);
12fish_remarks.assign(fish_count, "");
13// 確保したメモリに値を読み込む
14for (int i = 0; i < fish_count; ++i) {
15  ier = cg_iRIC_Read_Complex_Integer(fid, "fish", i + 1, "type", &fish_type[i]);
16  call cg_iRIC_Read_Complex_Real(fid, "fish", i + 1, "size", &fish_size[i]);
17  auto& remarks = fish_remarks[i];
18  call cg_iRIC_Read_Complex_StringLen(fid, "fish", i + 1, "remarks", &strlen);
19  remarks.assign(strlen + 1, 0);
20  call cg_iRIC_Read_Complex_String(fid, "fish", i + 1, "remarks", remarks.data());
21}

Python

リスト 99 複合型の条件を読み込むための処理の記述例 (計算条件・格子生成条件) Python
 1# サイズを調べる
 2fish_count = cg_iRIC_Read_Complex_Count(fid, "fish")
 3# リストを用意
 4fish_type = list()
 5fish_size = list()
 6fish_remarks = list()
 7
 8for i in range(fish_count):
 9  fish_type.append(cg_iRIC_Read_Complex_Integer(fid, "fish", i + 1, "type"))
10  fish_size.append(cg_iRIC_Read_Complex_Real(fid, "fish", i + 1, "size"))
11  fish_remarks.append(cg_iRIC_Read_Complex_String(fid, "fish", i + 1, "remarks"))

名前の読み込み

複合型の項目につけた名前 (例: 図 59 の例なら「Item2」) を読み込みたい時は、 cg_iRIC_Read_Complex_String を、引数 name に "_caption" を指定して実行します。

引数の詳細な説明は cg_iRIC_Read_Complex_String を参照してください。