LoginSignup
1
1
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

iRICの計算結果の属性名を任意の文字列の名前にする・日本語にする方法

Last updated at Posted at 2024-01-16

はじめに

従来までもiRICでは格子・セルの属性についてはNays2DHのオブジェクトブラウザーのように日本語で表示できていました。
2024-01-15_16h17_19.png

ただし、出力された計算結果については英語表記となっており、私のように英語が苦手な人は苦しんでいたかもしれません。
2024-01-15_16h38_23.png

今回はiRIC v4のアップデートにより計算結果の属性名を自由に定義・日本語で表示できるようになったのでその方法を整理します。

作業の前に

今回の作業ではソルバーの情報を定義しているdefinition.xmlと、翻訳のための辞書ファイルtranslation_ja_JP.tsを使用します。
これらのフォルダはIRICROOT\solvers(IRICROOTはiRICをインストールしているフォルダ)の各ソルバーのフォルダの中に格納されています。

作業をする際には念のためバックアップをとっておくことをおすすめします。

計算結果のスカラーを任意の名前にする方法

設定方法・基礎知識

計算結果の属性名を任意のcaptionで設定するにはdefinition.xmlGridRelatedCondition要素にとして子要素outputを追加します。

<GridRelatedCondition>
    <Output name="depth" caption="Depth(m)">
			<Definition valueType="real" position="node" />
    </Output>
</GridRelatedCondition>

output要素は属性としてnamecaptionを持ちます。

name

  • 値は文字列
  • ソルバーのコード内で計算結果を出力する際に指定された属性名を指定します。

caption

  • 値は文字列
  • iRIC上で表示したい文字列を指定します。

また、outputは子要素としてDefinitionを持ちます。
Definitionは計算結果を定義するためvalueTypepositionを属性として持ちます。

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にあるはずです。

image.png

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&apos;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の可視化ウィンドウのオブジェクトブラウザに表示されている名前で問題ないと思いますが、しっかり確認したい場合はソースコードでどのように指定されているか確認しましょう。
    流速等のベクトル量については後述する注意をよく読んで下さい。

    2024-01-16_13h41_37.png

    Nays2DHのソースコードは以下で公開されています。

ソースコードを確認すると水深の出力部分は以下のようになっているので、実数値で格子点にDepth(m)という名前で出力していることが確認できます。

Nays2DH.f90
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.xmlGridRelatedConditionの子要素として追加してあげます。

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="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で表示されていることが確認できます。
2024-01-16_13h48_16.png

計算結果の属性名を日本語にする方法

設定方法・基本知識

日本語化は計算結果のスカラーを任意の名前にする方法で定義したcaptionに対して辞書ファイル(translation_ja_JP.ts)で翻訳を指定してあげることで日本語化できます。
definition.xmlで計算結果の属性名を定義せずに辞書ファイルに翻訳を記載しても日本語化はできません。

そのため、日本語化だけしたい場合でも計算結果のスカラーを任意の名前にする方法を参考にdefinition.xmlに計算結果のスカラーを定義してください。この場合はcaptionnameと同じで問題ありません。

辞書ファイルについては公式マニュアルをご覧ください。

実際にやってみる

属性名の定義と同様にNays2DHのDepth(m)を日本語化してみます。

definition.xmlでの属性名の定義は済ませておいてください。

辞書ファイルの更新or作成

Nays2DHの場合既に辞書ファイルがインストールされていると思いますが、definition.xmlに新しく定義した属性名の要素が含まれていないので辞書ファイルを更新します。

  1. iRICの起動
    iRICを開いてスタートページを閉じます。
    2024-01-16_14h13_48.png

  2. 定義ファイルの翻訳辞書 更新ウィザードをひらいて次へを押します。
    ツールバーのオプション-->辞書ファイルの作成・更新からひらけます。
    2024-01-16_14h15_35.png

  3. 対象プログラムにNays2DH、言語にJapaneseを選択して次へを押します。
    2024-01-16_14h19_50.png

  4. 結果を確認して完了を押します。
    出力先は覚えておきましょう。
    2024-01-16_14h21_16.png

辞書ファイルに翻訳を追記する。

先ほど更新or作成した辞書ファイルに翻訳を追記していきます。
定義ファイルの翻訳辞書 更新ウィザードのダイアログや公式マニュアルではQt Linguistを使用して編集すると書いていますが、辞書ファイルもただのxmlファイルなのでテキストエディタで編集できます。

辞書ファイルを開くとdefinition.xmlで定義した属性名(Depth_test(m))が追加されていることを確認できます。
翻訳は元文のsourceに対してtranslationに翻訳後の文章を追記するだけです。

translation_ja_JP.ts
<?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のプロジェクトを開くと、以下のように日本語に翻訳されれた属性名が表示されています。
2024-01-16_14h34_01.png

注意点 流速等のベクトル量の定義について

definition.xmlに計算結果のスカラーを定義する際のnameは基本的にデフォルトで表示されているオブジェクトブラウザー上の名前でいいと前述していますが、流速等のベクトル量については注意が必要です。

Nays2DHの場合オブジェクトブラウザー上で流速はVelocity(ms-1)(magnitude)と書かれています。
2024-01-16_15h20_14.png

しかし、ソースコードを見てみると以下のようにVelocity(ms-1)XVelocity(ms-1)YとX方向の流速とY方向の流速に分けて出力しています。

Nays2DH.f90
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の指定と翻訳はできます。)

definition.xml追記の例
<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>
translation_ja_JP.ts追記の例
<message>
    <source>Velocity(ms-1)_hogehogeX</source>
    <translation>流速テストX</translation>
</message>
<message>
    <source>Velocity(ms-1)_hogehogeY</source>
    <translation>流速テストY</translation>
</message>

また、この時のcaptionについても最後にXYをつける必要があります。
Nays2DHは二次元のソルバーなのでX,Yですが、三次元のソルバーの場合はX,Y,Xそれぞれの方向があります。

逆にベクトル量以外の属性のcaptionの末尾には大文字のX,Y,Zは使用しないでください。小文字のx,y,zは使用できます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1