設定ファイルの書式2020年12月23日 | |
はじめにOpenFOAM の設定ファイルの書式について。 使用バージョンOpenFOAM v2006、v8 設定ファイルの書式OpenFOAM の設定ファイルは、C++ 言語のソースコードに似た書式で書かれている。 コメントC++ と同じ形式のコメント文を使うことができる。すなわち、"/*" と "*/" の間および "//" から行末まではコメントとみなされ、無視される。 ヘッダー設定ファイルは、次のようなヘッダーを持つ。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
基本的には「おまじない」と思ってよい。フィールドデータの場合、class には以下のようなフィールドのクラスを書くようになっている。
辞書OpenFOAM のデータには辞書 (dictionary) という形式が用いられている。辞書は次のように記述する。
<辞書名>
{
... キーワードエントリ ...
}
キーワードエントリ (keyword entries) の部分は、つぎのような形式である。 <キーワード> <項目 1> <項目 2> ... <項目 N>; 最後に必ずセミコロンを付ける必要がある。 たとえば、次のような感じである。
boundaryField
{
inlet
{
type fixedValue;
value uniform (1 0 0);
}
outlet
{
type zeroGradient;
}
wall
{
type fixedValue;
value uniform (0 0 0);
}
}
上の例のように、辞書は入れ子にすることができる。入れ子の中の辞書を sub dictionary という。 辞書名やキーワードには、二重引用符で囲むことで正規表現を用いることができる。すべてに当てはまるようにする場合は ".*" と表す。名前の最後に Final と付くものだけに当てはまるようにする場合は ".*Final" と表す。k か epsilon に当てはまるようにするには "(k|epsilon)" と表す。kFinal か epsilonFinal に当てはまるようにするには "(k|epsilon)Final" と表す。以下に使用例を示す。
relaxationFactors
{
fields
{
p 0.3;
}
equations
{
U 0.7;
"(k|epsilon|omega|R)" 0.7;
}
}
リスト括弧で囲んで複数のデータをまとめたものをリストという。リストは次のような形式で指定する。 <リスト名> <リスト数> ( ... 項目 ... ); リスト名やリスト数は省略される場合がある。また、次のように項目のクラスを指定する形式もある。 <リスト名> List<クラス名> <リスト数> ( ... 項目 ... ); ベクトルとテンソルベクトルは、たとえば X 方向に 1 m/s、Y 方向、Z 方向に 0 m/s の速度を表す場合は、次のように表現する。 (1 0 0) (2 階の) テンソルの場合は、9 成分を並べて書く。単位テンソルを行列風に書くのであれば、次のように表現できる。
(
1 0 0
0 1 0
0 0 1
)
対称テンソルの場合は、6 成分を指定する。単位テンソルを行列風に書くと、次のようになる。
(
1 0 0
1 0
1
)
単位付きデータ単位付きのデータは、たとえば次のように指定する。 nu nu [ 0 2 -1 0 0 0 0 ] 1e-05; 最初の "nu" はキーワード、次の "nu" はデータの名前 (普通はキーワードと同じにする)、その次の項目は単位 (dimension)、最後は値である。 単位は、次のような形式で各単位の指数を指定する。 [kg m s K mol A Cd] たとえば、m/s であれば "[ 0 1 -1 0 0 0 0 ]" とする。 最近のバージョンでは、次のような書き方もできる。 nu nu [m^2/s] 1e-05; また、データの名前や単位はあってもなくてもよい。 nu 1e-05; ただ、単位くらいは書いておいたほうがわかりやすいかもしれない。 nu [m^2/s] 1e-05; ファイルの取り込み#include 文でファイルを取り込むことができる。 #include "ファイル名" OpenFOAM 2.4.0 から、$FOAM_ETC 以下のファイルを取り込むために #includeEtc も使える。 #includeEtc "caseDicts/setConstraintTypes" 値の参照"$名前" で辞書やキーワードの値を参照することができる (これをマクロという)。
solvers
{
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.01;
}
pFinal
{
$p;
tolerance 1e-06;
relTol 0;
}
... 省略 ...
}
上記の例では、"$p" により辞書 p の項目を辞書 pFinal の中に取り込んでいる。 辞書名やキーワードには、基本的にはソルバーやユーティリティなどのプログラムが必要とするものを指定するが、任意の名前を使うこともできるし、それを参照させることもできる。 式値の指定のために、式を使うことができる。 value uniform (#eval "pow(200.,2)/(pow(50.,2)*pi())*10." 0 0); #eval は OpenCFD 版で使える。式を囲むのは、"..." の代わりに {...} でもよい。 Foundation 版でも使えるものとして、#calc もあるが、#eval のほうが便利である。 コード値をコードで計算して指定することができる。
L 200.;
D 50.;
Ux0 10.;
Ux #codeStream
{
code
#{
const scalar pi = constant::mathematical::pi;
os<< pow($L, 2)/(pow($D, 2)*pi)*$Ux0;
#};
};
value uniform ($Ux 0 0);
| |
| PENGUINITIS | |