WindowsのWSL2でPython3/GetFEMを使ってみた

  • このエントリーをはてなブックマークに追加

計算力学技術者試験の勉強のため、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も少しだけ参加しているので、是非お手にとってみてください。

本書は数値解析手法のひとつである有限要素法をPythonによって実装するための方法の解説書です。具体的にはPythonを使って、有限要素法のメッシュ作成やソルバ実行や結果の可視化が、ライブラリを使ってできることを目指します。ただし、Pythonの基礎知識や有限要素法の理論の基礎は本書では扱いません。

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はWSLWindows Subsystem for Linux)という機能があります。僕のPCは初期的にWSL2が入っていましたが、場合によってはWSL1が入っているようです。WSLを使うとWindowsマシンにLinux環境を再現できます。まずはコントロールパネルからプログラムの項目を開き、Windowsの機能の有効化または無効化を選択しましょう。
次にLinux用 Windows サブシステムにチェックを入れます。

WSLの有効化1

仮想マシンプラットフォームを有効化する

画面をスクロールして仮想マシン プラットフォームにもチェックをつけます。

WSLの有効化2

Ubuntuをインストールする

Microsoft Storeを開き、Ubuntuをインストールします。今回は無印を選択しましたが、バージョンは20.04がインストールされました。

Ubuntuのインストール

インストールされたUbuntuを起動するとUbuntuのコマンドライン(Windowsにおけるコマンドプロンプト、Macにおけるターミナル)が開き、Enter new UNIX usernameと聞かれます。ここにUbuntuで使用するユーザーネームを入力してください。

次にパスワードを入力すれば準備完了です!

Ubuntuのインストール2

Python3とpipのインストール

仮にWindowsにPythonをインストールしていたとしても、今インストールしたUbuntuには入っていません。引き続きコマンドラインに以下コマンドを入力・実行してUbuntuにPython3pipをインストールしましょう。

Pythonにパスを通すために以下のコマンドを実行します。

JupyterLabのインストール

IDE(統合開発環境)は何でも良いですが、手っ取り早くて初心者に適したブラウザでプログラミングができるJupyterLabを使いましょう。以下のコマンドを実行するとインストールできます。

WSL2で起動したUbuntuでJupyterLabを使う方法

jupyter labというコマンドを実行すると通常は自動でブラウザが開きますが、今回の環境(WSLでUbuntuを呼び出してJupyterLabを起動する)ではブラウザが開きません。しかし動作不良というわけではなく、ちゃんとJupyterLabは起動しています。

コマンド実行後に出てくる以下の黄色枠内のURLをコピーして、Windowsのブラウザに入力すればOK!

JupyterLabの起動

画面にNo web browser found: Error('could not locate runnable browser').と書いてあるので、Webブラウザをインストールしておけば良いのかもしれませんが、WindowsのWSLを使っているので、今回の方法で十分かなと思いました。

ライブラリのインストール

それではGetFEMを使うために以下のコマンドを実行してライブラリをインストールしましょう。PyVistaは結果の可視化ライブラリです。

エラーの回避で必要だったライブラリをインストール(場合による?)

これは僕の環境だからかもしれませんが、このままGetFEMのチュートリアルを実行すると、以下のエラーが出ました。解決のために調べたリンクを添えて紹介します。

エラーが本当に出ることを確認したら(出ない場合は依存関係を崩すかもしれないので)、以下のコマンドを実行して2つの追加ライブラリを入れておきましょう。

GetFEM入門書のチュートリアルを実行してみた結果

この記事では書籍に記載されたコードをただ実行してみて動作確認をしました。書籍のコードを全て公開することはできませんので、詳細は書籍をご購入ください。

本書は数値解析手法のひとつである有限要素法をPythonによって実装するための方法の解説書です。具体的にはPythonを使って、有限要素法のメッシュ作成やソルバ実行や結果の可視化が、ライブラリを使ってできることを目指します。ただし、Pythonの基礎知識や有限要素法の理論の基礎は本書では扱いません。

計算はできたがPyVistaでモデルが表示されない

僕の環境では上記の環境構築を実施した結果、コードは全てエラーなく実行完了していました。しかしPyVistaで可視化されるはずのモデルが見えないという結果になってしまいました(下図)。

WSL環境でGetFEMを使ってみた結果、可視化ができなかった図

最終的にはこの後記載する方法で可視化は確かめました。しかし色々調べたのですがまだ原因がわからず、自分の環境だけで起こるのかどうかも不明です。僕のPCがNVIDIAのGeForceRTXを積んでいるので、WSLのようなGPUアクセスが制限されるソフトとの相性が良くないのかも知れません(←ChatGPT4のアドバイスをそのまま書きました)。

レンダリング系のエラーは知見がないので、このページを見た知見者がコメント欄(記事の下)に情報を投稿してくれることを祈りましょう。。

ちなみに、保存されたvtkモデルをmatplotlibだけを使って可視化する場合は正常に動作しました(下図は2D解析の結果です)。やはり基本の描画自体は動いていて、レンダラーが機能していない→PCのグラフィック関係との通信がうまくいっていないと考えるのが妥当かも知れません。

matplotlibで可視化した結果

解決法:別のPyVista環境で可視化する

現時点のGetFEMではvtkモデルをファイルに保存してからPyVistaで可視化するという方法をとっています。そのためWSLを使わない別の環境で可視化すれば解決します(WSLを動かしているWindowsのフロントでPythonを動かしたり、Mac環境のPythonを使ったり)。

1Dばねモデルの解析結果

こちらは書籍最初の解析結果(1Dのばねモデル)をMacで可視化した結果です。以下のコードで可視化できます。

GetFEMの解析結果をMacbookで可視化させた結果(1Dのばねモデル)

2D梁モデルの解析結果

そして下図は2Dの梁に荷重をかけた時の解析結果を可視化した図です。書籍と同様に問題なく計算がされていることを確認しました。

GetFEMの解析結果をMacbookで可視化させた結果(2Dの梁モデル)

まとめ

このページではPythonで有限要素法を使うことができるGetFEMをWindowsで使う方法を紹介しました。理想はGetFEMをLinux環境で使うのが良いと思いますが、純粋なLinux環境のPCを持っている人が少ないと思ったのでこの記事を書いてみました。

WindowsではWSL(Windows Subsystem for Linux)を使うことでLinux環境を仮想的に使用できます。この環境でUbuntuをインストールすればGetFEMを使えることを確認しました。
ただし可視化部分はWSLと相性が悪い可能性もあり(GPUだけかも知れませんが)、今回、結果の可視化には別環境のPythonとPyVistaを使用しました。

とにかくこれで手持ちのPCでGetFEMを動かすことに成功したため、内容は難しそうですが有限要素法の学習ツールとして使えそうです。

ちなみにLinuxの創始者であるリーナス・トーバルズ氏の書籍が日本語でも出版されています。この記事とは全然関係ないですが、楽しんでプログラミングしている人にはおすすめします。

フィンランドに住む1人のコンピュータおたくの青年が、世界中にオープンソース運動を巻き起こし、一躍有名となった。彼の名はリーナス・トーバルズ。ヘルシンキ大学在学中に「Linux」というコンピュータのOSを作り出し、インターネット上で無料でソースコードを公開した。OSといえば大企業が開発した商用のものだけで、かつソースコードを公開することはタブーといわれていた時代に、彼の試みは驚くほどの大反響を巻き起こした。彼は決して野心を持ってLinuxの開発に臨んだわけではなかったが、結果的にLinuxは研究者や開発者、学生などで構成されるUNIXコミュニティで爆発的に広まり、今日ではマイクロソフトのウィンドウズを脅かすまでに成長した。

Windows環境でGetFEMを使えることがわかったので、皆さんも是非GetFEMで遊んでみてください!
X(旧Twitter)でも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

SNSでもご購読できます。

コメントを残す

*