Vreman model の実装について

164 views
Skip to first unread message

Kogawa

unread,
Sep 14, 2013, 6:46:30 AM9/14/13
to open...@googlegroups.com
いつも本グループで大変お世話になっています.kogawaと申します.

今回下記のURLで議論されているDynamic 乱流モデルの一種のVreman modelの実装を図ろうとしています.
(http://www.cfd-online.com/Forums/openfoam-programming-development/122711-implement-les-turbulence-model.html)

上記URLでは nuSgsの右辺 a(gradU)の項が0になってしまい計算が発散するという問題について議論がなされています.
この問題を解決するために,max演算子を用いてaが0にならないようにする方法が提案されています.

ためしにこの方法で自分のケースについて計算をおこなったところ,Pimpleの二回めの圧力計算時に計算の発散がおこってしまいました.
おそらく上記で述べた方法では問題が解決されていないように思えます.

Vremanモデルを用いた数値解析の論文を検索してみたとろ,
nuSgsの分子の項であるBbeta(gradU)が1E-8以下になるような場合にはnuSgs=0となるような処理が提案されていました.

そこで今回このようなBbeta(gradU)のスカラー値を参照してこの値が1E-8の場合にはnuSgs=0となるようなプログラムの作成を試みようと思っております.

ためしにプログラムを変更し,添付したファイルのVreman.CでscalarFieldの値を参照してscalar値に代入しようとしてみたのですが,下記のようなエラーがででしまいます.

エラーメッセージ
cannot convert ‘Foam::tmp<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> >’ to ‘Foam::scalar’ in initialization

これはScalarFieldからScalarへの変換うまくができていないのが原因なのですが,Openfoamにはこのような変換ができるような演算子が含まれているのでしょうか.
もし知っている方がいましたらご助言いただけないでしょうか.
以上よろしくお願い致します.

kogawa



Vreman.zip

ohbuchi

unread,
Sep 14, 2013, 5:24:45 PM9/14/13
to open...@googlegroups.com
こんにちは。
セルごとに比較してnuSgsを計算するのであれば、下記の様にしたらどうでしょうか?
コンパイルは通りましたが、動作チェックまではしていません。ご参考まで。

void Vreman::updateSubGridScaleFields(const volTensorField& gradU)
{
    volScalarField small2_(Bbeta(gradU));

    forAll(nuSgs_, celli)
    {
        if(small2_[celli] > 1E-8 )
        {
            nuSgs_[celli]=0.1*sqr(delta()[celli])*sqrt(small2_[celli])/(mag(gradU[celli]));
        }
        else
        {
            nuSgs_[celli]=0;
        } 
    }
    nuSgs_.correctBoundaryConditions();
}

2013年9月14日土曜日 19時46分30秒 UTC+9 Kogawa:

Kogawa

unread,
Sep 15, 2013, 2:20:04 AM9/15/13
to open...@googlegroups.com
ohbuchi さま

ご助言ありがとうございます.さっそくご提案されたこの方法を試してみて,発散がないかどうか調査してみます.
よろしくお願い致します.

kogawa



2013年9月15日日曜日 6時24分45秒 UTC+9 ohbuchi:
Reply all
Reply to author
Forward
0 new messages