OpenFOAM
は,文字列,スカラ,ベクトル,テンソル,リスト,およびフィールド等のデータ構造の範囲を読み込む必要があります.入出力
(I/O)
ファイルのフォーマットはユーザがOpenFOAM
のアプリケーションをできる限り容易に修正できるよう,非常に柔軟に設計されています.この
I/O
は,ファイルの作成が非常に簡単で理解しやすい単純なルールに従っている ものであり,ファイルのフォーマットが直観的に理解しづらいばかりかどこにも公開されてい ないような,多くのソフトウェアパッケージとは対照的です.OpenFOAM
のファイルフォー マットについては次節で説明します.4.2.1
一般的な構文規則フォーマットは以下の
C++
ソースコードのいくつかの一般的な原理に従います.• ファイルは,列によって特定の意味が割り当てられることもなく,継続行を明示する必 要もない,自由形式となっています.
• 行は特に意味をもちませんが,コメント・デリミタ
//
があればOpenFOAM
は行の最 後までテキストを無視します.• 複数行にわたるコメントは,
/*
と*/
で囲みます.4.2.2
ディクショナリOpenFOAM
においてデータを指定する最も一般的な手段としてはディクショナリを使います.ディクショナリには,キーワードに応じて
I/O
から読み出すことのできるデータ項目が含 まれています.キーワード・エントリは以下のような一般的な書式に従います.<keyword> <dataEntry1> ... <dataEntryN>;
ほとんどの入力項目は単一のデータ入力の書式になっています
<keyword> <dataEntry>;
ほとんどの
OpenFOAM
のデータファイルはそれ自体1
セットのキーワード入力を含むディク ショナリです.ディクショナリは論理的なカテゴリにエントリを構成するための手段を提供し ており,階層的に指定できるので,どんなディクショナリもそれ自体が一つ以上のディクショ ナリエントリを含んでいます.ディクショナリの書式は,以下のようにディクショナリ名を指 定し,その後に波括弧{ }
で囲まれたキーワード・エントリが続きます.<dictionaryName>
{
... keyword entries ...
}
4.2.3
データファイルヘッダOpenFOAM
によって読み書きされるすべてのデータファイルは,表4.1に記載されており,キーワード入力の標準セットを含む
FoamFile
と名付けられたディクショナリから始まります.キーワード 説明 入力
version 入出力形式のバージョン 2.0
format データ形式 ascii/binary
location “...”ファイルへのパス (オプション)
class 関連するデータファイルから構成された
OpenFOAMのクラス
一般的にdictionaryもしくは volVectorFieldなどのフィールド
object ファイル名 例:controlDict
表4.1 データファイルのためのヘッダのキーワード入力
この表には各エントリの簡単な説明を載せています.これは
class
については多くの例外が あるものの,おそらくほとんどのエントリについては十分な内容でしょう.class
エントリは ファイル内のデータから構成されるOpenFOAM
ライブラリでのC++
クラスの名前です.お そらくユーザは,読み込まれるファイルを呼び出す基礎的なコードの知識やOpenFOAM
クラ スの知識なしに,class
の入力を正確に推測することはできません.しかし,ほとんどのデー タファイルは単純なキーワードエントリをもち内部のdictionary
クラスの中に読み込まれます.それゆえ,それらの場合では
class
エントリはdictionary
となります.以下の例はこれまで説明してきたエントリのタイプを使ったケースへのデータ供給のキーワー ドの使い方を示しています.
fvSolution
ディクショナリファイルを分解すると,solvers
とPISO
という二つのディクショナリが含まれています.solvers
ディクショナリは圧力方程式と速度方程式に対してそれぞれ計算用と収束用に複数のデータ入力があり,それぞれ
p
とU
のキーワー ドによって記述されます.PISO
ディクショナリはアルゴリズムの制御パラメータを含みます.17
18 solvers
19 {
20 p
21 {
22 solver PCG;
23 preconditioner DIC;
24 tolerance 1e-06;
25 relTol 0;
26 }
27
28 U
29 {
30 solver PBiCG;
31 preconditioner DILU;
32 tolerance 1e-05;
33 relTol 0;
34 }
35 }
36 37 PISO
38 {
39 nCorrectors 2;
40 nNonOrthogonalCorrectors 0;
41 pRefCell 0;
42 pRefValue 0;
43 }
44 45
46 // ************************************************************************* //
4.2.4
リストOpenFOAM
アプリケーションはリストを含んでいます.例えば,メッシュ記述のための頂点リストがあります.リストは一般的に
I/O
にあり独自のフォーマットをもっていて,入力は 丸括弧( )
内にされます.また,丸括弧の前のフォーマットの選択もあります.simple
キーワードに続いてすぐに丸括弧がくる.<listName>
(
... entries ...
);
numbered
キーワードに続いてリスト内の要素数<n>
がくる.<listName>
<n>
(
... entries ...
);
token identifier
キーワードに続いてクラス名の識別子ラベル<Type>
がくる.<Type>
はリス トに何が入っているかを記載したもので,例えばスカラ要素のリストであれば次のよう になる.<listName>
List<scalar>
<n> // optional (
... entries ...
);
ここで留意すべきはリスト
<scalar>
での<scalar>
は一般名ではなく入力された実際の文字 列です.単純なフォーマットは,リストを書くときの便利な方法です.その他のフォーマット はリストのサイズがデータを読み込む前にメモリに割り当てられるのでコードがより早くデー タを読み込めます.それゆえ単純なフォーマットは読み込み時間が最小の短いリストに適して おり,その他のフォーマットは長いリストに適しています.4.2.5
スカラとベクトル,テンソルスカラは,データファイルでは一つの数字として記述されます.
vector
は,ランク1で3
次元の
VectorSpace
であり,要素数はいつも3に決まっているので単純なリストフォーマットで使われます.それゆえ,ベクトル(1.0, 1.1, 1.2)は次のように書かれます.
(1.0 1.1 1.2)
OpenFOAM
では,テンソルはランク2で3
次元のVectorSpace
であり,それゆえデータ入力は いつも九つの実数と決まっています.それゆえ単位テンソルは以下のように書かれます.(
1 0 0 0 1 0 0 0 1 )
この例は入力が複数の行に上書きできるように
OpenFOAM
がその行に戻るのを無視する方法 を示しています.一行に数字を羅列することと扱いは違いません.( 1 0 0 0 1 0 0 0 1 )
4.2.6
次元の単位連続体力学では,物理量はある決められた単位で表現されます.例えば,質量ならキログラ ム
(kg)
,体積なら立法メートル(m
3)
,圧力ならパスカル(kg m
−1s−2)
というように.代数の 演算は統一した測量単位を用いて実行されなければなりません.特に,足し算,引き算,およ び等式は同じ次元の単位の物理的特性においてのみ意味があります.無意味な操作を実行する ことへの安全装置として,OpenFOAM
はフィールドデータと物理的特性に次元を付けて,ど のようなテンソル操作についても次元をチェックして実行します.dimensionSet
の入出力形 式は角括弧内の七つのスカラ量です.例えば,[0 2 -1 0 0 0 0]
表4.2に記載するように各値は計測基準単位のそれぞれの物理量に対応しています.表は国際単
No. 物理量 SI単位 USCS単位 1 質量 キログラム(kg) 質量ポンド(lbm)
2 長さ メートル(m) フィート(ft)
3 時間 秒 (s)
4 温度 ケルビン(K) ランキン温度(°R) 5 物質量 モル(mol)∗ ポンドモル(lbmol)
6 電流 アンペア(A)
7 光度 カンデラ(cd)
表4.2 SIとUSCSの基本単位
位系
(SI)
とthe United States Customary System (USCS)
の基本単位ですがOpenFOAM
はど の単位系も使えます.要求されることは入力データが選択した単位に合っているということです.特に重要なのは,
OpenFOAM
がいくつかの次元化された物理定数を必要とするということを知っ ておくことです.例えば熱力学のモデル化したある計算のための一般気体定数Rなどがいい例 です.これらの次元定数はOpenFOAM
インストール($WM_PROJECT_DIR/etc/controlDict)
のメインcontrolDict
ファイルのDimensionedConstant
サブディクショナリで指定されます.デ フォルトでは,これらの定数はSI
で設定されます.USCS
もしくはその他の単位系を使用した い場合は,選択した単位系に合わせてこれらの定数を変更してください.4.2.7
次元付きの型物 理 量 は 一 般 に ,そ れ ら の 関 連 す る 次 元 に よ っ て 特 定 さ れ ま す .こ れ ら の 入 力 は ,
dimensionedScalar
の以下の例が示すフォーマットをもっています.nu nu [0 2 -1 0 0 0 0] 1;
最初の
nu
はキーワード,2
番目のnu
はクラスのword
の名前で,通常キーワードと同じものが 選ばれる.その次の入力はdimensionSet
で最終的な入力はスカラ値です.4.2.8
フィールドOpenFOAM
の入出力データの多くはテンソル場,例えば速度や圧力のデータにあり,時刻ディレクトリから読み込み時刻ディレクトリに書き込まれます.表4.3で説明されるように,
キーワード入力を使って,
OpenFOAM
はフィールドデータを書きこみます.キーワード 説明 例
dimensions 領域の次元 [1 1 -2 0 0 0 0]
internalField 内部領域の値 uniform (1 0 0) boundaryField 境界領域 4.2.8項のファイル参照 表4.3 フィールドディクショナリで使われる主なキーワード
データは
dimensions
エントリから始まります.その後に続くのは,以下のいずれかの方法で記述される
internalField
です.一様フィールド ただひとつの値にそのフィールド内で全ての要素が対応していて,以下のよ うな書式をとります.
∗訳注:原文ではkgmolとされているが,これは誤り.SIにおける物質量の基本単位はmolである.
internalField uniform <entry>;
非一様フィールド 各フィールドの要素は,固有の値を割り当てられ,リストの識別子トーク ンフォームにある以下の書式をとることが推奨されます.
internalField nonuniform <List>;
boundaryField
はpolyMesh
ディレクトリ内のboundary
ファイルにある境界パッチのそれぞれの 名前に対応する名前の一連の入力を含んだディクショナリである.各パッチの入力はそれ自体 がキーワード入力のリストを含むディクショナリとなります.必須エントリであるtype
には,そのフィールドに指定すべきパッチ・フィールド条件を記述します.残りの入力は選択された パッチ・フィールド条件のタイプに対応し,一般的にはパッチフェイスで初期条件を分類する フィールドデータを含みます.
OpenFOAM
で使えるパッチ・フィールド条件の選択肢は,そ の説明と指定しなければならないデータと併せて,表5.3と表5.4に記載してあります.速度U
のフィールドのディクショナリ入力の例を以下に示します.17 dimensions [0 1 -1 0 0 0 0];
18
19 internalField uniform (0 0 0);
20
21 boundaryField
22 {
23 movingWall
24 {
25 type fixedValue;
26 value uniform (1 0 0);
27 }
28
29 fixedWalls
30 {
31 type fixedValue;
32 value uniform (0 0 0);
33 }
34
35 frontAndBack
36 {
37 type empty;
38 }
39 }
40
41 // ************************************************************************* //
4.2.9
ディレクティブとマクロ置換OpenFOAM
のケースファイルを柔軟に設定するためのディレクティブや代替マクロといったオプションのファイル構文があります.ディレクティブはケースファイル内で