投稿日時: 2014/06/06
S Nakagawa
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 です。