機 能
index
| |
|---|---|
| 1. | ソルバーの作成 |
| 2. | OpenFOAM®の標準ソルバー |
| 3. | ユーティリティアプリケーション |
| 3.1 プリプロセス | |
| 3.2 メッシュコンバータ | |
| 4 | ポストプロセス |
| 5 | OpenFOAM®ライブラリ例 |
| 5.1 移動メッシュライブラリ | |
| 5.2 メッシュ・ユーティリティ | |
| 5.3 粒子追跡 | |
| 5.4 連続体モデルライブラリ | |
| 5.5 アダプティブ・エラーコントロール | |
| 5.6 並列計算 | |
1.ソルバーの作成
OpenFOAM®は複数の偏微分方程式(PDE)で記述された工学的問題を解くためのプログラミングツールです。OpenFOAM®はPDE を時系列3次元の任意形状セルによる非構造メッシュで離散化するために、有限体積法(FV)を用いています。そのコードは本質的にはOpenFOAM® C++ライブラリを用いて記述されており、各々の問題に対してわずか50行程度の非常に短いアプリケーションプログラムとなっています。これらのアプリケーションプログラムでは方程式を次のような記述によって表現しています。
solve ( fvm::ddt(rho, U) + fvm::div(phi, U) - fvm::laplacian(mu, U) == - fvc::grad(p) ); |
- 専用プログラム開発効率が格段に向上します。
- サブルーチン形式のものとは違い、意図する数学的オブジェクトを直接組み合わせることができるので、研究/開発に適しています。
- 分かり易いアルゴリズム表記により、コードの保守・発展が容易になります。
- コンパイル/実行時共に、高度なエラーチェックが可能です。
- 洗練されたアプリケーションオブジェクトが作成可能です。
- 効率の良いメモリ管理と高速ソルバーで高速計算が可能です。
- プロセッサの数に比例する高速化が可能です。
OpenFOAM®では標準的な微分演算子(Ñ2,Ñ·,Ñ,Ñ´,¶/¶t,¶2/¶t2など)が任意形状セルに対応した2次および4次精度有限体積法を用いて定義されています。詳しくはプログラマーズガイドをご覧ください。
| Table 1 OpenFOAM® C++ライブラリの微分演算子 | |||
|---|---|---|---|
| Term description | Implicit / Explicit | Text expression | fvm::/fvc:: functions |
| Laplacian | Imp/Exp | laplacian(phi) laplacian(Gamma, phi) |
|
| Time derivative | Imp/Exp |
|
ddt(phi)
|
| Second time derivative | Imp/Exp | ![]() |
d2dt2(rho, phi) |
| Convection | Imp/Exp |
|
div(psi,scheme)*
div(psi, phi, word)* div(psi, phi) |
| Divergence | Exp | div(chi) | |
| Gradient | Exp |
|
grad(chi)
gGrad(phi) lsGrad(phi) snGrad(phi) snGradCorrection(phi) |
| Grad-grad squared | Exp | sqrGradGrad(phi) | |
| Curl | Exp | curl(phi) | |
| Source | Imp
Imp/Exp† |
Sp(rho,phi)
SuSp(rho,phi) |
|
|
†fvm::SuSp source is discretised implicit or explicit depending on the sign of rho. |
|||
OpenFOAM®では多種の離散化スキームを提供しています。これらはFoamXのGUI上で方程式の項別に選択して解くことができるので、計算の精度、有解性、保存性などの全てについて実行時に制御することが可能です。
よく知られている方程式にカップリングしたアルゴリズム(PISO、SIMPLEなど)の例は、アプリケーションのトップレベル・コードの中で記述されています。
OpenFOAM®ライブラリによる洗練された文法はアルゴリズム自身の最も分かり易い記述法と見ることもできます。OpenFOAM®パッケージにはC++ライブラリ、及び標準アプリケーションの全ソースコードが含まれています。これらは専用アプリケーションを開発する際の参考として使用できます。
2.OpenFOAM®の標準ソルバー
OpenFOAM®のパッケージには以下の標準アプリケーションとそのコードが含まれています。ただしOpenFOAM®の適用範囲は以下に限ったものではありません。
| Table 2 OpenFOAM®標準アプリケーションリスト | |
|---|---|
| 'Basic' CFD codes | |
| boundaryFoam | 1次元で乱流モデルを解くシンプルな境界層コード. |
| icoFoam | 非圧縮性、層流の速度-圧力コード.非ニュートン流体も可. |
| icoFoamAutoMotion | 移動メッシュによる非圧縮非定常層流コード. |
| laplacianFoam | 熱伝導問題などの例題コード. |
| potentialFoam | シンプルなポテンシャル流のコード.完全ナビエ-ストークスコードを解く際の保存された初期値の生成にも使用できる. |
| turbFoam | 低レイノルズ数あるいは壁関数による線形,非線形またはレイノルズ応力乱流モデルを用いた非圧縮性乱流コード. |
Heat transfer熱輸送
| buoyantFoam | 換気と熱輸送問題の乱流、浮力コード. |
|---|
Compressible flow 圧縮性流れ
| sonicFoam | 圧縮性,遷音速/超音速層流気体コード. |
|---|---|
| sonicFoamAutoMotion | 移動メッシュによる圧縮性コード. |
| sonicLiquidFoam | 圧縮性,遷音速/超音速層流液体コード |
| sonicTurbFoam | 圧縮性,遷音速/超音速乱流コード. |
Direct numerical simulation (DNS) and large eddy simulation (LES)
| channelFoam | チャンネル流のDNS/LESコード. |
|---|---|
| dnsFoam | 等方性乱流のDNSコード. |
| oodles | 非圧縮LESコード. |
Combustion 燃焼
| dieselFoam | ディーゼル燃焼モデリングの研究用コード. |
|---|---|
| engineFoam | SIエンジン用コード. |
| dieselEngineFoam | ディーゼルエンジン用噴射/燃焼用コード |
| xiFoam | 圧縮性予混合/部分的予混合乱流燃焼コード. |
| xoodles | 圧縮性予混合/部分的予混合乱流燃焼LESコード. |
Two-phase flow 2相流れ
| bubbleFoam | 非圧縮分散性2相2流体コード. |
|---|---|
| interFoam | 非圧縮2相流のinterface trackingコード. |
| settlingFoam | 分散相の設定シミュレーション用の非圧縮2相流コード. |
Stress analysis応力解析
| stressedFoam | 線形弾性体の応力解析コード. |
|---|---|
| contactStressFoam | 非線形弾性体の応力解析コード. |
| stressedFemFoam | 有限要素法静的線形応力解析コード |
Electromagnetics電磁流体
| mhdFoam | 非圧縮性層流電磁流体コード. |
|---|---|
| electrostaticFoam | 静電方程式コード. |
Finance金融工学
| financialFoam | Black-Scholes方程式を解き商品価格を求める. |
|---|
3.ユーティリティアプリケーション
OpenFOAM®では数値計算以外の部分(メッシュ生成およびプリ/ポストプロセスなど)をサポートする多数のユーティリティアプリケーションを提供しています。次の図はOpenFOAM®パッケージの主要なユーティリティと作業データの流れを表しています。
![]() |
Fig.
2.ユーティリティアプリケーションと作業データの流れ
3.1 プリプロセス
OpenFOAM®ケースマネージャFoamX
すべてのOpenFOAM®チュートリアルはJAVA/C++によるグラフィックユーザインターフェース (GUI)ツールFoamXにより管理されます。そしてこれはCommon Object Request Broker Architecture (CORBA)を用いた分散ネットワーク環境で使用できます。FoamXによるGUI環境はそれぞれのアプリケーションが要求しているデータエントリのみを扱うように個々に設定できるので、冗長な入力をする必要がありません。ユーザは新規に作成する全てのアプリケーションに対してFoamX環境を設定し、アプリケーションの実行を管理することができます。
![]() |
| Fig.3 FoamXのメインウインドウからユーティリティの実行 |
![]() |
|
Fig. 4 境界条件の選択 |
![]() |
| Fig. 5 境界面の選択と条件の設定 |
![]() |
| Fig. 6 計算パラメータの設定ウインドウ |
| Table3 その他のプリプロセスユーティリティ | |
|---|---|
| AdiabaticFlameT | 与えられた燃料の未燃温度と当量比の範囲から断熱火炎温度を求める |
| BoxTurb | 与えられたエネルギースペクトルから連続式をみたす乱流のboxを生成する |
| EquilibriumCO | 一酸化炭素の平衡レベルを求める |
| EquilibriumFlameT | 与えられた燃料と圧力の未燃温度と当量比の範囲から平衡火炎温度を求める |
| LeanSl | 与えられた圧力(bar),温度(K),当量比における希薄燃料の層流火炎速度を計算し表示する |
| mixtureAdiabaticFlameT | 与えられた温度と燃料の混合における断熱火炎温度を求める |
| NMRreader | NMRスキャニングデバイスから標準形式の点データを読み込む |
| RedirectUinlet | ユーティリティで定められた境界面における速度の法線方向成分を消去する |
| set<field>, e.g. setAlpha | フィールド<field>に初期フィールドと境界条件を与える, e.g. alpha |
| Sl | 与えられた圧力(bar),温度(K),当量比における燃料の層流火炎速度を計算し表示する |
3.2 メッシュコンバータ
OpenFOAM®アプリケーションは任意面数の多面体が混在するような非構造メッシュに対応しています。多面体は単純にそれを構成する面のリストとして表され、各々の面はそれを構成する点のリストとして表されます。このような方法でメッシュを生成することにより、境界付近の複雑形状や、局所的に再分割されたメッシュなどを容易に扱うことができます。OpenFOAM®には標準のメッシュジェネレータblockMeshが付属していますが、他のメッシュジェネレータおよびCADが生成したメッシュも利用可能です。OpenFOAM®に付属しているコンバータの表を次に示します。
| Table4 メッシュコンバータ | ||
|---|---|---|
| コンバータ | 対応製品 | 読込ファイル |
| FluentMeshToFoam | Fluent | .msh形式のメッシュファイル、2-Dと3-D両形式に対応 |
| StarToFoam | STAR-CD | proAMメッシュファイル |
| smapToFoam | STAR-CD | SMAPデータファイル |
| gambitToFoam | GAMBIT | .neu形式のニュートラルファイル |
| ideasToFoam | I-DEAS | I-DEASからANSYS入力用に書き出された.ans形式のメッシュファイル |
| CfxToFoam | CFX | .geo形式のメッシュファイル |
| kivaToFoam | KIVA-3V | kiva3vのメッシュファイル |
4. ポストプロセス
OpenFOAM®にはparaFoamというポストプロセッサが標準で付属しています。これはVTK仕様のParaViewというオープンソースソフトウェアを用いて開発されたものです。OpenFOAM®にはその他にEnSightやFIELDVIEWなどのポストプロセッサに対応するためのプログラムも用意されています。また、OpenFOAM®から他のデータ形式へ変換するためのデータコンバータもいくつか用意されています。これら以外のデータ形式の場合は、既存のコンバータ・ソースを参考に変換プログラムを作ることができます。
| Table 5 ポストプロセスユーティリティ | |
|---|---|
| dxFoamExec | openDXを用いたポストプロセスユーティリティ |
| ensight74FoamExec | EnSight7.4を用いたポストプロセスユーティリティ |
| patchToOBJ | パッチとfaceZone面を.objフォーマットにダンプするユーティリティ |
| vxpFoam | AVS/Expressを用いたポストプロセスユーティリティ |
| foamDataToFluent | OpenFOAM®データをFluent形式へ変換する |
| foamMeshToFluent | OpenFOAM®メッシュをFluentメッシュへ変換する |
| foamToDX | OpenFOAM®データをopenDX形式へ変換する |
| foamToEnsight | OpenFOAM®データをEnSight形式へ変換する |
| foamToFieldview | OpenFOAM®データをFieldview-UNSフォーマット(バイナリ)へ変換する。 |
| foamToFieldview9 | OpenFOAM®データをFieldview Rel.9 -UNSフォーマット (Version3/バイナリ)へ変換する。 |
|
| Fig. 7 ポストプロセッサdxOpenFOAM®による可視化 |
5. OpenFOAM®ライブラリ例
OpenFOAM®では関連したツールの集合をライブラリとして作成することができます。このようなライブラリはアプリケーションのコンパイル時にリンクすることができるので、例えば特別な離散化手法などを簡単にアプリケーションに組み込むことが可能になります。OpenFOAM®では効率的なalgebraic multigrid (AMG)法および前処理付共役勾配法による線型方程式ソルバーを使用しています。ソルバー技術の選択によりOpenFOAM®ライブラリを並列計算機で効果的に使用できます。
| cfdTools | CFD一般に関するツール |
|---|---|
| errorEstimation | 後天的な誤差解析ツール |
| meshMotion | 移動メッシュライブラリ |
| engine | エンジンシミュレーションツール(点火モデリング、エンジン用移動メッシュ) |
| amgSolver | AMG(Algebraic Multigrid)線形方程式ソルバー |
| shapeMeshTools | 誤差による自動メッシュ再分割/結合ライブラリ |
5.1 移動メッシュライブラリ
OpenFOAM®には移動メッシュライブラリが用意されており、解や時間の変化に応じて計算領域が変形する問題も解くことができます。OpenFOAM®で用いている「移動メッシュ有限体積法」はメッシュの移動は解の一部として自動的に計算されます。いくつかの商用CFDパッケージでは移動メッシュを扱っているものの、それらの多くは全ての格子点の座標について、計算ステップ毎に何らかの方法で定義する必要があります。これに対しOpenFOAM®で採用している方法は次のような特徴があります。
メッシュの移動は境界あるいはその一部の移動によって定義されます。そうすればメッシュ内の全ての点の移動は計算コード自身によって自動的に計算されます。例として内燃機関を扱うengineライブラリでは境界面“chamberWall”の動きを
という移動関数で与えてピストンの動きを定義しています。
境界の移動関数には計算から得られるいかなる値も用いることができます。
メッシュを構成している全ての点の移動は、メッシュ自身の連続体問題を解くことにより計算ステップ毎に自動的に得られます。このような手法の利点は最初に適切なメッシュから始めると移動後もメッシュの適切さが維持されることです。このことにより大変形問題に対して極めてロバストになります。
メッシュ移動は外部処理ではなく解の一部として自動的に得られるので、大変形をともなう、あるいは固体-流体の連成を伴うような問題への適用の自由度が大きくなります。
移動メッシュはすべてのOpenFOAM®アプリケーションに簡単に埋め込むことができます。それはOpenFOAM®のFV離散化オペレータが移動メッシュにともなうより複雑な離散化を包含しているからです。
![]() |
5.2 メッシュユーティリティ
| checkMesh | メッシュの妥当性をチェックする |
|---|---|
| deformedGeom | PolyMeshを変位場Uと与えられたスケーリングファクタにより変形させる |
| moveMesh | 移動メッシュによるソルバ |
| moveEngineMesh | エンジンシミュレーション用のソルバ |
| refineShapeMesh | meshRefinementDictファイルの定義に基づいてshapeMeshの一部を再分割する |
| renumberMesh | 行列の帯幅を狭くするためにセルリストのインデックスを並べ替える |
| scalePoints | polyMeshの定義点を与えられた係数でスケーリングする |
| subsetMesh | meshSubsetDictで定義されたメッシュの一部を選択する |
| tetDecomposition | face-cell centre分割によりメッシュを四面体に分割する |
5.3 粒子追跡
OpenFOAM®にはラグランジュ的粒子追跡モデルが用意されており混相流の解析などに用いることができます。
基本的なモデルではオイラー的な相とのカップリングおよび追跡を提供しているので、スプレーやその他の混相モデルを簡単に実装することができます。
OpenFOAM®では標準で微粒化,分裂、衝突、蒸発などのモデルが用意されています。
OpenFOAM®のオープンアーキテクチャによりユーザ作成のモデルを自由に組み込むことができます。
5.4 連続体モデルライブラリ
OpenFOAM®には数多くの物性モデルとデータベースのライブラリが含まれています。OpenFOAM®のオープンアーキテクチャはユーザが自由に物性データ、モデルを追加することを可能にします。これらは実行時に簡単に選択して組み込むことができます。
| thermophysicalModels | 実在気体・液体の物性モデル |
|---|---|
| transportModels | 非ニュートン流体モデル |
| lagrangian | 微粒化,分裂,衝突,蒸発モデル |
| turbulenceModels | レイノルズ平均乱流モデル |
| LESmodels | Large Eddy Simulationモデル |
5.5 アダプティブ・エラーコントロール
OpenFOAM®ではいくつかの信頼できる後天的な誤差見積りのユーティリティが提供されており、簡単に使用できます。誤差を見積ることでユーザが解やメッシュの品質を向上させることが可能になります。
自動的なエラーコントロールは近い将来OpenFOAM®で提供される予定です。このオプションによりOpenFOAM®ライブラリでサポートしているメッシュの順応性を向上させることができます。
OpenFOAM®で提供されている誤差見積りのユーティリティを次に示します。
| icoErrorEstimate | 非圧縮層流CFDアプリケーション icoOpenFOAM®での誤差を見積る |
|---|---|
| EstimateScalarError | 標準形式でのスカラー輸送方程式の誤差を見積る |
5.6 v並列計算
OpenFOAM®は計算領域を自動的に分割し、複数プロセッサで計算を行います。プロセッサ間の通信はMPIプロトコルを用い、Cray上ではshmemを用います。OpenFOAM®は優れたスケーラビリティを示し、プロセッサ数を増加することにより計算時間を効率よく短縮できます。
OpenFOAM®のスケーラビリティを示す例を次に示します。例題はディーゼルのインジェクタバルブの3次元線形応力解析問題でメッシュは360000
CVs、計算には24CPUのSilicon Graphics Origin 2000をnon-dedicated modeで使用しています。
| No of CPUs | CPU time to convergence | CPU time (600 iter.) | Speedup |
|---|---|---|---|
| 1 | 35620.4 s | 90785.2 s | 1.00 |
| 2 | 22398.8 s | 56605.2 s | 1.60 |
| 4 | 11406.6 s | 29244.2 s | 3.10 |
| 8 | 4247.32 s | 10218.6 s | 8.88 |
| 16 | 2872.58 s | 7205.33 s | 12.4 |
CPU time to convergence for the linear
stress analysis problem on an SGI Origin 2000 parallel computer.
OpenFOAM®は256プロセッサのCray T3E上で1000万セルの計算に用いられています。
| decomposePar | 自動的に計算領域をOpenFOAM®コードの並列処理のために分割する |
|---|---|
| reconstructPar | 並列処理で分割された計算領域を再構成する |

![Open FOAM [オープンフォーム]](images/OpenFOAM_leftmenuhead.gif)






