計算力学技術者試験の勉強のため、Pythonで使える有限要素法ライブラリGetFEMを使ってみました。GetFEMは通常Linux環境が必要ですが、WindowsでもWSLを使えばLinux環境を手にいれることができます。ここではWindows機でGetFEMを使う時のメモを紹介します。
こんにちは。wat(@watlablog)です。ここではWindowsでLinuxを動かし、Pythonで動作する有限要素法ライブラリGetFEMを使ってみた事例を紹介します!
GetFEMを使うモチベーション
計算力学技術者試験のためにコードで学習したい
筆者watは2023年現在、2年前くらいより計算力学技術者試験を毎年受けています。毎年というのは別に落ちているわけではなくて、振動1、2級、熱流体2級と複数分野取得してきたからです(以下記事を参考にしてください)。
・計算力学技術者試験1級と2級(振動)を同時に受験して合格した感想
・計算力学技術者試験の熱流体2級に合格するのに必要な勉強量
複数分野を受けているのは機械系エンジニアの仕事が分野を横断するため、全分野の知識を取り入れたいと思ったのがきっかけです。
今年は固体力学分野を受験する予定で、ちょうど良い学習ツールを吟味していたところでした。
過去の振動・熱流体を受験した経験から、プログラミングで結果を確かめていくことが技術的な要素の理解を深める最適な学習方法だと思います。
Pythonで有限要素法を体験したい
当ブログはプログラミング系の内容を扱っているので、できればPythonを使って固体力学分野の学習をしたいと思いました。
最近ではLS-DYNAもStudent版が出ていたり、フリーの3D-CADソフトや解析ソフトも充実してきていますが、やはりPythonistaとしてはPythonで解析してみたいです。
そこでPythonで有限要素法の計算ができるGetFEMに興味を持ちました。
GetFEMの公式情報と注意点
公式ページリンク
GetFEMには以下の公式ページがあります。まずは1次情報を確認しましょう。
・公式ドキュメント:https://getfem.readthedocs.io/ja/latest/
・GitHub:https://github.com/getfem-doc
参考の入門書籍
GetFEMの入門者向け参考書籍に「Pythonによる有限要素法実装ノート」があります。このブログの筆者watも少しだけ参加しているので、是非お手にとってみてください。
Linux環境が必要
2023年現時点でGetFEMの動作にはLinux環境が必要です。Linuxはオープンソースで使えるOSです。GetFEMはLinuxディストリビューションであるUbuntu20.04で動作が保証されています。
ただ一般的にはLinuxのコンピュータを普段使いしているしている人はやや逸般的だと思うので、今回はWindowsで使う方法についてやってみた結果を紹介したいと思います。
WindowsでGetFEMを使えるようにする方法
動作環境
このページの内容は以下のWindows環境で動作を確認しました。
Windows | OS | Windows10 Home 64bit 19045.3324 |
---|---|---|
CPU | Intel 11th Core i7-11800H:2.3[GHz] | |
メモリ | 16[GB] |
WSLを有効化する
最近のWindowsはWSL(Windows Subsystem for Linux)という機能があります。僕のPCは初期的にWSL2が入っていましたが、場合によってはWSL1が入っているようです。WSLを使うとWindowsマシンにLinux環境を再現できます。まずはコントロールパネルからプログラムの項目を開き、Windowsの機能の有効化または無効化を選択しましょう。
次にLinux用 Windows サブシステムにチェックを入れます。
仮想マシンプラットフォームを有効化する
画面をスクロールして仮想マシン プラットフォームにもチェックをつけます。
Ubuntuをインストールする
Microsoft Storeを開き、Ubuntuをインストールします。今回は無印を選択しましたが、バージョンは20.04がインストールされました。
インストールされたUbuntuを起動するとUbuntuのコマンドライン(Windowsにおけるコマンドプロンプト、Macにおけるターミナル)が開き、Enter new UNIX usernameと聞かれます。ここにUbuntuで使用するユーザーネームを入力してください。
次にパスワードを入力すれば準備完了です!
Python3とpipのインストール
仮にWindowsにPythonをインストールしていたとしても、今インストールしたUbuntuには入っていません。引き続きコマンドラインに以下コマンドを入力・実行してUbuntuにPython3とpipをインストールしましょう。
1 |
sudo apt install python3 python3-pip -y |
Pythonにパスを通すために以下のコマンドを実行します。
1 |
export PATH=”$HOME/.local/bin:$PATH” |
JupyterLabのインストール
IDE(統合開発環境)は何でも良いですが、手っ取り早くて初心者に適したブラウザでプログラミングができるJupyterLabを使いましょう。以下のコマンドを実行するとインストールできます。
1 |
pip3 install jupyterlab |
WSL2で起動したUbuntuでJupyterLabを使う方法
jupyter labというコマンドを実行すると通常は自動でブラウザが開きますが、今回の環境(WSLでUbuntuを呼び出してJupyterLabを起動する)ではブラウザが開きません。しかし動作不良というわけではなく、ちゃんとJupyterLabは起動しています。
コマンド実行後に出てくる以下の黄色枠内のURLをコピーして、Windowsのブラウザに入力すればOK!
画面にNo web browser found: Error('could not locate runnable browser').と書いてあるので、Webブラウザをインストールしておけば良いのかもしれませんが、WindowsのWSLを使っているので、今回の方法で十分かなと思いました。
ライブラリのインストール
それではGetFEMを使うために以下のコマンドを実行してライブラリをインストールしましょう。PyVistaは結果の可視化ライブラリです。
1 2 |
sudo apt-get install python3-getfem++ pip install pyvista |
エラーの回避で必要だったライブラリをインストール(場合による?)
これは僕の環境だからかもしれませんが、このままGetFEMのチュートリアルを実行すると、以下のエラーが出ました。解決のために調べたリンクを添えて紹介します。
- ImportError: libGL.so.1: cannot open shared object file: No such file or directory
https://stackoverflow.com/questions/55313610/importerror-libgl-so-1-cannot-open-shared-object-file-no-such-file-or-directo - ImportError: libXrender.so.1: cannot open shared object file: No such file or directory
https://github.com/albumentations-team/albumentations/issues/415
エラーが本当に出ることを確認したら(出ない場合は依存関係を崩すかもしれないので)、以下のコマンドを実行して2つの追加ライブラリを入れておきましょう。
1 2 |
sudo apt install libgl1-mesa-glx sudo apt-get install libxrender1 |
GetFEM入門書のチュートリアルを実行してみた結果
この記事では書籍に記載されたコードをただ実行してみて動作確認をしました。書籍のコードを全て公開することはできませんので、詳細は書籍をご購入ください。
計算はできたがPyVistaでモデルが表示されない
僕の環境では上記の環境構築を実施した結果、コードは全てエラーなく実行完了していました。しかしPyVistaで可視化されるはずのモデルが見えないという結果になってしまいました(下図)。
最終的にはこの後記載する方法で可視化は確かめました。しかし色々調べたのですがまだ原因がわからず、自分の環境だけで起こるのかどうかも不明です。僕のPCがNVIDIAのGeForceRTXを積んでいるので、WSLのようなGPUアクセスが制限されるソフトとの相性が良くないのかも知れません(←ChatGPT4のアドバイスをそのまま書きました)。
レンダリング系のエラーは知見がないので、このページを見た知見者がコメント欄(記事の下)に情報を投稿してくれることを祈りましょう。。
ちなみに、保存されたvtkモデルをmatplotlibだけを使って可視化する場合は正常に動作しました(下図は2D解析の結果です)。やはり基本の描画自体は動いていて、レンダラーが機能していない→PCのグラフィック関係との通信がうまくいっていないと考えるのが妥当かも知れません。
解決法:別のPyVista環境で可視化する
現時点のGetFEMではvtkモデルをファイルに保存してからPyVistaで可視化するという方法をとっています。そのためWSLを使わない別の環境で可視化すれば解決します(WSLを動かしているWindowsのフロントでPythonを動かしたり、Mac環境のPythonを使ったり)。
1Dばねモデルの解析結果
こちらは書籍最初の解析結果(1Dのばねモデル)をMacで可視化した結果です。以下のコードで可視化できます。
1 2 3 4 5 6 |
import pyvista as pv pv.global_theme.font.color = 'black' m = pv.read("mfu.vtk") print(m) m.plot(cmap="jet", background="white", show_edges=True, cpos="xy", scalars="U") |
2D梁モデルの解析結果
そして下図は2Dの梁に荷重をかけた時の解析結果を可視化した図です。書籍と同様に問題なく計算がされていることを確認しました。
1 2 3 4 5 6 7 |
import pyvista as pv pv.global_theme.font.color = 'black' m = pv.read("mfu.vtk") w = m.warp_by_vector("U", factor=100) w.plot(cmap="jet", background="white", show_edges=True, cpos="xy", scalars="U") |
まとめ
このページではPythonで有限要素法を使うことができるGetFEMをWindowsで使う方法を紹介しました。理想はGetFEMをLinux環境で使うのが良いと思いますが、純粋なLinux環境のPCを持っている人が少ないと思ったのでこの記事を書いてみました。
WindowsではWSL(Windows Subsystem for Linux)を使うことでLinux環境を仮想的に使用できます。この環境でUbuntuをインストールすればGetFEMを使えることを確認しました。
ただし可視化部分はWSLと相性が悪い可能性もあり(GPUだけかも知れませんが)、今回、結果の可視化には別環境のPythonとPyVistaを使用しました。
とにかくこれで手持ちのPCでGetFEMを動かすことに成功したため、内容は難しそうですが有限要素法の学習ツールとして使えそうです。
ちなみにLinuxの創始者であるリーナス・トーバルズ氏の書籍が日本語でも出版されています。この記事とは全然関係ないですが、楽しんでプログラミングしている人にはおすすめします。
Windows環境でGetFEMを使えることがわかったので、皆さんも是非GetFEMで遊んでみてください!
X(旧Twitter)でも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!