• 検索結果がありません。

基本的な入出力ファイルのフォーマット

ドキュメント内 OpenFOAM User Guide (ページ 106-113)

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

1s2

)

というように.代数の 演算は統一した測量単位を用いて実行されなければなりません.特に,足し算,引き算,およ び等式は同じ次元の単位の物理的特性においてのみ意味があります.無意味な操作を実行する ことへの安全装置として,

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

のケースファイルを柔軟に設定するためのディレクティブや代替マクロといっ

たオプションのファイル構文があります.ディレクティブはケースファイル内で

#

から始まる コマンドとして記述されます.代替マクロは

$

から始まります.

OpenFOAM

では現在4種類のディレクティブが利用可能できます.

#include "<fileName>"

または

#includeIfPresent "<fileName>" <fileName>

という名 前のファイルを読み込む

#inputMode

二つのオプションがある.

merge

は連続するディクショナリのキーワードのエン

ドキュメント内 OpenFOAM User Guide (ページ 106-113)