ParaViewで揚力、抗力、モーメントの計算
はじめに
普段openFoamを使ってCFDを行っていますが、後からParaViewを使って圧力のデータを積分して揚力、抗力及びモーメントを計算する方法を紹介します。
処理する流れとしては、計算したい領域を抽出→法線ベクトルを取得→calculatorで計算→積分といった感じです。
今回は圧力のみから計算するやり方です。摩擦力も入れる場合は、同様のやり方でできると思います。
準備

適当な円板のようなものに風が当たっているようなものをopenFoamを使って計算し、用意しました。
x方向に風が流れ、上方向がz軸、右方向がy軸となっています。
まずはMesh Regionsを全選択してApplyします。

Filters->Alphabetical->Extract Block


計算したい領域を選択してApply

これで、今回計算する円板を抽出しました。
ここから、フィルターを選んだりするときは、どの階層から入るかによって挙動が変わってくるので要注意です。
今作ったExtractBlock1を選択して、Filters->Alphabetical->GenerateSurfaceNormals

デフォルトではCompute Cell Normalsにチェックが入っていないので、チェックを入れます。

これで、GenerateSurfaceNormals1がExtractBlock1の下にできます。

これで計算の準備が完了です。
揚力及び抗力の計算
GenerateSurfaceNormals1を選択した状態で、左上のCalculatorを選択

Attribute TypeをCellDataに変更し、Result Array Nameを適当にLiftとします。
次に式を入力します。
まずは揚力の計算なので、p*Normals_Zと書きます。
下のScalarsやVectorsの部分を選択すると、入力可能なパラメータが表示されます。

これでApplyを押して、わかりやすくするために、Liftなどと名称を変更します。

抗力についても同様に、式をp*Normals_XとしてApplyを押します。

最後に積分です。
Dragを選択した状態で、Filters->Alphabetical->integrate variables

Applyを押すと、スプレッドシートが表示されます。
AtributeをCell Dataに変更すると、DragとLiftの値が表示されます。
この単位はNです。

モーメントの計算
次にモーメントの計算です。
GenerateSurfaceNormals1を選択した状態でCalculatorを押します。

すると、階層はこのようになります。

今回はAttribute TypeはPoint Dataのままで、Result Array Nameを適当にmomentとつけます。
式は、cross(coords,Normals*p)と入力します。
これでApplyし、階層の名称をmomentなどとします。

momentの階層を選んだ状態で、揚力、抗力のときと同様に、Filters->Alphabetical->integrate variables
Applyを押すと、スプレッドシートが表示されます。
右にスクロールするとmomentという部分があり、そこにx, y, z軸周りのモーメントが計算されています。

Discussion