はじめに
従来までもiRICでは格子・セルの属性についてはNays2DHのオブジェクトブラウザーのように日本語で表示できていました。
ただし、出力された計算結果については英語表記となっており、私のように英語が苦手な人は苦しんでいたかもしれません。
今回はiRIC v4のアップデートにより計算結果の属性名を自由に定義・日本語で表示できるようになったのでその方法を整理します。
作業の前に
今回の作業ではソルバーの情報を定義しているdefinition.xml
と、翻訳のための辞書ファイルtranslation_ja_JP.ts
を使用します。
これらのフォルダはIRICROOT\solvers
(IRICROOTはiRICをインストールしているフォルダ)の各ソルバーのフォルダの中に格納されています。
作業をする際には念のためバックアップをとっておくことをおすすめします。
計算結果のスカラーを任意の名前にする方法
設定方法・基礎知識
計算結果の属性名を任意のcaptionで設定するにはdefinition.xml
のGridRelatedCondition
要素にとして子要素output
を追加します。
<GridRelatedCondition>
<Output name="depth" caption="Depth(m)">
<Definition valueType="real" position="node" />
</Output>
</GridRelatedCondition>
output
要素は属性としてname
とcaption
を持ちます。
name
- 値は文字列
- ソルバーのコード内で計算結果を出力する際に指定された属性名を指定します。
caption
- 値は文字列
- iRIC上で表示したい文字列を指定します。
また、output
は子要素としてDefinition
を持ちます。
Definition
は計算結果を定義するためvalueType
とposition
を属性として持ちます。
valueType
- 値は文字列
- 計算結果の型を定義します。整数
integer
、実数real
があります。
position
- 値は文字列
- 計算結果の位置を定義します。格子点
node
、セルcell
があります。
実際にやってるみる
では実際にNays2DHの計算結果の属性名に任意のcaptionを設定してみます。
definition.xmlをひらく
インストール済みのソルバーの場合、IRICROOT\solvers
(IRICROOTはiRICをインストールしているフォルダ)の当該フォルダの中にdefinition.xml
が入っています。
今回はNays2DHですが、デフォルトの設定でインストールした場合、C:\Users\ユーザー名\iRIC_v4\solvers\iRICsolvers_v4_Nays2DH
にあるはずです。
definition.xml
をみつけたらお好きなテキストエディタで開いてください。
すると以下のような内容になっていると思います。
※<CalculationCondition>
の子要素がとても多いので今回は省略して記載しています。
definition.xml
<?xml version="1.0" encoding="UTF-8"?>
<SolverDefinition
xmlns="www.iric.net/SolverDefinition/1.0"
name="Nays2DH"
caption="Nays2DH iRIC.4x 1.0 64bit"
version="1.6.008"
copyright="Yasuyuki SHIMIZU and Hiroshi TAKEBAYASHI"
release="2022.7.13"
homepage="http://i-ric.org"
executable="Nays2DH.exe"
iterationtype="time"
gridtype="structured2d"
>
<CalculationCondition>
</CalculationCondition>
<GridRelatedCondition>
<!-- RMCD changed Bed Elevation to Elevation for consistency in MD_SWMS -->
<Item name="Elevation" caption="Elevation (m)">
<Definition position="node" valueType="real" default="max" />
</Item>
<Item name="Elevation_zb" caption="Elevation of fixed bed (m)">
<Definition position="node" valueType="real" default="max" />
</Item>
<Item name="Obstacle" caption="Obstacle">
<Definition position="cell" valueType="integer" default="0" option="true">
<Enumerations>
<Enumeration value="0" caption="Normal cell" />
<Enumeration value="1" caption="Obstacle" />
</Enumerations>
</Definition>
</Item>
<Item name="Fix_movable" caption="Fixed or Movable Bed">
<Definition position="cell" valueType="integer" default="0" option="true">
<Enumerations>
<Enumeration value="0" caption="Movable bed" />
<Enumeration value="1" caption="Fixed bed" />
</Enumerations>
</Definition>
</Item>
<Item name="vege_density" caption="Density of Vegetation (m-1)">
<Definition position="cell" valueType="real" default="0">
</Definition>
</Item>
<Item name="vege_height" caption="Height of Vegetation (m)">
<Definition position="cell" valueType="real" default="0">
</Definition>
</Item>
<Item name="roughness_cell" caption="Manning's roughness coefficient">
<Definition position="cell" valueType="real" default="0.03">
</Definition>
</Item>
<Item name="mix_cell" caption="Grain size distribution">
<Definition position="cell" valueType="integer" default="0" option="true">
<Enumerations>
<Enumeration value="0" caption="Region 1" />
<Enumeration value="1" caption="Region 2" />
<Enumeration value="2" caption="Region 3" />
<Enumeration value="3" caption="Region 4" />
<Enumeration value="4" caption="Region 5" />
<Enumeration value="5" caption="Region 6" />
<Enumeration value="6" caption="Region 7" />
<Enumeration value="7" caption="Region 8" />
<Enumeration value="8" caption="Region 9" />
<Enumeration value="9" caption="Region 10" />
</Enumerations>
</Definition>
</Item>
<Item name="grainsize_distribution" caption="GrainSizeDistribution">
<Definition position="node" valueType="functional" option="true">
<Parameter valueType="integer" caption="Size Class" />
<Value valueType="real" caption="Ratio" />
</Definition>
</Item>
</GridRelatedCondition>
</SolverDefinition>
属性名を定義する。(definition.xmlへの定義の追記)
上記のdefinition.xml
を開いたら<GridRelatedCondition>
と<GridRelatedCondition />
に挟まれている部分に子要素として計算結果を定義していきます。
試しにDepthを定義してみます。
output
の属性について
name
-
name
はソルバーで計算結果を出力する際に指定された名前です。今回はDepth(m)
を指定します。
このname
について水深等のスカラー量に関しては、属性名を既にdefinition.xml
で定義されていない場合はiRICの可視化ウィンドウのオブジェクトブラウザに表示されている名前で問題ないと思いますが、しっかり確認したい場合はソースコードでどのように指定されているか確認しましょう。
流速等のベクトル量については後述する注意をよく読んで下さい。Nays2DHのソースコードは以下で公開されています。
ソースコードを確認すると水深の出力部分は以下のようになっているので、実数値で格子点にDepth(m)
という名前で出力していることが確認できます。
CALL cg_iRIC_Write_Sol_Node_Real(fid,"Depth(m)",HData1,IER)
caption
-
caption
はiRIC上で表示したい任意の属性名を記入します。今回はわかりやすくDepth_test(m)
と指定します。
※ここでcaption
に日本語を指定すると文字化けするのでやめましょう。
Definition
の属性について
-
valueType
は計算結果の型です。今回のDepth(m)
は実数値なのでreal
とします。 -
position
は計算結果の位置です。今回は格子点の持つ値なのでnode
を指定します。
記載例
ここまでをまとめるとDepth(m)
を定義するための要素は以下のようになります。
<Output name="Depth(m)" caption="Depth_テスト(m)">
<Definition valueType="real" position="node" />
</Output>
これを以下のようにdefinition.xml
のGridRelatedCondition
の子要素として追加してあげます。
<?xml version="1.0" encoding="UTF-8"?>
<SolverDefinition
xmlns="www.iric.net/SolverDefinition/1.0"
name="Nays2DH"
caption="Nays2DH iRIC.4x 1.0 64bit"
version="1.6.008"
copyright="Yasuyuki SHIMIZU and Hiroshi TAKEBAYASHI"
release="2022.7.13"
homepage="http://i-ric.org"
executable="Nays2DH.exe"
iterationtype="time"
gridtype="structured2d"
>
<CalculationCondition>
</CalculationCondition>
<GridRelatedCondition>
<!-- RMCD changed Bed Elevation to Elevation for consistency in MD_SWMS -->
<Item name="Elevation" caption="Elevation (m)">
<Definition position="node" valueType="real" default="max" />
</Item>
~長いので省略~
<Item name="grainsize_distribution" caption="GrainSizeDistribution">
<Definition position="node" valueType="functional" option="true">
<Parameter valueType="integer" caption="Size Class" />
<Value valueType="real" caption="Ratio" />
</Definition>
</Item>
~↓ここから~
<Output name="Depth(m)" caption="Depth_test(m)">
<Definition valueType="real" position="node" />
</Output>
~↑ここまでを追加~
</GridRelatedCondition>
</SolverDefinition>
この状態で保存してNays2DHのプロジェクトを開くと、指定したcaptionで表示されていることが確認できます。
計算結果の属性名を日本語にする方法
設定方法・基本知識
日本語化は計算結果のスカラーを任意の名前にする方法で定義したcaption
に対して辞書ファイル(translation_ja_JP.ts
)で翻訳を指定してあげることで日本語化できます。
definition.xml
で計算結果の属性名を定義せずに辞書ファイルに翻訳を記載しても日本語化はできません。
そのため、日本語化だけしたい場合でも計算結果のスカラーを任意の名前にする方法を参考にdefinition.xml
に計算結果のスカラーを定義してください。この場合はcaption
はname
と同じで問題ありません。
辞書ファイルについては公式マニュアルをご覧ください。
実際にやってみる
属性名の定義と同様にNays2DHのDepth(m)
を日本語化してみます。
definition.xml
での属性名の定義は済ませておいてください。
辞書ファイルの更新or作成
Nays2DHの場合既に辞書ファイルがインストールされていると思いますが、definition.xml
に新しく定義した属性名の要素が含まれていないので辞書ファイルを更新します。
辞書ファイルに翻訳を追記する。
先ほど更新or作成した辞書ファイルに翻訳を追記していきます。
定義ファイルの翻訳辞書 更新ウィザード
のダイアログや公式マニュアルではQt Linguistを使用して編集すると書いていますが、辞書ファイルもただのxmlファイルなのでテキストエディタで編集できます。
辞書ファイルを開くとdefinition.xml
で定義した属性名(Depth_test(m)
)が追加されていることを確認できます。
翻訳は元文のsource
に対してtranslation
に翻訳後の文章を追記するだけです。
<?xml version="1.0" encoding="UTF-8"?>
<TS version="2.0" language="ja_JP">
<!--これは iRIC で使用する辞書ファイルです。
<translation> と </translation> の間に、翻訳後の文字列を追記してください。
-->
<context>
<message>
<source>Nays2DH iRIC.4x 1.0 64bit</source>
<translation></translation>
</message>
~~~長いので省略~~~
<message>
<source>GrainSizeDistribution</source>
<translation>河床材料粒度分布</translation>
</message>
<message>
<source>Size Class</source>
<translation></translation>
</message>
<message>
<source>Ratio</source>
<translation></translation>
</message>
~↓ここから~
<message>
<source>Depth_test(m)</source>
<translation>水深_テスト(m)</translation> ←ここに翻訳後の文章を追記
</message>
~↑ここまでが追加されている~
</context>
</TS>
追記してiRICでNays2DHのプロジェクトを開くと、以下のように日本語に翻訳されれた属性名が表示されています。
注意点 流速等のベクトル量の定義について
definition.xml
に計算結果のスカラーを定義する際のname
は基本的にデフォルトで表示されているオブジェクトブラウザー上の名前でいいと前述していますが、流速等のベクトル量については注意が必要です。
Nays2DHの場合オブジェクトブラウザー上で流速はVelocity(ms-1)(magnitude)
と書かれています。
しかし、ソースコードを見てみると以下のようにVelocity(ms-1)X
とVelocity(ms-1)Y
とX方向の流速とY方向の流速に分けて出力しています。
CALL cg_iRIC_Write_Sol_Node_Real(fid,"Velocity(ms-1)X",UData1,IER)
CALL cg_iRIC_Write_Sol_Node_Real(fid,"Velocity(ms-1)Y",VData1,IER)
参考
name
にはソルバーで出力する際の名前を指定しなければいけないので、definition.xml
でもこの名前で定義する必要があります。
(X軸方向の定義のみでcaptionの指定と翻訳はできます。)
<Output name="velocity(ms-1)X" caption="Velocity(ms-1)_hogehogeX">
<Definition valueType="real" position="node" />
</Output>
<Output name="velocity(ms-1)Y" caption="Velocity(ms-1)_hogehogeY">
<Definition valueType="real" position="node" />
</Output>
<message>
<source>Velocity(ms-1)_hogehogeX</source>
<translation>流速テストX</translation>
</message>
<message>
<source>Velocity(ms-1)_hogehogeY</source>
<translation>流速テストY</translation>
</message>
また、この時のcaption
についても最後にX
とY
をつける必要があります。
Nays2DHは二次元のソルバーなのでX
,Y
ですが、三次元のソルバーの場合はX
,Y
,X
それぞれの方向があります。
逆にベクトル量以外の属性のcaptionの末尾には大文字のX
,Y
,Z
は使用しないでください。小文字のx
,y
,z
は使用できます。