16. ターゲット:計算流体力学(Computational Fluid Dynamics
16.1. はじめに
このチュートリアルでは、cfd データセットの一般的な可視化テクニックを紹介します。ここでは、Paraview の File/ Open/ Examples にある disk_out_ref.ex2 というデータセットを使用します。このデータセットには、V というベクトル場が含まれています。
16.2. スライス
disk_out_ref.ex2を開きます。
Apply を実行します。
+X
Filters → Common → Slice を選択します。
Apply を実行します。
Show Plane の選択を解除します。
Coloring を v に設定します。
パイプラインブラウザで、disk_out_ref.ex2 を選択します。
Filters → Common → Slice を選択します。
Y Normal.
Apply を実行します。
Show Plane の選択を解除します。
Coloring を pres に設定します。
View → Color Map Editor → Presets (ハートのついた小さな袋) → Turbo.
マウスでスライスを回転させ、両方の面が見えるようにします。
Edit → Reset Session です。また、色を変えていた場所のすぐ上に、ショートカットアイコンがあります。緑色の反時計回りの蛇が尻尾を食べているように見えます。

16.3. ストリームトレーサー - ラインとチューブ
disk_out_ref.ex2を開きます。
Apply を実行します。
+X
Filters → Common → Stream Tracer を選択します。
v.
Seed Type を Point Cloud に設定します。
Show Sphere のチェックをはずします。
Coloring を v に設定します。
Apply を実行します。
線は面ほどきれいに発色しません。それぞれの流線の周りにチューブフィルタを追加してみましょう。
Filters → Search を選択します。
タイプ Tube にします。
Apply を実行します。
さて、パーティクルがどの方向に移動しているのかを知りたい。そこで、グリフフィルタを使用します。グリフフィルタはチューブではなく、流線上に配置することに注意してください。
パイプラインブラウザで StreamTracer1 を選択します。
Filters → Common → Glyph を選択します。
Glyph Type を Cone に設定します。
Orientation Array を v に設定します。
Scale Array を v に設定します。
!非常に重要!: Scale Factor で、右側のリサイクルボタンを選択します。
Apply を実行します。
Coloring を temp に設定します。
View → Color Map Editor → Presets (ハートのついた小さな封筒) → Black Body Radiation.
このクールな画像をスクリーンショットとして保存しましょう。
File → Save Screenshot.
ファイル名を追加します。
OK を押します。
OK を押します。
Edit → Reset Session.

16.4. カスタムソースを使ったストリームトレーサー
任意のソースからストリームトレーサーを作成したいと考えています。これは、線、スプライン、円、楕円、その他あらゆる曲線です。極端な例としては、平面で切断された円柱が挙げられます。
disk_out_ref.ex2を開きます。
Apply を実行します。
+X
vtkBlockColors を Solid Color に設定します。
Opacity を 0.3 に設定します。
Sources/Alphabetical/Elipse.
Center を 0,0,7 に設定します。
Major Radius Vector を 3,0,0 に設定します。
Ratio を 0.3 に設定します。
Apply を実行します。
Filters → Search を選択します。
タイプ Tube にします。
Apply を実行します。
Pipeline Browser で disk_out_ref.ex2 を選択します。
Filters → Alphabetical → Stream Tracer with Custom Source を選択します。
Seed Source を Elipse に設定します。
Apply を実行します。
Coloring を Solid Color に設定します。
下の画像は、ストリームトレーサーにラインやチューブを加えたものと、ストリームトレーサーにカスタムソースを加えたものを合体させたものです。よりきれいに見えるように色も変えてみました。興味があれば、複製はユーザーにお任せします。

16.5. スライスに垂直なグリフ
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
+X.
ハーフスライスを作成しましょう。これはグリフのseed planeとして使用されます。
Filters → Common → Slice を選択します。
Z Normal.
原点を 0, 0, 5 に設定します。
Show Plane のチェックをはずします。
Apply を実行します。
Filters → Common → Clip を選択します。
Show Plane のチェックをはずします。
Apply を実行します。
次に、グリフを適用します。
Filters → Common → Glyph を選択します。
Glyph Type を Arrow に設定します。
Orientation Array を v に設定します。
Scale Array を v に設定します。
!非常に重要!: Scale Factor で、右側のリサイクルボタンを選択します。
.5X.
.5X.
Apply を実行します。
Coloring を v に設定します。
Magnitude を Z に変更します。
このグリフを元のデータセットに戻して、文脈を整理してみよう。
パイプラインブラウザで disk_out_ref.ex2 を選択します。
Representation を Wireframe に設定します。
pipeline browser で、disk_out_ref.ex2 の隣にある eball をクリックします。
Opacity を 0.3 に設定します。
マウスでグリフベクターにズームインすることができます。

16.6. 流体の流れ
速度プロファイルを表示するには、データセットを線でサンプリングし、この線からグリフを作成する必要があります。これはParaViewのテクニック、すなわちPlot over Lineフィルタを使って行うことができます。なお、ParaView 5.11以降では、Resample to Lineフィルタが追加される予定です。
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
一本の線の上にサンプルを置くことができます。
Filters → Data Analysis → Plot over Line を選択します。
Y Axis.
Point1 と Point2 の Z 成分を 1 に変更します。
Resolution を 40 に変更します。
Apply を実行します。
LineChartView を閉じます。
Pipeline Browser で、disk_out_ref.ex2 の表示設定をオフにします。
これで流体を貫く線ができあがりました。Vの負のZ成分(Vとは逆方向の線)を計算しましょう。そうすると、2つのプロファイルができます。1つはVで、もう1つはVzです。
Filter → Common → Calculator を設定します。
Result を Vz に変更します。
Set Expression to 0*iHat+0*jHat+-v_Z*kHat.
Apply を実行します。
ここで、2つのグリフを作成します。1つは Calculator フィルタから、もう1つは Plot over Line フィルタから直接作成します。
パイプラインブラウザでは、Calculator1 がハイライトされているはずです。
Filters → Common → Glyph を選択します。
Glyph Type を Arrow に設定します。
Orientation Array を Vz に設定します。
Scale Array を Vz に設定します。
!非常に重要!: Scale Factor で、右側のリサイクルボタンを選択します。
.5X.
.5X.
Apply を実行します。
Color Editor のアイコンをクリックします。
カラーをオレンジに変更します。
Apply を実行します。
パイプラインブラウザで、Plot over Line フィルタを選択します。
Filters → Common → Glyph を選択します。
Glyph Type を Arrow に設定します。
Orientation Array を v に設定します。
Scale Array を v に設定します。
!非常に重要!: Scale Factor で、右側のリサイクルボタンを選択します。
Apply を実行します。
このグリフを元のデータセットに戻して、文脈を整理してみよう。
パイプラインブラウザで disk_out_ref.ex2 を選択します。
disk_out_ref.ex2 の横にある eyeball をクリックします。
Opacity を 0.3 に設定します。
ちょっといい画像を作るために、ビューを水平に分割し、この可視化を横からも表示することにします。

ラインからサンプリングしたデータを.csvファイルに書き出し、そこでExcelなどのツールで後処理をすることができます。以下にその方法を示します。
パイプラインブラウザで PlotOverLine を選択します。
縦型分割画面。
Spreadsheet view.
ここで、Export Scene のアイコンをクリックし、Spreadsheet を .csv file に書き出します。
このクールな画像をスクリーンショットとして保存しましょう。
File → Save Screenshot.
ファイル名を追加します。
OK を押します。
両方のビューを保存したい。Save All Views をクリックします。
OK を押します。

16.7. 流体による2Dプロット
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
+X.
Filters → Data Analysis → Plot over Line を選択します。
Y Axis.
Point1 と Point2 の Z 成分を 4 に変更します。
Apply を実行します。
Properties Tab で、v_Z 以外の変数をオフにします。
左の view である RenderView をクリックします。
パイプラインブラウザで disk_out_ref.ex2 を選択します。
Opacity を 0.3 に設定します。

16.8. スライス上のContour
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
+X.
Filter → Common → Slice を選択します。
Show Plane のチェックをはずします。
Apply を実行します。
Contourフィルタに必要な大きさです。
Filters → Common → Calculator を選択します。
出力配列名 vMag.
Expression を mag(v) に設定します。
Apply を実行します。
次に、2次元のスライスにContourを描きます。
Filter → Common → Contour を選択します。
vMagのContourです。
Value を削除し、Add a Range of Values のアイコンを使って新しいセットを作成します。
Apply を実行します。
可視化としては、Slice の表示設定をオンにして v で塗り、Contour を Solid Color に変更し、その色を White にするのがよいでしょう。
ここでは、流線、チューブ、グリフ を追加した例を紹介します。

16.9. 勾配、発散、渦度、Q基準
Gradient フィルタ (Advanced Properties タブ) は、Gradient、Divergence、Vorticity、および Q Criterion を提供します。以下は disk_out_ref.ex2 を使用した例です。

16.10. 流体の探索
流体のセルやポイントをプローブする方法は数多くあります。1つは、レンダービューのすぐ上にある Hover Points On と Hover Cells On のアイコンを使う方法です。もう1つは、インタラクティブにセルまたはポイントを選択する方法です。そして、データ検索で、セルまたはポイントラベルをオンにします。さらに、プローブフィルタを使用する方法もあります。ここでは、プローブフィルタの使い方を説明します。
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
+X.
Filters → Common → Clip を選択します。
Show Plane のチェックをはずします。
反転 のチェックをはずします。
Apply を実行します。
Probe フィルタは、Auto Apply をオンにすると、より効果的に機能します。立方体から木が伸びているようなアイコンです。
Auto Apply オン
Filters → Data Analysis → Probe を選択します。
必要であれば、RenderView ウィンドウを選択し、フォーカスを与えてください。
ここで、disk_out_ref.ex2 を移動し、プローブされた場所を p キーで更新します。プローブされた データは、スプレッドシートビューに表示されます。

16.11. 静的なベクトル場のアニメーション化
データにベクトル場があれば、静的なデータセットをアニメーション化することができます。私たちの目標は、ベクトルフィールドから流線のセットを作成し、この流線のセット上にポイントを配置し、流線の下にポイントをアニメーション化することです。また、流線のポイントにグリフを追加する予定です。
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
X アイコンをクリックします。
Stream tracer フィルタ。(すでにVでストリームトレーシングを行っています)。
Seed Type を Point Cloud に設定します。
オプション - 不透明度を 0.4 に変更します。
Apply を実行します。
Filter → Common → Contour を選択します。
IntegrationTime でのContour
Apply を実行します。
Filters → Common → Glyph を選択します。
Vectors V.
No Scale Array.
Scale 1.
Glyph Mode を All Points に設定します。
Apply を実行します。
View → Animation View を選択します。
Mode を Sequence に設定します。
No. Frames を 100 に設定します。
青い + の横のプルダウンボックスを Contour に変更します。
青い + をクリックします。なお、スタートは0にするときれいに表示されます。
ここで、再生ボタンをクリックします。
パイプラインブラウザでは、Contourフィルタの表示設定もオフにしています。
動画で保存しましょう。
File → Save Animation.
ファイル名を追加します。
.avi として保存します。
OK を押します。
OK を押します。

16.12. ボリュームレンダリング
流体をボリュームレンダリングされた温度で塗り、火のように見えるようにするつもりです。コンテキストを与えるために、外面を抽出し、disk_out_ref を半分に切り取ります。この外面を黒く塗ることにします。
注意:ボリュームレンダリングは非常にリソースを消費します。サーフェスを使ったデータセットがボリュームレンダリングで詰まって表示されることがあります。解決策は、クラスタのより多くのノードを取得し、より多くのメモリを取得することです。
Edit → Reset Session.
disk_out_ref.ex2を開きます。
Apply を実行します。
Filters → Alphabetical → Extract Surface を選択します。
Apply を実行します。
Filters → Common → Clip を選択します。
Invert の選択を解除します。
Apply を実行します。
Solid Color を black に設定します。
Representation を Wireframe に設定します。
disk_out_ref.ex2を再度開きます。
Apply を実行します。
Coloring を temp に設定します。
Representation を Volume に設定します。
火のように見えることが目的なので、Color Map の設定を細かくしていきます。
View → Color Map Editor を選択します。
presets (ハートマークのついたフォルダのようなもの) を Black Body Radiation に変更します。
カラー伝達関数 (下側の1次元の色のついた線)には、すでに4つのポイントがあるはずです。
オレンジ色の領域にポイントを追加します
ブラックの上部にもう一つ追加します。

Did you know?
ウィンドウ内をクリックすると、カラースケール上にポイントを作成することができます。
カラースケール上のポイントをクリックすると、そのポイントを選択することができます。
ポイント間の移動は、Tab キーと Shift キーで行えます。
deleteキーでポイントを削除することができます。
温度は、黒体曲線の物理法則で設定する必要があります。そこで、advanced ボタンをクリックして、以下のように6点のcolor transfer function values (カラー伝達関数値) を手動で指定します。

不透明度伝達関数 (上の2Dの色のついた線)には、すでに2つのポイントがあるはずです。
以下のように4点追加します。

不透明度には、少し芸術的な要素が必要です。私たちがやろうとしていることは、炎の中のさまざまな温度を示すことです。また、すすが異なる量であることを示したい場合もあります(これはポイント番号1になります)。したがって、6点のopacity transfer function values (不透明度伝達関数値) を以下のように手動で指定します。

最終的にボリュームレンダリングの火はこのように表示されます。
