:tocdepth: 1

==================================
EMYファイルの書き方
==================================

.. index::
	single: EMYファイルの書き方

[|today| 更新]

EMYファイルの構造
====================

| EMYファイルは，タグを記入して，そのタグに含まれる設定項目のラベルを使って値を設定します．
| 下記に，
|    tag1:タグのLABEL1-1:，LABEL1-2:ラベルに値を設定
|    tag2:タグのLABEL2-1:ラベルに値を設定
| する例を示します．

.. code-block:: YAML

	tag1:
	  LABEL1-1: value1-1
	  LABEL1-2: value1-2
	tag2:
	  LABEL2-1: value2-1

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-1" title="表示/非表示切り替え">タグの順番は任意</div>
	<div id="show-hide-target-1">

| タグの順番は任意です．
| 下記の例のように，tag1とtag2の順番を逆にしても，上記の例と同じ結果となります．

.. code-block:: YAML

	tag2:
	  LABEL2-1: value2-1
	tag1:
	  LABEL1-1: value1-1
	  LABEL1-2: value1-2

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-1 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-2" title="表示/非表示切り替え">先頭が#文字の行はコメント行</div>
	<div id="show-hide-target-2">

| 先頭が#で始まる行はコメント行です．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-2 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-3" title="表示/非表示切り替え">階層構造のタグでもインデントを付けなくてOK</div>
	<div id="show-hide-target-3">

| EMYフォーマットの元となった **YAMLフォーマットは半角スペース2文字以上でインデントする必要** がありますが，
| **EMYフォーマットではインデントしなくても良い** です．
| 例で示すと，

.. code-block:: YAML

	tag1:
	  LABEL1-1: value1-1
	  LABEL1-2: value1-2
	tag2:
	  LABEL2-1: value2-1

と

.. code-block:: YAML

	tag1:
	LABEL1-1: value1-1
	LABEL1-2: value1-2
	tag2:
	LABEL2-1: value2-1

| は全く同じです．
| 分かりやすい書式をお使い下さい．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-3 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-4" title="表示/非表示切り替え">重複するタグはNG</div>
	<div id="show-hide-target-4">

| 原則としてタグは重複してはいけません．
| 下に示すように，tag1の設定項目を分けて記載する（タグが重複する）のはダメです．
| （LABEL1-1を設定したtag1が，LABEL1-2を設定したtag1に上書きされてしまいます）

.. code-block:: YAML

	tag1:
	  LABEL1-1: value1-1
	tag2:
	  LABEL2-1: value2-1
	tag1:
	  LABEL1-2: value1-2

| 例外として，タグが重複してもOKとなるケースがあります．
| それは，EMSolutionのinputファイルの記載方法に応じたものによります．

| 例えば，複数の面流入電流ソース(SUFCUR)をinputファイルで設定する場合，

.. code-block:: none

	SUFCUR 1 0 1 1 0
	SUFCUR 2 0 2 1 0

| といった具合に，SUFCURを重複して記載しますが，EMYファイルも同じように，

.. code-block:: YAML

	source:
	  sufcur:
	    1 0 1 1 0
	  sufcur:
	    2 0 2 1 0

| というように，sufcur:第2タグを重複して記載します．
| YAMLフォーマットでは許されない記述方式ですが，
| EMYフォーマットでは利便性から可能となっています．


| coordinate:タグ（局所座標系）も重複してもOKなタグです．
| EMSolutionのinputファイルの設定項目で，複数個設定する項目に関しては，
| EMYフォーマットでも該当するタグが重複しても良いようになっています．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-4 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-5" title="表示/非表示切り替え">従属タグ（階層構造のタグ）</div>
	<div id="show-hide-target-5">

| 一部のタグは，階層的な構造をとります．
| 説明の便宜上，**従属的なタグ** と呼ぶことにします． 
| 例えば，境界条件に関する設定項目は，
| 境界条件全体を表す
|     bc:タグ
| の下に，
|     far:タグ（遠方境界条件）
|     dirichlet:タグ（ディレクレ境界条件）
|     neumann:タグ（ノイマン境界条件）
|     zeroaline:タグ（線上のA=0の固定境界条件）
| の従属タグがあります．

| 例えば，ディレクレ境界条件を2面設定するには，

.. code-block:: YAML

	bc:
	  dirichlet:
	    1 0 0 0
	    0 1 0 0

| という具合に，従属タグ(dirichlet:タグ)の設定項目を設定するには，従属する元になるタグ(bc:タグ)も記載する必要があります．
| また，重複タグはNGなので，上記の，
|    far:タグ，dirichlet:タグ，neumann:タグ，zeroaline:タグ
| は，同じbc:タグに続けて記載する必要があります．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-5 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-6" title="表示/非表示切り替え">ラベルを使わず値を配列形式で設定するケース</div>
	<div id="show-hide-target-6">

| 必要な項目のみ記載すれば良いというEMYフォーマットの特長は，ラベルを使うことで可能となっていますが，
| 値を全て記載することが必須の項目もあります．
| 例えば，節点や面を表す座標などは，一部の座標値のみ記載することは意味がありません．
| そのようなケースに該当する設定項目は，ラベルを使わず，値を配列形式で設定することになっています．

| 例えば，局所座標系（coordinate:タグ）の設定は，

.. code-block:: YAML

	coorinate:
	  1 1 0 0 0
	  1 0 0
	  0 1 0
	coordinate:
	  2 1 0 0 0
	  1 0 0
	  0 -1 0

| のように，ラベルを使わず，設定項目の値を複数行の配列で記載します．

| ラベルを使わず，値を配列形式で設定するタグは，coordinate:タグの他に，
|    far(遠方境界条件)を除く境界条件タグ全般，
|    material(体積要素特性，面積要素特性）タグ全般，
|    source(ソース項）全般，
|    variation(時間変化関数）全般，
|    motion(運動の定義)全般，
|    bh(B-Hカーブ）全般
| などがあります．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-6 -->

.. only:: html or singlehtml
.. raw:: html

	<div id="show-hide-switch-7" title="表示/非表示切り替え">データの総数は項目とならない</div>
	<div id="show-hide-target-7">

| EMSolutionのinputファイルでは，データの総数も設定項目となります．
| 例えば，BHカーブのデータは，

.. code-block:: YAML

	1 10  # BHカーブのデータ数(10)
	0.0 0.0
	100 0.1
	...
	10000 1.5

| と言う具合に，一行目の二列目の **10** という数値がBHカーブのデータの総数を示しています．
| これに対し，EMYフォーマットでは，

.. code-block:: YAML

	source:
	  curve:
	    1 # データ数は無し
	    0.0 0.0
	    100 0.1
	    ...
	    10000 1.5

| という具合に，BHカーブのデータの総数が設定項目となりません．
| EMSolutionのinputファイルの設定項目の数値を，そのままEMYフォーマットのファイルに
| コピー&ペーストする際には注意して下さい．

.. only:: html or singlehtml
.. raw:: html

	</div><!-- show-hide-target-7 -->
