非定常境界条件

2014年8月20日

使用バージョン

OpenFOAM 2.3.0

非定常境界条件

時間によって変化する境界条件を設定するには、境界条件タイプ "uniformFixedValue" などを使う。時間依存境界条件の設定方法は OpenFOAM 2.1.0 で実装された機能で、これ以外にも "flowRateInletVelocity", "rotatingWallVelocity" などでも同様の設定ができる。

まず、時間変化しない場合。

0/U

    inlet
    {
        type            uniformFixedValue;
        uniformValue    constant (10 0 0);
    }

境界 "inlet" に u = (10, 0, 0) を設定している。

テーブル入力。

    inlet
    {
        type            uniformFixedValue;
        uniformValue    table
        (
            (0   (0 0 0))
            (0.01 (10 0 0))
        );
    }

ここでは t = 0 で u = (0, 0, 0), t = 0.01 で u = (10, 0, 0) としている。以下同様。

ファイルでテーブル入力。

    inlet
    {
        type            uniformFixedValue;
        uniformValue    tableFile;
        tableFileCoeffs
        {
            fileName    "$FOAM_CASE/velocity"
            outOfBounds clamp;
        }
    }

$FOAM_CASE はケースディレクトリのパス。velocity は以下の内容のファイル。

velocity

(
    (0   (0 0 0))
    (0.01 (10 0 0))
)

"outOfBounds" は、計算時間がリストのデータをはみ出してしまったときの挙動を指定する。次のものが指定できる。

  • clamp: はみ出たら最後の値をそれ以後使う。
  • repeat: データを繰り返す。
  • error: はみ出たら止まる。
  • warn: はみ出たら警告を出す。値は clamp と同じ。

CSV で入力。

    inlet
    {
        type            uniformFixedValue;
        uniformValue    csvFile;
        csvFileCoeffs
        {
            fileName      "$FOAM_CASE/velocity.csv"
            outOfBounds   clamp;
            nHeaderLine   1;
            mergeSeparators no;
            separator     ",";
            refColumn     0;
            componentColumns (1 2 3);
        }
    }

velocity.csv

time,velocity-x,velocity-y,velocity-z
0,0,0,0
0.01,10,0,0

"nHeaderLine" は説明部分の行数 (無視する行数) の指定。"separator" で区切り文字を変更できる。"refColumn" は時間の列番号、"componentColumns" は速度成分それぞれの列番号を指定。

境界条件タイプ "flowRateInletVelocity" などでは、多項式形式でも指定できる。

    inlet
    {
        type            flowRateInletVelocity;
        volumetricFlowRate    polynomial
        (
            (2.54e-2 1)
        );
    }

ここでは流量に 2.54e-2*t を指定している。"(2.54e-2 1)" の 1 つ目の値は係数で、2 つ目の値は変数の指数である。流量に 2.54*t*t を指定したければ、以下のようにすればよい。

    inlet
    {
        type            flowRateInletVelocity;
        volumetricFlowRate    polynomial
        (
            (2.54 2)
        );
    }

実行時コードコンパイルによる方法

OpenFOAM 2.0.0 で実装された実行時コードコンパイル (Run-Time Code Compilation) により、直接時間を参照して非定常境界条件を与えることもできる。

    inlet
    {
        type            codedFixedValue;
        value           uniform (0 0 0);
        redirectType    sineVelocity;
        code
        #{
            fvPatchField<vector> f(
                patch().lookupPatchField<volVectorField, vector>("U")
            );

            const scalar t = this->db().time().timeOutputValue();
            const scalar pi = constant::mathematical::pi;

            forAll(patch().Cf(), i)
            {
                f[i] = vector(10.*sin(2.*pi*t/0.1), 0, 0);
            }

            operator==(f);
        #};
    }

古い情報