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
プログラマーズガイド の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 です。
両関数は, 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 です。
1
0
9
3
8
8
4
9
アクセス
富山県立大学へのアクセス方法は,下記サイトをご覧ください。
富山県立大学へのアクセス
最寄り駅は,JR 小杉駅 です。
JR小杉駅南口から徒歩約20分(約2Km),または,
射水市コミュニティバス 「14.小杉駅・太閤山線」に乗車約5分です。
外部リンク:射水市コミュニティバス「14.小杉駅・太閤山線」
<お車>
無料駐車場がご利用いただけます。下記学内マップをご参照ください。
富山県立大学学内マップ
プライバシーポリシー
本サイトでは,Googleによるアクセス解析ツール「Googleアナリティクス」を使用しています。Googleアナリティクスはデータの収集のためにCookieを使用します。データは匿名で収集されており,個人を特定するものではありません。
なお,Cookieを無効にすることで収集を拒否することが出来ます。お使いのブラウザの設定をご確認ください。この規約の詳細は Googleアナリティクスサービス利用規約 や Googleポリシーと規約 をご覧ください。