# EMYファイルの書き方

[2019/10/08更新]

## EMYファイルの構造

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

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

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

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

先頭が#文字の行はコメント行
先頭が#で始まる行はコメント行です．
階層構造のタグでもインデントを付けなくてOK
EMYフォーマットの元となった YAMLフォーマットは半角スペース2文字以上でインデントする必要 がありますが，
EMYフォーマットではインデントしなくても良い です．
例で示すと，

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

と

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

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

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

例外として，タグが重複してもOKとなるケースがあります．
それは，EMSolutionのinputファイルの記載方法に応じたものによります．
例えば，複数の面流入電流ソース(SUFCUR)をinputファイルで設定する場合，

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

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

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

というように，sufcur:第2タグを重複して記載します．
YAMLフォーマットでは許されない記述方式ですが，
EMYフォーマットでは利便性から可能となっています．
coordinate:タグ（局所座標系）も重複してもOKなタグです．
EMSolutionのinputファイルの設定項目で，複数個設定する項目に関しては，
EMYフォーマットでも該当するタグが重複しても良いようになっています．
従属タグ（階層構造のタグ）
一部のタグは，階層的な構造をとります．
説明の便宜上，従属的なタグ と呼ぶことにします．
例えば，境界条件に関する設定項目は，
境界条件全体を表す
bc:タグ
の下に，
far:タグ（遠方境界条件）
dirichlet:タグ（ディレクレ境界条件）
neumann:タグ（ノイマン境界条件）
zeroaline:タグ（線上のA=0の固定境界条件）
の従属タグがあります．
例えば，ディレクレ境界条件を2面設定するには，

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

という具合に，従属タグ(dirichlet:タグ)の設定項目を設定するには，従属する元になるタグ(bc:タグ)も記載する必要があります．
また，重複タグはNGなので，上記の，
far:タグ，dirichlet:タグ，neumann:タグ，zeroaline:タグ
は，同じbc:タグに続けて記載する必要があります．
ラベルを使わず値を配列形式で設定するケース
必要な項目のみ記載すれば良いというEMYフォーマットの特長は，ラベルを使うことで可能となっていますが，
値を全て記載することが必須の項目もあります．
例えば，節点や面を表す座標などは，一部の座標値のみ記載することは意味がありません．
そのようなケースに該当する設定項目は，ラベルを使わず，値を配列形式で設定することになっています．
例えば，局所座標系（coordinate:タグ）の設定は，

    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カーブ）全般
などがあります．
データの総数は項目とならない
EMSolutionのinputファイルでは，データの総数も設定項目となります．
例えば，BHカーブのデータは，

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

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

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

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