ParaViewで複素振幅のアニメーション [電子工作・プログラミング]

(追記 2019年10月20日)
「Programmable Filter」の各欄に実際に入力したスクリプトを記載しました。Paraview 5.1.2で動作を確認しています。

----------------------------------

ParaViewで複素振幅のデータを表示するとき、位相(時刻と言っても良いかもしれません)を少しずつ替えながら実部をプロットしてアニメーションにする、というのをやるとイメージが沸いてなかなか良いのですが、これをいざやろうとすると中々苦労しました。

僕の場合では、ParaView(もう少し言うとvtkフォーマット)での複素数データの取扱いが分からなかったので、実部と虚部で2つの系列のデータとして保存してあります。これらに時刻に応じた適当な位相をかけて足してやれば目的の値になるのですが、アニメーション表示時にこの「時刻」を取得するところが本当にわからなかったです。ParaViewには170MB超のpdfのリファレンスがあるのですが、関係すると思われるPython Calculator とか Programmable Filterとかの記述がほとんど無く。Webで断片的な情報を探ることしかできませんでした。で、結局いくつかのページを参照して、Programmable Filerを用いることで望みの動作ができました。

1.https://blog.kitware.com/defining-time-varying-sources-with-paraviews-programmable-source/
2.http://www.paraview.org/Wiki/ParaView/Simple_ParaView_3_Python_Filters
(参考として)3.http://www.paraview.org/Wiki/Python_Programmable_Filter

1,のページによると、(このページはPrograrmmable Sourceのトピックですが)「Script (RequestInformation)」にtime-varying dataである旨の記述をして、ParaViewに時間依存データであることを伝える必要があるようです。今回のケースでは元の計算結果データに情報を追加するので、Programmable Filterを適用します。Programmable Filterには似たような記入欄で「RequestInformation Script」というのがあり、ここに1.のページの「Script (RequestInformation)」と同様の内容を記述しました。注意として、Propertiesウィンドウの小さい歯車を押して、詳細表示にしておかないと「RequestInformation Script」は出てこないようです。

「RequestInformation Script」欄


さらに、2.のページの「Tetrahedra Volume (Filter)」を見るとInputのメッシュに新しいCell Dataを追加する方法がわかるので、これを参考にしながら、時刻に相当する「vtk.vtkStreamingDemandDrivenPipeline.UPDATE_TIME_STEP()」(1.のページに記載あり)を値に持つCell Dataを追加するようにProgrammable Filterの「Script」欄に適宜記述することで、全てのCell Dataに時刻の値を持つデータ(ここでは"time"という名前)を生成することができました。

「Script」欄


Propertiesの「Copy Arrays」にチェックを付ければ、時刻の値と当初のデータの両方を持った状態になりました。後はCalculatorなどで位相をかけた後の値を計算するようにし、ツールバー「VCR Controls」の再生ボタンをクリックすれば、アニメーションが表示されました。


できてしまえば何のことは無いのですが、ハマってたときには「sources → Time Source」とかにだいぶ時間を取られたりしていました。単純なことの割には苦労するものです。内部の動作というか大本のパラダイムを理解できていないからかもしれませんが。ともあれ、やりたいことができて満足です。

8月2日26時35分
fartrip

wave.gif



コメント(0) 

gmsh、ParaView覚え書き [電子工作・プログラミング]

【gmsh】
★周期的な3Dジオメトリを作成したいとき
単純な正方形状メッシュで構わないなら、
→ Transfinite Surface {22};
もしくは、 Transfinite Surface {22} Right;
通常のメッシュ形状が必要なら、
→ Periodic Surface 48 {8,23,16,21} = 44 {6,19,14,17};
※後者だと、borderの設定がよくわからない。特に符号の正負。
※Translate {1, 0, 0} { Duplicata { Surface{22}; } } とかも便利かもしれない

【ParaView】
★Cell Dataに値(変位など)を持つデータを「Warp By Vector」などで変形して表示したり、「Glyph」で矢印を表示したいとき
→フィルタ「Cell Data to Point Data」を適用
※むしろ、変形できない原因がCell Dataだと判ってしまえば、そのまんまのネーミング。

★csvファイルのデータを表示したいとき
→フィルタ「Table to Points」もしくは「Table to Structured Grid」を適用

★離散的なPointデータから、平面をつくりたいとき
→ フィルタ「Delaunay 2D」を適用(未検証ですが)

8月1日25時19分
fartrip
コメント(0)