penguinFoam

2017年9月9日

概要

penguinFoam は、OpenFOAM ケース設定支援ツールである。

※OpenFOAM に慣れた人向けです。

ライセンス

GPL

免責事項

本ツールは現状のまま提供されるものとします。また、本ツールは無保証です。

パッケージ

動作環境

  • OpenFOAM v1706
  • Python 3.x/PyQt5 (Anaconda3 推奨)
  • Bash
  • Gnuplot

セットアップ

penguinFoam のディレクトリを設置し、パスを通しておく。

GUI の使い方

penguinFoam を実行すると GUI が起動する。

$ penguinFoam

コマンドライン上での使い方

1. ケースの用意

チュートリアルケースをコピーするなどして、ケースディレクトリを用意する。penguinFoam 付属の copyTutorialCase でチュートリアルケースのコピーができる。

$ copyTutorialCase incompressible simpleFoam pitzDaily sample

2. メッシュの用意

blockMesh などでメッシュを用意する。

3. 新規ケースのセットアップ

penguinFoam 付属の penguinFoamNewCase で新規ケースのセットアップを行う。ケースディレクトリに bin ディレクトリへのリンクが作成され、settings ディレクトリがコピーされる。

bin の中にはスクリプトがあり、ケースディレクトリのルートで実行するようになっている。settings には設定ファイルが入っている。

4. フィールドの作成

settings/fields でフィールドの設定を行う。

settings/fields

class
{
    U      volVectorField;
    p      volScalarField;
    k      volScalarField;
    epsilon volScalarField;
}

dimensions
{
    U      [0 1 -1 0 0 0 0];
    p      [0 2 -2 0 0 0 0];
    k      [0 2 -2 0 0 0 0];
    epsilon [0 2 -3 0 0 0 0];
}

5. 境界条件情報の作成

bin/createBoundaryInfo で境界条件情報 settings/boundaryInfo を作成する。 これは constant/polyMesh/boundary の設定が反映される。つぎの境界条件の作成のため、boundaryInfo で physicalType を設定する。boundaryInfo の書式は、境界名、パッチタイプ、physicalType となっている。

settings/boundaryInfo

inlet patch inlet
outlet patch outlet
upperWall wall
lowerWall wall
frontAndBack empty

6. 境界条件の作成

bin/createBoundaries で境界条件 settings/boundaries を作成する。デフォルト設定は settings/defaults/* に基づいて physicalType ごとに設定される。

settings/boundaries

boundaries
{
    inlet
    {
        U
        {
            type fixedValue;
            value uniform (0 0 0);
        }
        p
        {
            type zeroGradient;
        }

        ...

7. 初期値/境界条件の設定

settings/fields で初期値の設定を行う。

settings/fields

internalField
{
    U      uniform (0 0 0);
    p      uniform 0;
    k      uniform 0.375;
    epsilon uniform 14.855;
}

settings/boundaries で境界条件の設定を行う。

settings/boundaries

boundaries
{
    inlet
    {
        U
        {
            type fixedValue;
            value uniform (10 0 0);
        }
        p
        {
            type zeroGradient;
        }

        ...

8. 領域分割

"bin/createPartitions <分割数>" で領域を分割する。引数で分割数を指定する。

$ bin/createPartitions 4

9. 実行

bin/runSolver で実行する。

$ bin/runSolver

ソルバーは system/controlDict の application に設定されたものが実行される。

gnuplot により残差が表示される。

~/.OpenFOAM/$WM_PROJECT_VERSION/controlDict でstopAtWrtieNowSignal に 10 を設定すると、Ctrl-C で計算を安全に停止できる。

~/.OpenFOAM/$WM_PROJECT_VERSION/controlDict

OptimisationSwitches
{

    ...

    stopAtWriteNowSignal        10;
}

~/.OpenFOAM/$WM_PROJECT_VERSION や controlDict がなければ、まず用意する。

$ mkdir -p ~/.OpenFOAM/$WM_PROJECT_VERSION
$ cp $WM_PROJECT_DIR/etc/controlDict ~/.OpenFOAM/$WM_PROJECT_VERSION

10. 残差のプロット

bin/plot で残差をプロットできる。

$ bin/plot

画像 residual.png が保存される。

11. 結果の削除

  • bin/clearResults ですべての結果を削除する (processor* 自体は削除しない)。
  • bin/clearRange で指定した時間の結果を削除する。
  • bin/cleanCase で結果も含め生成されたデータを可能な限りすべて削除する。

使い方

$ bin/clearResults

使用上の注意

時刻 0 以外のデータは settings の設定を参照していないが、runSolver は自動的に最後の時刻のデータを現在の settings の設定で更新する。設定の更新を自動で行う必要がある場合は、bin/applyLatestSettings を実行する。

ChangeLog

2017.7.31
    * bin/createPartitions applyLatestSettings, bin/runSolver.py
    bin/createFields を自動で実行するようにした。
    * bin/getControls.py
    追加。system/controlDict から値を取得する。
    * bin/getSolver
    廃止。bin/getControls.py で代用。
    * bin/getBoundaries, getBoundaryType
    引数に boundary ファイルを取るのをやめた。
    * bin/createBoundaries, createBoundaryInfo, createFields,
    createFieldsLatestTime, createPartitions
    上記変更にともない修正。
    * bin/getFields, getFieldType
    引数に fields ファイルを取るのをやめた。
    * bin/createBoundaries, createFields, createFieldsLatestTime
    上記変更にともない修正。
    * penguinFoam, gui
    GUI を追加。

2017.6.27
    * bin/cleanCase
    'case.foam' ファイルを消すようにした。
    * setup
    廃止。
    * penguinFoamNewCase
    追加。setup での作成を廃止。
    bin ディレクトリをコピーではなくリンクに変更した。
    * bin/changeBoundary.py
    廃止。
    * bin/getSolver
    追加。ソルバー名を取得する。
    * bin/runSolver
    ソルバーを自動取得するようにした。
    * bin/*
    エラー時に終了ステータスに 1 を返すようにした。
    * bin/getLatestTime.py
    シリアルの最終時刻を得るオプションを追加。
    * bin/createPartitions
    processor* ディレクトリが存在しても処理するようにした。
    * bin/createFieldsLatestTime
    追加。計算継続時フィールドファイル作成用。
    * bin/applyLatestSettings, createChangeDictonaryDict
    計算継続時の設定について改善
    * bin/changeBoundaryType.py
    physicalType 指定できるようにした。
    * bin/updateBoundaryInfo
    追加。settings/boundaryInfo の情報を constant/polyMesh/boundary
    に反映する。

2017.5.26
    * bin/*.py
    行頭 "#!/usr/bin/python" を "#!/usr/bin/env python" に変更。
    * bin/*.py
    例外処理を Python 3.x 向けに修正
    * bin/runSolver.py, bin/plotResiduals.py
    subprocess.Popen() の引数に universal_newlines=True を追加。
    * bin/createPlotLogs.py
    os.chmod() の引数の 8 進リテラルを Python 3.x 向けに修正。
    * bin/createChangeDictionaryDict
    0 ディレクトリ内のディレクトリを無視するように修正。
    * settings/defaults
    nut の設定を追加。

2017.5.25
    * penguinFoamNewCase (setup)
    bin, settings ディレクトリが存在するときはコピーしないようにした。
    * bin/createFields
    setConstraintTypes の設定を追加。
    * bin/runSolver.py
    継続計算時に bin/applyLatestSettings の実行を追加。

2017.5.23
    * リリース。