パッチの作成

2015年1月26日

はじめに

メッシュの特徴面からパッチを作成する。

使用バージョン

OpenFOAM 2.3.1

パッチの作成

icoFoam のチュートリアルケース cavity で実演する。

$ cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity .

blockMesh がパッチを作らないように constant/polyMesh/blockMeshDict の boundary を空にする。

constant/polyMesh/blockMeshDict

...
convertToMeters 0.1;

vertices
(
    (0 0 0)
    (1 0 0)
    (1 1 0)
    (0 1 0)
    (0 0 0.1)
    (1 0 0.1)
    (1 1 0.1)
    (0 1 0.1)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
);

mergePatchPairs
(
);

メッシュの作成。

$ blockMesh

autoPatch を使ってメッシュの特徴面から自動的にパッチを作る。

$ autoPatch 90

引数にはパッチを区別するための角度を与える。時間ステップが 1 つ進んだディレクトリが作成され、そこに新しいメッシュが入る。paraFoam を起動し、時間を 1 つ進めてから "Apply" を押す。"Mesh Parts" で全項目を選び、"Patch Names" にチェックを入れるとパッチ名が表示されるので、思ったようにパッチが作られているか確認する。また、位置と名前の対応もチェックする。

問題なさそうなら、autoPatch を上書きで実行する。

$ autoPatch 90 -overwrite

autoPatch は "auto0"、"auto1" といった名前のパッチを作る。これらから適当な名前のパッチを作る。そのためには createPatch を使う。まず、system/createPatchDict を用意する。

system/createPatchDict

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      createPatchDict;
}

pointSync false;

patches
(
    {
        name inlet;
        patchInfo
        {
            type patch;
        }
        constructFrom patches;
        patches (auto0);
    }

    {
        name outlet;
        patchInfo
        {
            type patch;
        }
        constructFrom patches;
        patches (auto1);
    }

    {
        name wall;
        patchInfo
        {
            type wall;
        }
        constructFrom patches;
        patches (auto2 auto3);
    }

    {
        name frontAndBack;
        patchInfo
        {
            type empty;
        }
        constructFrom patches;
        patches (auto4 auto5);
    }
);

createPatch を実行。

$ createPatch

autoPatch 同様、時間ステップが 1 つ進んだディレクトリが作成され、そこに新しいメッシュが入る。paraFoam でパッチ名を確認する (0 ディレクトリのせいで起動に失敗するので、一時的に 0 ディレクトリの名前を変える)。問題なければ、createPatch を上書きで実行する。

$ createPatch -overwrite

createPatch を使えば、セットからパッチを作ることもできる。たとえば、auto4、auto5 からセット f0 を作る。

setBatch

faceSet f0 new patchToFace auto4
faceSet f0 add patchToFace auto5

setSet を実行。

$ setSet -batch setBatch

createPatchDict で次のように設定する。

createPatchDict

    ...
    {
        name frontAndBack;
        patchInfo
        {
            type empty;
        }
        constructFrom set;
        set f0;
    }
);