OpenFOAM関連情報:公開

OpenFOAMのpos(),neg()関数と,その組み合わせによる式の切り替え

OpenFOAM のコード解読中のメンバーから,pos() と neg() 関数について質問がありました。メモしておきます。

両関数は, src/OpenFOAM/primitives/Scalar/Scalar.H で定義されています。

https://github.com/OpenFOAM/OpenFOAM-2.3.x/blob/master/src/OpenFOAM/primitives/Scalar/Scalar.H

inline Scalar pos(const Scalar s)
{
    return(s>=0)?1:0;
}

inline Scalar neg(const Scalar s)
{
    return(s<0)?1:0;
}

プログラマーズガイド の1.4.1 Algebraic tensor operations in OpenFOAM にも説明が記載されています。

pos関数では,引数となるスカラー値が0以上であれば1が戻り,そうでなければ0が戻ります。つまり, s>=0 なら pos(s) =1,s<0 なら pos(s) =0 です。

同様に,neg関数では,引数となるスカラー値が0より小さければ1が戻り,そうでなければ0が戻ります。つまり, s<0 なら neg(s) =1,s>=0 なら neg(s) =0 です。

この両者を組み合わせて,スカラー値 s の値によって式を切り替えるような使い方がされています。

例えば,
    A = pos( s - 0.5 ) * functionPos  + neg( s - 0.5 ) * functionNeg
のようなものです。
この場合,s>=0.5 であれば,第1項の A = functionPos となります。
s<0.5 では,A = functionNeg です。
0