新しいケースの作成

2014年3月2日

はじめに

新しいケースの作成について。

使用バージョン

OpenFOAM 2.3.0

新しいケースの作成

新規でケースを作成する場合、ケースディレクトリを自分で作るのは大変なので、ふつうは使用するソルバー、あるいはそれに近いソルバーのチュートリアルケースをコピーし、それを修正してケースを作成する。

チュートリアルのディレクトリのパスは $FOAM_TUTORIALS で参照できる。また、コマンドで "tut" と打つとチュートリアルのディレクトリに移動できる。

慣れてきたら、自分のお気に入り設定を行ったケースディレクトリをソルバーごとに作っておき、それをコピーして使うとよいかもしれない。

foamNewCase

OpenFOAM には foamNewCase というスクリプトがある。これは新しいケースディレクトリを作るための仕組みである。

~/.OpenFOAM/appTemplates/$WM_PROJECT_VERSION にソルバーごとのケースディレクトリをソルバーの名前で置いておくと、foamNewCase はそれをもとにソルバーのケースディレクトリを作成 (コピー) する。

たとえば、つぎのようにする。

$ mkdir -p ~/.OpenFOAM/appTemplates/$WM_PROJECT_VERSION
$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily ~/.OpenFOAM/appTemplates/$WM_PROJECT_VERSION/simpleFoam
$ foamNewCase -list

applications available:
    simpleFoam

ここでは、simpleFoam のチュートリアルケースである pitzDaily をそのままコピーした。オプション "-list" をつけて foamNewCase を実行すると、利用可能なソルバーとして "simpleFoam" と出る。

新しくケースを作る場合は、つぎのようにする。

$ foamNewCase -app simpleFoam -case newCase

newCase というケースディレクトリが作成される。

境界条件の設定がチュートリアルのままで使いにくいので、つぎのようにデフォルト設定だけを記述するようにしておくとよいかもしれない。

0/U

FoamFile
{
    version     2.0;
    format      ascii;
    class       volVectorField;
    object      U;
}

dimensions      [0 1 -1 0 0 0 0];

internalField   uniform (0 0 0);

boundaryField
{
    #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"

    ".*"
    {
        type            fixedValue;
        value           uniform (0 0 0);
    }
}

0/p

FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      p;
}

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 0;

boundaryField
{
    #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes"

    ".*"
    {
        type            zeroGradient;
    }
}

余計なファイルを削除しておくとよい。

さて、これを使用して cavity のケースを simpleFoam 用に作るとしたら、つぎのようになる。

$ foamNewCase -app simpleFoam -case cavity
$ cd cavity

(blockMeshDict をコピー)
$ cp $FOAM_TUTORIALS/incompressible/icoFoam/cavity/constant/polyMesh/blockMeshDict constant/polyMesh

$ blockMesh

(0/U に境界条件を追加)

    movingWall
    {
        type            fixedValue;
        value           uniform (1 0 0);
    }

$ simpleFoam