はじめに
先日オープンCAEシンポジウムでGetFEM++のトレーニングの講師をやらせていただきました
🔊#オープンCAE シンポジウム2019で #GetFEM++のトレーニングを行います。
— ゆうげん🌎💡@2月29日&3月1日 技術書典 (@tkoyama010) November 14, 2019
✅タイトル データー分析と連携できる有限要素法解析ソフト GetFEM++トレーニング
✅日時 12月19日(木)10:00 - 11:30
このトレーニングでは、環境構築によるトラブルを避けるためGoogleColaboratoryを使用してオンラインで作業をしました
✅資料について
— ゆうげん🌎💡@2月29日&3月1日 技術書典 (@tkoyama010) December 1, 2019
🌐Google Colaboratoryで起動をして説明します⬇https://t.co/aAotZVdMwd
VTKで出力した結果を #mayavi2 で可視化します🔲
mayavi2については説明しませんが、以下で詳細を確認できます⬇https://t.co/pGxX85rvCg
この資料を作る際、vtkの解析結果をmayavi2と呼ばれる可視化ツールを使用してGoogleColaboratory上に画像として出力しています
この画像を作る際、トラブルシューティングが必要であったため、ここで紹介します
インストール
GoogleColaboratoryを開き以下のコマンドでインストールをします。簡単ですね
!pip install mayavi
コマンド実行
mayavi2の実行にはディスプレイ環境が必要です。Google Colaboratoryではディスプレイ環境が提供されていないので仮想ディスプレイを設定します。
!apt-get -qq -y install xvfb
!pip install pyvirtualdisplay
インストール後、以下のように仮想ディスプレイを作成します。
import os
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1024, 480))
display.start()
os.environ["DISPLAY"] = ":" + str(display.display) + "." + str(display.screen)
メッシュ画像を表示するため、先にファイルmesh.vtk
をColaboratory上にアップロードしておきます。
!mayavi2 --offscreen -d mesh.vtk -m Axes -f ExtractEdges -m Surface \
-s "scene.save('mesh.png', size=(700, 500))"
mayaviはコマンドラインに便利なオプションがついています。そのため、簡単なプロットであれば、コマンドラインのみで実行可能です。オプションの詳細についてはこちらを参照してください
ただし、今の状態でmayaviを実行するとエラーが発生します。
IOError: [Errno 2] No such file or directory: '/tmp/.enthought/mayavi_e3/mayavi.log'
ログファイルのファイルかディレクトリが存在しないというエラーですので、先に作成をしてから実行します。
!mkdir /tmp/.enthought
!mkdir /tmp/.enthought/mayavi_e3
ユーザーがログファイルのフォルダを作成するのはスマートではないので、mayavi2のリポジトリにプルリクエストを作成しました。
— ゆうげん🌎💡@2月29日&3月1日 技術書典 (@tkoyama010) December 22, 2019実行後、再度mayaviを実行すると画像ファイル `mesh.png` が作成されます。この画像をGoogle Colaboratory上に表示すれば、メッシュを可視化することができます。
from IPython.display import Image, display_png
display_png(Image("mesh.png"))
Pythonを使った可視化
mayaviのmlab pipelineを使えばpythonでvtkを可視化することもできます。ただし、Python3でのプロットではエラーが発生しているため現在調査中ですPython2では問題なく動作していたため、Python3特有の問題と予想しています。
まとめ
GoogleColaboratoryでmayavi2を使うのはトラブルが多そうです一方でmayavi2は3次元の可視化の機能が充実したvisualizerですので問題を解決すれば可能性が広がると思います