背景・目的
よくEHL(弾性流体潤滑)の計算ソフトで可視化の際に膜厚をコンタの色だけでなく領域の変形で視覚的に膜厚の分布を見やすくしている結果処理を見かけるが、そういえばOpenFOAMのFinite Area Thin Filmの膜厚も可視化できるかなと思ったのでやってみた。
手法の検討
可視化はParaViewを使用することとする。ParaViewで変形を扱うにはWarpByVectorであるが字の通りベクトルデータを対象にしているため、膜厚のようなスカラーデータを入力にすることができない。そのため膜厚のベクトルデータにしないといけないが、手動でデジタル値からベクトルデータに変換するのはやりたくないので、ParaViewの機能で何とかすることを考える。
この場合、簡単に考えると膜厚データ×何かでベクトルデータにするのが簡単そうだということで、Calculatorを使って膜厚とベクトルデータを掛け合わせることをまず考えた。次に膜厚に方向があるとするとそれは膜の表面の方向であると考え、ParaViewで法線ベクトルを作る方法を探していると、GenerateSurfaceNormalsというフィルターがあった。(これはサーフェースデータに対して法線ベクトルを計算し、データとして追加してくれるフィルターであるが、OpenFOAMのCellデータに対しては適用できないため、いったんExtractSurfaceしてから適用する必要がある。)Normalsの方向はGryphで確認しておいたほうが良い。
ここで、OpenFOAMでpitzDailyWithSprinklersなどのケースではFiniteAreaの結果をParaViewで表示するためにfoamToVTKでVTKデータに落としてから読み込むが、その場合、法線のデータがpointDataでVTKのデータはCellDataになっているので、掛け算するためにCellDatatoPointDataを実行しておく必要がある。
あとはCalculatorでNormals*hf_filmの変数を作って、WarpByVectorで表示すればよい。(法線方向によって-1を掛ける)
可視化の実行結果
Pipeline Browserはこのような形になった。
次に可視化結果を示す。
狙い通りの結果となった。
全体のイメージをわかりやすくするため粒子や領域の枠を追加した動画も参考に掲載する。
まとめ
ParaViewの機能を探すのに少し手間取ったが、処理のイメージは頭の中で組み立てられていたので、容易に実行出来てよかった。
視覚的にわかりやすい可視化は誰かへの説明という観点もあるが、自分の理解のためにもなるのでこういった表示手法はストックしておきたい。