PySystemCouplingを触ってみました
By M.Yamamoto
はじめに
Ansys社はMITライセンスで、Pythonのパッケージを展開しています。
当ブログでも過去に、
で紹介しています。
最近、流体‐構造物相互作用(FSI)問題を紹介しましたが、これはWorkbenchのシステムカップリング機能を利用したものでした。
このシステムカップリング機能にPython的にアクセスするものとして、 PySystemCouplingが公開されています。
図1.はページの途中までですが、これ以降に説明部分が続いています。
2way-FSIの例題としてよく利用されているoscillating-plate問題の取り扱いプログラムが以下に与えられています。
pysystem-coupling/examples/00-systemcoupling/oscillating_plate.py
また、これに対応したJupyter Notebookファイルが以下に与えられています。
pysystem-coupling/doc/source/examples/00-systemcoupling/oscillating_plate.ipynb
これらのプログラムを見ますと、計算に必要と思われる入力データはプログラム上でダウンロードしているように見受けられます。
不慣れで必要なデータ形式が理解できていませんので、本来であれば、以前Workbenchを利用したもので紹介しました例を取り上げたいところですが、 今回はこのサイトで挙げられているoscillating-plate問題をJupyter Notebookで練習してみたいと思います。
Python環境、Anaconda、Jupyter
PySystemCouplingを利用するにはPython環境が必要です。次々と色々なパッケージをインストールしていきますと結構混乱してしまいます。 ここでは、容易に利用できるといわれているAnacondaを利用したいと思います。 仮想環境を利用して、今回のPySystemCouplingを分離して利用したいと思います。 これらをGUIを利用して行いたいのでAnaconda Navigatorを利用したいと思います。
筆者はIT技術に疎いので、利用しているPC(Windows10)はあちらこちらに不具合が潜んでいるようです。 最新バージョンのAnacondaをインストールしますと、Anaconda Navigatorが起動しません。 ネットの対応策をいくつか実施しても解決しません。 過去には起動したように思いますので古いバージョンを試してみました。 次のURLにアーカイブがあります(図2.)。
筆者の場合、Anaconda3-2020.07-Windows-x86_64.exe という結構古いバージョンでAnaconda Navigatorが起動しました。
Anacondaはデフォルトでインストールしますと、主にC:\Users<username>\anaconda3に配置されます。 プロパティを見てみますと以下のようです(図3.)。約5GBほどあります。
スタートメニューのAnaconda Navigatorをクリックしますと(図4.)、GUIであるAnaconda Navigatorが起動します(図5.)。
左ペインのEnvironmentsをクリックしますと、デフォルトのbaseの環境が現れます(図6.)。
この環境が先ほど示したフォルダに対応しています。 Installedドロップダウンメニュー状態で下を見ますと、325パッケージがインストールされているようです。 ドロップダウンメニューをNot installedにしますと底部には9362 packages availableと表示されます。
このbase環境はそのまま保持しておいて、今回の作業用に新たに仮想環境を作成したいと思います。 baseそのままをコピーする方法がある様ですが、小さく始めたいと思います。
Environmentsタブの底部のCreateボタンをクリックします。 ansysという名前で環境を作成します。 Nameにansysと入力し、Createをクリックします(図7.)。
しばらくすると、インストール作業が終わり、baseの下にansysが現れます。
これを選択しますと、10パーケージ、インストールされているのがわかります。 pythonの他に、pipがインストールされています(図8.)。
この環境は、C:\Users<username>\anaconda3\envs\ansysに配置されています。
先のoscillating_plate.ipynbを見てみますと、matplotlibが利用されているようですので、これを追加します。 サーチボックスにmatplotlibと入力し、Not installedの中から探します。 見つかったので、matplotlibの左の四角ボックスをクリックして、右下のApplyをクリックします(図9.)。
依存関係の都合上、66パッケージのインストールの確認画面が現れます。 Applyします(図10.)。
インストールが終わって、Intalledを確認しますと現段階で78 package availableとなっています。 少々数が合わないように見えますがよく分かりません。 numpyもインストールされています。
次に、Jupyter notebookを追加したいと思います。
Searchボックスにnotebookと入力して、Not installedから探しますと、notebookが見つかりますので、 その左の四角のボックスをクリックし、右下のApplyをクリックします(図11.)。
依存関係の都合上、78パッケージのインストールの確認画面が現れます。Applyします(図12.)。
インストールが終わって、Intalledを確認しますと現段階で165 package availableとなっています。
さて今回の主体のansys-systemcoupling-coreですが、Channelsを追加しても探し出せませんでした(図13.)。
図13.ansys-systemcoupling-coreの探索
結局、どう探せばよいのかよく分かりませんので、端末からpipでインストルールすることにします。
スタートメニューからAnaconda Promptを起動します。
base環境に居ますので、
conda activate ansys
でansys環境に移ります。そこで、
pip install ansys-systemcoupling-core
と入力します。
これでインストールが完了します(図14.)。
図14.ansys-systemcoupling-coreのインストール
Anaconda Navigatorでinstalledを確認しますと図15.のようになります。
図15.ansys-systemcoupling-coreの確認
下を見ると、172 package availableとなっています。 現状のansysフォルダのプロパティは図16.のとおりです。
これで、環境が準備できました。
Jupyter Notebookでの試行
githubからダウンロードしたoscillating_plate.ipynbを適当なフォルダに置きます(図17.)。
図4.スタートメニューのAnaconda Promptを起動します。
起動時はbaseになっています。
conda activate ansys
で環境をansysに切り替えます。
先ほどの練習用フォルダに移ります。
jupyter notebookを起動します(図18.)。
図18.練習フォルダでのJupyter notebookの起動
ブラウザーが当該フォルダで起動します(図19.)。
oscillating_plate.ipynbファイルをクリックしますとnotebookが開きます(図20.)。
図20.oscillating_plate.ipynbファイル
ファイルの記述を順に追っていくことにします。
コードが記述されているセルは、Ctrl+Enterで実行できます。
最初の%matplotlib inlineを実行してみます。 カーソルをセルに置き、Ctrl+Enterしますと、セルの左側がIn [ ]からIn [*]に変わりコードが評価され、最終的にIn [1]となりました(図21.)。
この例では、特に目に見えての環境等の変化はないようです。
引き続き上から順番にセルを実行して行きます。
次のセルを実行しますと、In [2]となりますが、筆者の環境では、以下のようなフォルダが作成されます。
C:\Users<username>\AppData\Local\ansys_systemcoupling_core\ansys_systemcoupling_core\examples
次のDownload input filesの下のセルを実行しますと、In [3]となり、図22.のようにファイルがダウンロードされました。
これが探していた入力データと思われます。 今回はデータの中身を詳しく検討する余力がありませんので、引き続き次のセルに移ります。
次のセルがIn [4]になった段階ではディレクトリ構造が変化しています(図23.)。
Fluentフォルダにplate.cas.gzが、MAPDLフォルダにmapdl.datが配置されています。
次のセルを実行し、In [5]となります。次がIn [6]です。そしてIn [7]。 次の検証はIn [8]で、図24.のようにOut [8]が帰ってきています。
次いで In [9]を実行し、その次にIn [10]で検証です(図25.)。
次の In [11]で状態を確認しています(図26.)。
次の In [12]でsetupのエラーの確認をしています(図27.)。
In [13]を実行しますと、end_timeとtime_step_sizeがになっています(図28.)。
続くIn [14]とIn [15]で未定義を定義します(図29.)。
次の In[17]でoutput_controlの状況を確認します(図30.)。
optionに何があるか確認します(図31.)。
optionを修正し、再度確認します(図32.)。
In [22]でsetupのエラーがないのを確認し、次のIn [23]でサマリーを見ています。 少々長いですが、以下に貼り付けますと、以下のようになります(図33.)。
さて、いよいよ求解です。In [24]は効果がよくわかりません。
次のセルを実行しますと、しばらく In [*]の状態が続き計算を実行しています。 In [25]になった段階で計算が終了しています。 出力の最後の部分は以下のようになっています(図34.)。
データをダウンロードしたフォルダは以下のようになっています(図35.)。
Fluentフォルダは以下のようです(図36.)。
MAPDLフォルダの内容は以下のようです(図37.)。
SyCフォルダの内容は以下のようです.(図38.)。
この中のResultsフォルダの内容は以下のようです(図39.)。ただし一部です。
SyCSnapshotsフォルダの内容は以下のようです(図40.)。
以上で、初期の計算は終了した模様です。
notebookには引き続き追加計算がある様です。 次のセルを実行しますと In [26]となります(図41.)。
solution_controlを修正します(図42.)。
次のセルでForceデータ・トランスファーをチェックし変更します(図43.)。
次のセルでsetupのサマリーを確認しています(図は割愛)。
次のセル、追加計算を実行します。しばらくIn [*]の状態が続き、計算が終了しますとIn [31]となります。 応答の最後の部分は以下のようになっています(図44.)。
それぞれのフォルダに追加の計算結果が収められています。
以上で計算は終了です。
終了手続きを実行します(図45.)。
おわりに
PySystemCouplingのJupyter notebookを逐次的に実行してみました。 計算は実行された模様ですが、可視化等の作業は未実施です。 図32.を見ますとEnsightGoldが選択されているようですので、別途Ensightで可視化できるものと思われます。 また、ようやく入手した入力データの解釈も今後の課題として残りました。
本稿作成には、種々のネット情報や参考書を参照させていただきました。 その一々を挙げることはできませんが非常に感謝しています。
補遺
Githubにはpythonプログラムoscillating_plate.pyも与えられていました。 AnacondaにはSpyderが同梱されています。
ansys環境に追加するには、Navigatorで環境にansysを選択して、Not installedでspyderを探します。 見つかったspyderの左側をチェックし右下のApplyを実行します(図46.)。
依存関係を考慮して追加パッケージは91のようです。 Applyを実行します(図47.)。
結果として265packages availableとなりました。 スタートメニューに環境ansysでのSpyderが追加されています(図48.)。 何故かbaseよりも更新されているみたいです。
これでSpyderでpythonコードが実行できると思います。
練習のフォルダで、Anaconda Promptからコマンドラインからspyderと入力しますと起動します(図49.)。
File>Openで練習フォルダに置いてあるOscillating_plate.pyを開くと(図50.)、プログラムが読み込めます(図51.)。
上段のツールバーで、Run>Run Profiler(図52.)、あるいはSource>Run code analysis(図53.)をクリックすると、 右上ペインにタブが追加される。
これらにより、コードの概要を垣間見ることが出来そうです。
プログラムは#%%で区切られていて個別のセル化が図られているようです。
View>Panes>OutlineでOutlineペインが表示できます(図54.)。 #%%の後にセルブロックの説明があればそれが表示されるようです。
Runメニューを見ますと、セル単位やライン単位でコードが実行できるようです(図55.)。
今回は一括でRunしてみます。Jupyter notebookで実行した場合と同じく
C:\Users<username>\AppData\Local\ansys_systemcoupling_core\ansys_systemcoupling_core\examples
に計算結果等が配置されるようです。 残念ながらライセンスの都合で計算途中で不具合が発生してしまいましたが、 Jupyter notebookの場合と同様の結果が得られると思われます。 中途半端で申し訳ありません。
そのままRunしてしまったため、その他のメニューが出なくなってしまいましたが、 Run>Configuration per fileを選択すると、Runの仕方をカスタマイズできるようです(図56.)。
以上、Spyderも非常に多機能です。