Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Jupyter NotebookでOpenFOAMの結果をインタラクティブに可視化した

はじめに

Jupyter Notebookで3Dデータ(VTK)をクリクリ可視化するK3D-Jupyrerについて、概説します。

OpenDreamKitのK3Dの紹介ページがデモページになっている。興味を覚えた方はお進みください

環境(サーバー)

Python 3.5.5 (anaconda)
OpenFOAM v6.0
Ubuntu 16.04.3 LTS (Xenial Xerus)

各パッケージの情報

Name: vtk
Version: 8.1.0
Summary: VTK is an open-source toolkit for 3D computer graphics, image processing, and visualization
Home-page: https://vtk.org/
Author: VTK Community
Author-email: vtk-developers@vtk.org
License: BSD
Location: /home/ubuntu/.pyenv/versions/anaconda3-5.0.1/envs/py35/lib/python3.5/site-packages
Requires: 
Required-by: pygem
---
Name: K3D
Version: 2.4.20
Summary: Jupyter notebook extension for 3D visualization.
Home-page: http://jupyter.org
Author: k3d team
Author-email: artur.trzesiok@gmail.com
License: MIT
Location: /home/ubuntu/.pyenv/versions/anaconda3-5.0.1/envs/py35/lib/python3.5/site-packages
Requires: traittypes, numpy, ipydatawidgets, traitlets, ipywidgets
Required-by: 

K3D-jupyter

インストール

公式通り実行。ただJupyter labのExtensionとしてインストールができなかった。
まだlabは使ったことがないのでインストールせず。(未解決、、、)

コメント頂きました。しっかり待てばJupyter labのExtensionもインストールできるようです

Terminal
pip install k3d
jupyter nbextension install --py --sys-prefix k3d
jupyter nbextension enable --py --sys-prefix k3d
jupyter labextension install k3d # <- 時間がかかる。辛抱強く待つ

Jupyter Notebookの起動

OpenFOAMの環境変数を読み込んだ状態でJupyter Notebookを起動する

Terminal
source /opt/openfoam6/etc/bashrc
nohup jupyter notebook --notebook-dir=~/ >/dev/null 2>&1 &

起動したJupyter Notebook Serverにアクセス。
適当な場所で新規ノートブックを作成
image.png

以降、Jupyter Notebook内で実行する

 OpenFOAMチュートリアルの実行

1つ目のセルで下記を実行する

Notebook
%%bash
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily ./
cd ./pitzDaily
blockMesh >log.blockMesh 2>&1
simpleFoam >log.simpleFoam 2>&1
tree -L 1

出力。ちゃんと計算できている

Output
.
├── 0
├── 100
├── 200
├── 288
├── constant
├── log.blockMesh
├── log.simpleFoam
├── postProcessing
└── system

7 directories, 2 files

vtk処理

K3Dに必要な処理は、reader,filterのみ。
mapper,actor,render,windowはK3Dにしてもらう。

OpenFOAMの読み込み(vtkOpenFOAMReader)については
PyQt5とvtkを使ってOpenFOAMの結果を可視化してみたを参考に、一部流用させていただく。
以下をNotebookの2つめのセルで下記を実行。

Notebook
filename = "./pitzDaily/system/controlDict"

#Readerの準備
reader = vtk.vtkOpenFOAMReader()
reader.SetFileName(filename)
reader.CreateCellToPointOn()
reader.DecomposePolyhedraOn()
reader.EnableAllCellArrays()
reader.EnableAllPatchArrays()
reader.Update() #データの読み込み

tArray =vtk_to_numpy(reader.GetTimeValues())    #出力ファイルの時間を格納
reader.UpdateTimeStep(tArray[-1])               #最新の時間288を出力設定

reader.Update()#最新の時間を読み込み

rgo = reader.GetOutput() #Readerの出力を格納(vtkMultiBlockDataSetオブジェクト)
usg = rgo.GetBlock(0) #vtkMultiBlockDataSetの扱い難しいのでvtkUnstructuredGridを取り出し

gf = vtk.vtkGeometryFilter() 
gf.SetInputData(usg) #
gf.Update() #GeometoryFilterの読み込み

K3Dで可視化

いよいよ可視化。色が必要ならcolor_attributeのオプション引数が必要。
必要であれば、流線,断面,ベクトルなど複数のvtkデータを用意してplotに追加(+=)してあげる

Notebook
import k3d

# plotの準備
plot = k3d.plot()

# データの準備
pitzDaily = k3d.vtk_poly_data(gf.GetOutput(), 
                              color_attribute=('p', -10, 10), 
                              color_map=k3d.colormaps.paraview_color_maps.Warm_to_Cool)
# データをplotに追加
plot += pitzDaily
# 表示
plot.display()

出力結果

image.png

尚、GUIのマウス操作は下記の通り
* 左ドラッグで回転
* ホイールでズーム
* 右ドラッグでパン

描写領域の右上にあるControlsは以下のの機能が便利(抜粋)

  • Controls
    • Screenshot: 現在の絵をpngにしてダウンロード
    • Snapshot: 可視化データを埋め込んだHTMLファイルをダウンロード。
      (完全にオフラインで利用する場合はHTML内のJavaScriptもダウンロードしてHTMLファイルを書き換えればOK)
    • Detach widget: 別ウィンド表示。ウィンドウを閉じればNotebookに戻る
    • Full screen: フルスクリーン。Escで戻る
    • lighting: 明るさは見やすさ
    • Clipping planes: クリッピングができる。
      (k3d.vtk_poly_dataの描写データはサーフェイス化されているのか、内部が中空。。。)
  • Objects -> Mesh #?
    • wireframe: ワイヤーフレーム表示。メッシュサイズによっては近づかないとわからない
    • vmin,vmax: 色表示の上下限
    • visible: 表示、非表示の切り替え

特に、Snapshotが秀逸。解析結果の配布、閲覧に使える

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
17
Help us understand the problem. What are the problem?