0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

出口温度に応じて流入温度を決定する(OpenFOAM)

Posted at

はじめに

OpenFOAMの境界条件のexprFixedValueを使用して、流出境界の平均温度から流入温度を決定します。
流出境界の平均温度は、OpenFOAMのexpressions syntaxの機能を使って計算しています。

サンプルモデル

出口温度が20℃になるように調整しながら、流入温度を変更しています。

Temperature.gif

出口温度(outlet)と流入温度(inlet)の履歴のグラフです。複雑な制御1はしていないので、一度出口温度がオーバーシュートしていますが、最終的には20℃に近づいています。
graph.png

こちらのsample_averagedOutletにOpenFOAM v2212で動作確認をしたサンプルモデルが置いてあります2

inletパッチの温度の境界条件

流入境界であるinletパッチでの温度の境界条件は、以下のように、exprFixedValue 3 を使用しています。

T(inletパッチの境界条件の部分)
    inlet
    {
        type            exprFixedValue;

        variables
        (
            "relax = 0.005"
            "currentT = weightAverage(T)"
            "outletT{outlet} = weightAverage(T)"
            "nextT = currentT + relax*(293.15 - outletT)"
        );

        valueExpr       "nextT";

        value           uniform 293.15;
    }

これ以降では、このexprFixedValueの各設定項目について説明します。

各変数の定義と計算(variables)

variablesの部分で各変数(パラメータ)の定義と計算を行っています。

            "relax = 0.005"

後で使用するrelaxという変数に値を代入しています。これは、流入温度変化の緩和係数に相当していて、P制御のゲインと考えることもできます。

            "currentT = weightAverage(T)"

この境界条件を設定している境界パッチinletでの平均温度を計算して、currentTという変数に代入しています。
weightAverage(...)は、expressions syntaxの関数です。カッコの中の引数には、定義されているフィールドの名前を記述します。
このような関数には、その他にも面積で重み付けをした合計(面積積分)を表すweightSumなどもあります。

            "outletT{outlet} = weightAverage(T)"

先ほどと同じように、今度は流出境界のパッチoutletの平均温度を計算して、outletTという変数に代入しています。
左辺側の変数に{パッチ名}を加えることで、指定したパッチでの値を計算することができます。
個体熱連成計算の場合で、個体など他の領域の温度を参照する場合には、{パッチ名/領域名}という書式を使います。

            "nextT = currentT + relax*(293.15 - outletT)"

設定する温度の値を計算してnextTという変数に代入しています。
流出境界の目標の温度20℃(293.15K)と計算した流出境界の現在の平均温度outletTとの偏差を計算して、それに緩和係数(ゲイン)を乗じることで現在の温度からの変化量を求めています。

境界条件値の設定(valueExpr)

valueExprで境界条件値を設定します。ここでは、variablesで計算したnextTの値を設定しています。

        valueExpr       "nextT";

おわりに

このようにOpenFOAMでもexpressions syntaxの機能を使用すれば、OpenFOAMのソースコードを書かなくても境界条件の設定だけで、他の境界条件の値を取得して、それに応じた値を設定できます。
expressions syntaxについは、公式にもここで説明されていますが、ここに書かれている以外にも説明されていない機能が実装されています。ただし、まだバグや思いもよらない制限などがありそうなので、使う場合にはよく検証を行ってから使ったほうがよいです。

  1. この例はP制御に相当します。

  2. 同じレポジトリにある「サンプル2:sample_probe_PID」は、PID制御のサンプルです。
    こちらに説明の記事があります。

  3. uniformFixedValueの境界条件を使って、expressionのタイプを指定しても同様の設定をすることができます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?