Elmer SIF（Solver Input File）ファイルの内容

このエントリーは[オープンCAE Advent Calendar 2020](https://adventar.org/calendars/5192) の4日目です。

[Online Elmer/Ice Course - November 2020](http://elmerfem.org/elmerice/wiki/doku.php?id=courses:2020:online2020)の[Short description of sif file](http://elmerfem.org/elmerice/wiki/lib/exe/fetch.php?media=courses:2020:2020_11_elmersif.pdf)を機械翻訳にかけました。

SIFファイルの基本構成
---------------------

-   基本的な考え方:**Section**+**Keywords**
-   各セクションは**SectionName**で始まり、"**End**"で終わります。
    -   1つのキーワードの代替**SectionName ::Keywords**
-   各セクションでは、任意の数のキーワードを持つことができます。
-   キーワードは次のタイプ
    -   **<font color="DarkMagenta ">Real</font>**: 実数で評価された数
    -   **<font color="DarkMagenta ">Integer</font>**: 整数
    -   **<font color="DarkMagenta ">Logical</font>**:真か偽か
    -   **<font color="DarkMagenta ">String</font>**:大文字小文字を区別しないテキスト
    -   **<font color="DarkMagenta ">File</font>**:大文字小文字を区別するテキスト
-   セクションは
    -   **Header**
    -   **Constants**（定数）
    -   **Simulation**
    -   **Solver i**
    -   **Body i**
    -   **Equation**（方程式） **i**
    -   **Body Force** i
    -   **Material**（材料） **i**
    -   **Initial Condition**（初期条件） **i**
    -   **Boundary Condition**（境界条件） **i**
    -   Run Control（実行制御）
    -   Component（構成要素） i
-   **すべてのセクションが必要なわけではありません**

***

最小限のsifファイルの例
-----------------------
```
! Minimal sif file example Check Keywords "Warn"

Header :: Mesh DB "." "square"

Simulation
  Max Output Level = 5
  Coordinate System = Cartesian
  Simulation Type = Steady
  Output Intervals(1) = 1
  Steady State Max Iterations = 1
  Post File = "case.vtu"
End

Body 1
  Equation = 1
  Material = 1
End

Equation 1
  Active Solvers(1) = 1
End

Solver 1
  Equation = "ModelPDE"
  Variable = "Field"
  Procedure = "ModelPDE" "AdvDiffSolver"
Linear System Solver = Direct
End

Material 1
  diffusion coefficient = 1.0
End

Boundary Condition 1
  Name = ”Fixed”
  Target Boundaries(1) = 1
  Field = 0.0
End

Boundary Condition 2
  Name = ”Flux”
  Target Boundaries(1) = 2
  Field Flux = 1.0
End
```

***

SIFファイルの詳細
-----------------

-   コメントは**!**で始まる。
-   出力できない文字を避ける
    -   タブではなくスペースでインデント
-   **SOLVER.KEYWORDS**データベースで定義されている多くのキーワード
-   その他の場合はキーワードタイプを指定しなければなりません
-   キーワード(n,m)はn×mの配列を示します
    -   整数と実数に適用可能
-   正しい単位はユーザーの責任
-   セクションの順番は主に任意
    -   ヘッダーを除く
-   インデックスのあるセクションでは、1から始まる連続した番号を使用します。-SIFファイル内の他のファイルを読み込むためにinclude文を使用できます。
    -   include material.sif
-   **MATC**によるスクリプト
    -   プリプロセッサ:$dens=1.013 <font color="Red">一回評価</font>
    -   ランタイム:MATC"..." &emsp;&emsp;&emsp;&nbsp;&nbsp;&nbsp;<font color="Red">毎回評価</font>
-   **LUA**によるスクリプト
    -   プリプロセッサ:#dens=1.013 <font color="Red">一回評価</font>
    -   ランタイム:LUA"..." &emsp;&emsp;&emsp;&emsp;&nbsp;&nbsp;<font color="Red">毎回評価</font>

***

実数値のキーワード関数
======================

1） 表を使用して、変数の部分的な線形（または3次）依存関係を定義するために使用できます。

```
Density = Variable Temperature
   Real cubic 
      0 900   ! 内側の範囲：補間
    273 1000
    300 1020
    400 1000  ! 外側の範囲：外挿
   End
```

2）  MATC: 数式の数値評価のためのライブラリ

```
Density = Variable Temperature
  MATC "1000*(1 - 1.0e-4*(tx(0)-273.0))"
```
または定数式として

3）  LUA:MATCよりも高速な外部ライブラリ

```
Density = Variable Temperature
  LUA "1000*(1 - 1.0e-4*(tx[0]-273.0))"
```

4）  ユーザー定義関数

```
Density = Variable Temperature
  Procedure “mymodule" “myproc”
```

***

F90ユーザー関数の例
===================

ファイルmymodule.F90：

```fortran
FUNCTION myproc( Model, n, T ) RESULT(dens)
USE DefUtils
IMPLICIT None
TYPE(Model_t) :: Model
INTEGER :: n
REAL(KIND=dp) :: T, dens
    dens = 1000*(1-1.0d-4 *(T-273.0_dp))
END FUNCTION myproc
```
コンパイルスクリプトはインストール時に付属しています: **elmerf90**

**Linux**
```$ elmerf90 mymodule.F90 –o mymodule.so
```
**Windows**
```$ elmerf90 mymodule.F90 –o mymodule.dll
```

***

キーワードベクトルとテンソル
============================

-   実数値のキーワードは、ベクトルまたはテンソルである可能性があります。
-   キーワードの値が整数の場合はベクトルになります。

```
Heat Conductivity(3,3) = 1.0 0.0 0.0 \
                         0.0 1.0 0.0 \
                         0.0 0.0 100.0

Gravity(4) = 0.0 0.0 -1.0 9.81

Target Nodes(4) = Integer 1 3 7 12
```

***

Sif file: Header
================

```
Header
  Check keywords “warn”
  Mesh DB “.” “mymesh”
  Include Path “mylib"
  Results Directory “results“
End
```

-   ヘッダーセクションは、「キーワード=値」構文に準拠していません!
    -   キーワードデータベースの前に読み込む
-   キーワードをチェックするときの注意点
    -   警告、中断、エコー
-   オプションで、インクルードと結果ディレクトリを定義できます。
    -   デフォルトで使用されている作業ディレクトリ

***

Sif file: Simulation
====================

```
Simulation
  Max Output Level = 5
  Coordinate System = Cartesian
  Simulation Type = Transient ! Steady
  Timestep Intervals = 100
  Timestep Sizes = 0.1
  Timestepping Method = implicit euler
  Output Intervals(1) = 1
  Steady State Max Iterations = 1
  Post File = "case.vtu"
End
```

-   座標系の種類

-   定常または過渡

-   過渡の場合：時間ステップ・パラメーター

-   出力ファイル（実行を再開するための）とVTUファイル

-   出力レベル : コードがどの程度冗長か？

-   再起動情報(オプション)

***

Sif file: Constants（定数）
==============

```
Constants
  Gas Constant = Real 8.314
  Stefan Boltzmann = Real 6.78e-08
End
```

-   自然定数など

    -   ソルバーモジュールで必要に応じて

***

Sif file: Body
==============

```
Body i
  Name = “MyBody”
  Target Bodies(1) = 1
  Equation = 1
  Body Force = 2
  Initial Condition = 2
  Material = 4
End
```

-   ボディには、方程式、体積力、材料、初期条件が割り当てられています。

***

Sif file: Equation（方程式）
============================

```
Equation i
  Name = “MySolvers”
  Active Solvers(2) = 1 2

  Convection = “computed”
End
```

-   ボディのアクティブなソルバーを一覧表示します。
-   ソルバー固有のキーワードもあります。

***

Sif file: Solver
================

```
Solver i
  Equation = “HeatSolver”
  Exec Solver = “always”
  Variable = Temperature
  Procedure = "HeatSolve" "HeatSolver"
  Stabilize = True
  Steady State Convergence Tolerance = 1.0e-5
  Nonlinear System Max Iterations = 1
  Linear System Solver = Iterative
  Linear System Iterative Method = BiCGstab
  Linear System Max Iterations = 1000
  Linear System Convergence Tolerance = 1.0e-8
  Linear System Preconditioning = ILU1
End
```

-   これら方程式の数値処理を指定します（方法、収束の基準など）。
    -   解決する変数名
    -   要素の定義
    -   安定化対策
    -   非線形システム対策
    -   線形システム対策
-   ライブラリとソルバーモジュールの両方で扱うキーワード

***

Sif file: Material（材料）
==========================

```
Material i
  Name = “MyMaterial”
  Density = 1.0e3
  Heat Conductivity = 10.0
  Heat Capacity = 4.19e3
  Viscosity Model = “power law”
  Viscosity = 1.0
  Viscosity Exponent = $1.0/3.0
  Critical Shear Rate = 1.0e-10
End
```

-   ボディの材料特性を設定します
    -   ほとんどの実数値キーワードは、従属関数にできます。
    -   omeはスカラーやテンソルにもなります。

***

Sif file: Initial Condition（初期条件）
=======================================

```
Initial Condition i
  Name = “MyGuess”
  Temperature = 293.0
  Velocity 1 = 1.0e-3
End
```

-   初期条件は初期値を設定します
-   時間依存システムに必須
-   定常状態の問題については、イテレーションに影響を与える可能性のある最初の推測を提供します。

***

Sif file: Body Force
====================

```
Body Force i
  Name = “MySource”
  Heat Source = 1.0
  Flow Bodyforce 2 = -1.0
  Current Density = 1.23
  Varname Load = Real …
End
```

-   通常、解かれる偏微分方程式の右辺の元項を指定します。
-   行列方程式に直接関連する離散荷重が与えてもよい。

***

Sif file: Boundary Condition（境界条件）
========================================

```
Boundary Condition i
  Name = “Inlet”
  Target Boundaries(2) = 1 2
  Temperature = 293.0
  Velocity 1 = Variable “Coordinate 2”
    Real MATC “4*tx*(1-tx)”
  Body Id = 4
  Periodic BC = 5
End
```

-   異なるタイプの境界条件
    -   Dirichlet:Variablename=Value(ライブラリルーチン)
    -   Neumann:ソルバーに応じた特別なキーワード
-   境界線には、方程式、材料、体積力などの関連付けができるように、ボディIDを指定できます。
-   境界は、周期的、モルタル境界、接触境界などであってもよい。

***

Sif file: Run Control（実行制御）
=====================

```
Run Control
 Run Control Iterations = Integer 100
 Parameter Count = Integer 4
 Optimization Method = String "simplex"
 Cost Function = Variable Time
    Real Procedure "CostFunction" "CostFunction"
End
```

-   2020年以降の新しいセクション
-   過渡的なケースでもパラメトリックループと内部最適化を提供します。
-   使用する場合、このセクションは最初のセクションである必要があります

***

Sif file: Component
===================

```
Component i
  Name = string "gap_down"
  Master Bodies(1) = integer 5
  Calculate Magnetic Force = True
End
```

-   めったに使用されない新しいセクション
-   モデルの一括処理などに使用するボディや境界の集合体を定義できます。
-   現在の主な用途は電磁気学

***

sifファイルについてのいくつかの注意事項
=======================================

-  sifファイルの構造は、ElmerSolverコードのModel_t型とほぼ一対一の対応関係があります。
   -   各キーワードはリスト構造のエントリです。例えば、<br>
   ```R = ListGetConstReal( Model % Constants,”Gas Constant”)```
-  多くのタスクのために、別のソルバー、別名モジュールが存在する
   - 新しい追加ソルバーを追加することを恐れないでください
   - Elmerモジュール + Elmer/Iceソルバー
- 作品をコピーペーストすることは、多くの場合、開始するのに良い方法です
    - elmerfem/fem/testとelmerice/Testsの下に多数の整合性テストがあります。
-   Elmer
    ModelsマニュアルとElmerSolverマニュアルにはキーワードインデックスがあります。
-   ドキュメントは決して完全ではありません - 聞いてください！