#author("2020-07-28T19:18:01+09:00","default:opencaewikistaff","opencaewikistaff")
* UsageInfo2で作った例題ExTest1を基本にして、並列処理や分岐モデル作成などの活用情報3 [#vad49072]

まずUsageInfo2で作った例題「ExTest1」を基本にして展開するので、作業フォルダ「C:\WorkSV」のフォルダ「ExTest1」をコピーして「ExTexs2」フォルダを作ります。なおここではWindows10の環境で検証を進めます。

** 並列処理による解析時間を検討する [#acde5ea3]

この練習はWindows10で進めていますが、「SimVascular」は血流解析の統合支援ツールで、ものづくりで活用するCAEで言えば以下の3段階の手順の1:プリと3:ポストを担当しています。~
1:プリ処理(解析モデルの形状を作成しメッシュや境界条件を設定する)~
2:ソルバー(有限要素法による流体解析手法で血流を数値解析する)~
3:ポスト処理(解析結果の圧力や速度の数値情報を可視化する)~
それで、2:ソルバーは「SvSolver」による実現していますが、導入手順[[SimV-Install1]]で示したように導入済みです。

*** 逐次処理1コアによる解析時間 [#d631dced]

まずSimVascularを起動して、File>Open SV Projectより、先にコピーした「ExTest2」フォルダーを選択します。

最初に、逐次処理での計算時間を確認します。「SV Data Manager」の「Simulations/aorta」項目にチェックを入れて、「aorta」をダブルクリックして、ツール「SV Simulation」を表示させます。既に「ExTest1」で解析を完了している設定なので、「Create Files and Run Simulation」ボタンを押して、「Run Simulation」で実行してみます。

「Simulation job 'aorta' has finished.」とメッセージが表示され、メインウインドウの左下に「aorta: running. 100% completed.」と表示されています。この表示パネルの「Show Details…」ボタンを押して、詳細を確認します。

この小さな枠の表示の2行目を見ると「The number of processes is 1.」ですので、1CPUを用いた逐次処理を行っていることが分かります。
The process ID for myrank (0) is (20248).

解析時間を確認するために、例題プロジェクトの解析用フォルダ「C:\WorkSV\ExTest2\Simulations\aorta」の中の、「histor.dat」ファイルをメモ帳などを使って確認します。また解析1ステップにおいて収束反復回数が2なので、1ステップに2行ずつ表示されます。

現在の設定では SvSolver は解析を行うごとに、ログや結果を上書きせずに追加してゆきます。よって前にExTest1のログが1から100で、今のExTest2のログが101から200です。この200ステップ目の2つの数値が秒単位の解析時間です。この練習で用いた Intel Corei9-9900K 3.6GHz では、1コア実行で27秒となりました。

*** 並列処理8コアによる解析時間 [#q6885461]

ツール「SV Simulation」の「Create Files and Run Simulation」ボタンの表示では、「Use MPI」としてMPI並列処理が可能なようです。この状態で可能か確かめます。このチェックを入れて、「Number of Processes」スライダーでは1から16が選択できます。このCPUは、物理コア8で論理コア16なので、こうなっています。ここでは8にします。

これで「Run Simulation」で実行してみます。この状態では「nknow error return code」となり実行できません。先の導入手順では、Windows10にMS-MPIを導入していないので当然ですね。

そこで、以下のMicrosoftのサイトに接続し、「Microsoft MPI v10.1.2」をダウンロードします。まず「Download」で進み、ファイル「msmpisetup.exe・msmpisdk.msi」の2つにチェックを入れて、「Next」で進むとダウンロードできます。 https://www.microsoft.com/en-us/download/details.aspx?id=100593

ダウンロードフォルダにあるこの2つのインストールファイルをダブルクリックして、全て標準の指示に従ってインストールします。これで並列実行してもエラーになります。

とよく考えてみると、並列解析用のデータを作っていないです。そこで上記のMPI並列処理の設定を行ってから、「Create Data Files for Simulation」を押して試してみます。それでも並列処理がエラーで失敗します。…………「解決したら追記します」と諦めたのですが。

で何気なく、並列数を6にしてみました。つまり「Use MPI」にチェックを入れて、「Number of Processes」を6にして、「Create Data Files for Simulation」を押して、「Run Simulation」で実行してみます。なんと並列動作したようなのです。

完了メッセージの「Show Details…」の内容を見ると、並列処理で表示が崩れているところもあります。「The number of processes is 6.」となり6プロセスで並列処理しているようで、タスクマネージャーを見ても6コアが動作しているようです。感覚的にすぐに終了した感じです。

この時の解析時間は、並列処理実行結果フォルダとして「C:\WorkSV\ExTest2\Simulations\aorta\6-procs_case」中の、「histor.dat」ファイルを見ると「なんと8秒」で解析が終了しています。6コア並列計算で約3.4倍の高速化です。素晴らしい!

ちなみに4コア並列処理で9秒ですから3倍の高速化で、2コア並列処理で16秒ですから約1.7倍の高速化となり、領域分割のMPI並列処理の有効性が確認できました。

さらに更にもしやと思い10コア並列処理したら9秒で動作しましたが、高速化は実現しませんでした。この規模(要素数:38758)では4並列程度が適当と思われます。

** ウエブ資料にあった分岐モデルを解析する [#acde5ea3]

''【お断り:以下の情報は試行錯誤の記録であり、失敗の過程も記録されています。ご了承ください。】''

解析プロジェクト「ExTest1」では、練習として大動脈1本のみを対象に血流解析を行いましたが、ウエブ資料「[[Quick Guide:http://simvascular.github.io/docsQuickGuide.html]]」のように、ここでは「ExTest2」に大動脈(aorta)をが2つの腸骨動脈(iliac artery)に分岐してする解析モデルで血流解析を行ってみます。

まずSimVascularを起動して、File>Open SV Projectより、先にコピーした「ExTest2」フォルダーを選択します。以下の作業では、「Paths」において「aorta」を延長して、新たに「iliac」を追加して、それに続く血流解析の設定手順をやり直します。

そこで「Segmentaion:aorta・Models:aorta・Meshes:aorta・Simulations:aorta」4つの項目をそれぞれ、右クリックメニューの Remove で削除します。ただし Simulation フォルダーの内容は削除されないようなので、この中の「aourta」フォルダーを手動で削除しておきます。

これで新しい「ExTest2」の準備ができたので、作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

*** ツール「SV Paths Planning」でパスaortaを延長しパスiliacを追加する [#g8e64de1]

「SV Data Manager」の「Paths」項目にチェックを入れて、「aorta」項目をダブルクリックして、ツール「SV Path Plannning」を表示します。前のプロジェクト「ExTest1」では、11番目までパスの制御ポイントを作っています。

先の練習「SimV-UsageInfo2」の「[[Creating a Path:パスの作成>SimV-UsageInfo2#we6e4198]] 」を参考にして、12番目からAxialスライダー値が10に近くなるまで進めます。分岐を超えたら、右側の腸骨動脈(iliac)を aorta に続けてパスを作ってゆきます。後から分岐から右に向かうパスを「iliac」とします。

ただし、ここからは大動脈の形が変化し、分岐して斜め方向に進む部分もあるので、スライダーの刻みは前の練習の25刻みより小さく5〜10刻みで進めます。
「(12)A:190,S:274,C:42(ここから分岐が始まる感じです)」「(13)A:180,S:267,C:41」「(14)A:170,S:266,C:39」「(15)A:165,S:257,C:29(ここから横に進む感じです)」「(16)A:155,S:243,C:24」「(17)A:145,S:234,C:20」「(18)A:135,S:230,C:19」「(19)A:125,S:225,C:16(ここから更に分岐が始まる感じです)」

以上の19番目の制御ポイントの作成でパス「aorta」は完成とします。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

次に、12番目の制御ポイントで分岐が始まる感じで、この点を出発して右側の腸骨動脈(iliac)のパスを追加します。ツールの右上「New Path」ボタンを押して、設定パネルの変更はせずに、Path Nameを「iliac」として「OK」で進め、「Paths」項目の下に追加された「iliac」をクリックします。空の制御ポイントリストが表示されます。

先に作ったパスaortaの分岐が始まる12番目の位置を、パスiliacの0番目の制御ポイントにします。分岐を右側に進む腸骨動脈を、同様な手順で以下の制御ポイントを追加してゆきます。パスaortaと同じようにA:130でさらに分岐するので、ここでパスiliacも完成とします。~
「(0)A:190,S:274,C:42」「(1)A:180,S:292,C:43」「(2)A:170,S:307,C:38」「(3)A:160,S:312,C:34」「(4)A:150,S:312,C:31」「(5)A:140,S:313,C:29」「(6)A:130,S:315,C:26」

以上の6番目の制御ポイントの作成でパス「iliac」は完成とします。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

*** ツール「SV 2D Segmentation」でパスaortaとパスiliacの血管断面を特定する [#x032ee04]

ここでの手順は、先の練習「SimV-UsageInfo2」の「[[2-D Segmentation:2次元セグメンテーション>SimV-UsageInfo2#s680950c]] 」を参考にして、パス「aorta」とパス「iliac」を別々に、血管断面を特定するための2次元セグメンテーションを行います。

まずパス「aorta」を作ります。手順は上記「SimV-UsageInfo2」の通りです。輪郭グループ名は「aorta」とします。ここでのパスaortaでは延長しているので、Resliceは0から433となっています。ここでも「LevelSet」を用いて行いますので、Conver to Spline にチェックを入れて、輪郭の Ctrl No を「12」に設定します。

今回は最初から「Batch Mode」を用いて自動作成してみます。ただし分岐の少し前(Reslice:0〜300)までは単純な形状ですが、分岐から先(Reslice:300〜430)は複雑な形状です。そこでまず最初に、分岐までを自動作成してみます。以下の記述では「Reslice=300」を「R=300」と表記します。

まず「Batch Mode」にチェックを入れて、Resliceの値を0から300まで10刻みで進めるので「0:10:300」と設定し、「LevelSet」ボタンを押してみます。0番から30番の輪郭ができたのですが、13番と15番が間違った形状なので輪郭の制御点を移動させて修正します。なお輪郭上の制御点は左クリックで移動し、点がない輪郭上の左クリックは制御点の追加で、右クリックが制御点の削除です。

次に分岐手前から進めてみます。現時点で30番までR=300まで出来ているので、以下のRescliceのポイントで「LevelSet」を押して、「Batch Mode」のチェックを外して、手動で輪郭を追加してゆきます。~
「31:R=305」「32:R=310」「R=315(分岐部分でiliacも重なっているので飛び越す)」「33:R=320」「34:R=325」「35:R=330」「36:R=340」「37:R=350」

ここで「R=360」において、LevelSetでは現在の画像情報では輪郭が作れないメッセージが出ました。そこで手動で輪郭を楕円で作る「Ellipse」ボタンを押して、画像内で「1:中心位置をクリック、2:半径位置をクリック、3:制御点を調整する」で作ることができます。自動LevelSetが失敗したら、手動楕円作成とします。

「38:R=360(手動楕円)」「39:R=370(手動楕円)」「40:R=380(手動楕円)」「41:R=390(自動LevelSet)」「42:R=400(自動LevelSet)」「43:R=410(自動LevelSet)」「44:R=420(自動LevelSet)」「45:R=430(自動LevelSet)」

以上でパス「aorta」の、45個の輪郭グループは完成とします。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

次にパス「iliac」に対する輪郭グループを作ります。ツールの右上の「New Group」ボタンを押して、Select Path をメニューから「iliac」に変更し、Group Name も標準の設定として「iliac」と入力し「OK」します。「SV Data Manager」の「Segmentations」したの「iliac」をダブルクリックします。

パスiliacのResliceは、0から98となっています。最初の0番では、分岐点で複雑な形状なので、手動楕円作成とします。そのあとは自動LevelSetで進められるようです。~
「0:R=0(手動楕円)」「1:R=10(自動LevelSet)」「2:R=20(自動LevelSet)」「3:R=30(自動LevelSet)」「4:R=40(自動LevelSet)」「5:R=50(自動LevelSet)」「6:R=60(自動LevelSet)」「7:R=70(自動LevelSet)」「8:R=80(自動LevelSet)」「9:R=90(自動LevelSet+手動修正)」「10:R=98(自動LevelSet)」

以上でパス「iliac」の、10個の輪郭グループは完成とします。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

最後に、2つの輪郭グループ「aorta・iliac」のそれぞれで、「Lofting Preview」にチェックを入れて、輪郭により作られる解析モデルが適切かどうか、確認してみます。設定はエラー無くできるのですが、aorta の方は表面が表示されず、iliac だけが表示されてます。

どちらも手動楕円と自動LevelSetが混在しているのですが、aorta の方は分岐点で輪郭が立体的に交差している部分もあり、もしかしたら解析モデルが作れないかもしれません。

*** ツール「SV Modeling」でパスaortaとパスiliacを統合した解析モデルを作成する [#x7d06eec]

ここでの手順は、先の練習「SimV-UsageInfo2」の「[[Creating a Model (with PolyData):PolyDataによる解析モデルの作成>SimV-UsageInfo2#iaa7290f]] 」を参考にして、パス「aorta」とパス「iliac」を統合した解析モデルを作成するためのモデリング作業を行います。

手順は上記「SimV-UsageInfo2」の通りで、Model Type は「PolyData」として、Model Name は2つの輪郭を統合して1つのモデルにするので「test2」としてみます。項目をダブルクリックするとツール「SV Modeling」が表示されます。

まずツールの「Create Model…」ボタンを押します。対象となる輪郭グループを選択しますが、ここでは「aorta+iliac」2つなので、両方のUse欄にチェックを入れて、Number of Sampling Pointsの指定では、PolyDataのオプションとして「40」を入力し、「OK」で進めます。

残念ながら、モデル作成にエラーで失敗しました。まずは輪郭モデルの Lofting が表示できない「aorta」輪郭が怪しいです。再検討するために「test2」項目を削除して、「Segmentations / aorta」をダブルクリックして修正を試します。

輪郭グループ aorta のなかで、怪しいところを探します。まずは立体的に交差している輪郭を削除してみます。輪郭の3D表示を見ると、33番縦になって32番と立体的に交差してるので、33番をDeleteし、同様に34番と41番も交差しているのでDeleteします。これで Lofting Preview を表示させると、血管表面が見えました。

どうもツール「SV 2D Segmentation」で作る血管の輪郭は、立体的に前後の輪郭と交差してはいけないようです。これで「aorta+iliac」を統合した血管表面が確認できました。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

再び先の手順で、解析モデル「test2」を作成してみます。一応はモデルは出来たみたいですが、以下の問題が指摘されます。~
「部分的にしか交差しない血管があるかもしれません。Face List に表示され、強調表示されているフェイスを確認してください。」「OK」で進めます。

確かに、リストを見ると、「aorta+iliac」のぞれぞれに、wall+cap+cap2 があって、6個の面が作られていますが、本当ならば iliac の流入の cap は aorta に含まれて、正常な解析モデルでは、5個の面が作られるはずです。

試しに、ツールの右側の Remesh Sizes の機能を使ってみます。解析モデル「test2」を削除してから新たに設定して、「Estimate Size」ボタンを押すと、0.25 から 0.0748 に変更されるので、「Remesh」ボタンを押します。さっきはすぐに出来たのに、今回は少し待ちますが、状態はかわりません。……残念

となると iliac のパスの最初を、分岐点より少し前の aorta のパスの制御点と重ねることが必要かもしれないです。今は aorta の12番「(12)A:190,S:274,C:42」の制御点から分岐して iliac のパスを作っていますが、これに10番と11番(「(10)A:225,S:264,C:40」「(11)A:200,S:272,C:41」)も iliac のパスに追加してみます。

上記のやり直しのため、まず「Modeles / test2」「Segmentations / iliac / Lofted」「Paths / iliac」の項目を削除します。

追加は「Paths / iliac」をダブルクリックして、Adding Mode は Smart にして、「A:225,S:264,C:40・A:200,S:272,C:41」を追加してみます。これで順番が入れ替わり、先頭に追加されます。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

では「Segmentations / iliac」を作り直します。先頭に追加したパス iliac では、Reslice が0から138になります。分岐を乗り越えるために、以下のように Reslice を10刻みで進めます。~
「0:R=0(自動LevelSet)」「1:R=10(自動LevelSet)」「2:R=20(自動LevelSet)」(R=40は交差してるので飛び越し)「4:R=50(自動LevelSet)」「5:R=60(自動LevelSet)」「6:R=70(自動LevelSet)」「7:R=80(自動LevelSet)」「8:R=90(自動LevelSet)」「9:R=100(自動LevelSet)」「10:R=110(自動LevelSet)」「11:R=120(自動LevelSet)」「12:R=130(自動LevelSet+手動修正)」

パス iliac も、Lofting Preview で確認すると、正しく表面が作られました。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

再び解析モデル「test2」を上記の手順で作ってみます。できたのですが、やはり6個の面が作られています。……解決方法を検討します。

ウエブ資料「[[Quick Guide:http://simvascular.github.io/docsQuickGuide.html]]」の「Creating a Model (with OpenCASCADE or Parasolid)」は、「SimV-UsageInfo2」の練習では省略したのですが、面の結合の機能が紹介されています。

以上の段階で6つの面が出来ていますが、「Blend」タブを見ると、「Face1:wall_aorta・Face2:wall_iliac」の設定があります。Use にチェックが入っており、Raduis に「0.2」を設定し、「Blend Faces」ボタンを押してみます。何か処理されましたが、面は6つのままです。……残念。

取り敢えず[[SimV-UsageInfo1]]で試した、ウエブ資料の通りに5つの面にするために、ここでは Face List の「cap_iliac」を選択し、右の「Delete」で削除してみます。作業の段階ごとに必ず「Save SV Project」で上書き保存して、先に進んでみます。

*** ツール「SV Meshing」で解析モデル「test2」のメッシュを作成する [#l426f211]

練習[[SimV-UsageInfo2]]の手順通りで、Select Model は「test2」で、Mesh Name「test2」として進めます。今回の Global Max Edge Size は 0.2526(cm) となりました。暫く待つと処理は終わるのですが、統計情報を見ると全て0なので失敗しています。……残念。やはり解析モデルで5つの面が正しく作れていないのがダメかもです。

何か解決のヒントはないかと思い、SimVascular の Youtube 動画チャンネル https://www.youtube.com/channel/UCT61XgTRqpfb39Hyio9IqGQ を探してみました。この中で「[[SimVascular Tutorial 3: 2D Segmentations with Level Set and Manual:https://www.youtube.com/watch?v=jlfkVmOU8-w]]」にありそうなので、確かめてみました。

どうも動画の12:20ぐらいから、aorta に接続する iliac の輪郭を作成しています。で12:40ぐらいの操作で、aorta の中に接続する iliac の輪郭を小さくして、aorta の中に完全に含まれている状態にしています。これが原因かもしれないので、再度確認します。

まず失敗している「Models / test2」「Meshses / test2」を削除(Remove)します。「Segmentations / iliac」をダブルクリックして、ツール「SV 2D Segmentation」を表示し、「aorta / Lofted」をチェックして表示し、iliac の0番目の輪郭を指定すると、断面画像の中で、aorta の Lofted が銀色の丸い形で、iliac の選択した輪郭が赤色で示されており、確かにはみ出しています。

そこで輪郭の中心から右斜め上に出ている、形状の大きさ制御点を使って小さくします。aorta に含まれる輪郭1番2番3番も同様に小さくして、Lofted 表示して確認します。「Save SV Project」で上書き保存して、先に進んでみます。

再び解析モデル「test2」を上記の手順で作ってみます。できたのですが、何と!「wall_aorta・wall_iliac・cap_aorta・cap_iliac・cap_aorta_2」の5つの面が作られ、ウエブ情報の通りです。成功かもです。

念のため3D表示の各面をクリックしてSキーを押すと、面の名称と場所の対応が確認できて、以下の対応です。「Save SV Project」で上書き保存して、先に進んでみます。~
「wall_aorta:大動脈の壁面・wall_iliac:腸骨動脈の壁面・cap_aorta:大動脈の流入面・cap_iliac:腸骨動脈の流出面・cap_aorta_2:大動脈の流出面」

試行錯誤で一歩ずつ進んでいます。ツール「SV Meshing」で解析モデル「test2」のメッシュを作成します。手順は上記の通りで、Select Model は「test2」で、Mesh Name「test2」として進めます。今回の Global Max Edge Size も 0.2526(cm) となりました。

ツール右上の「Run Mesher」ボタンを押すと、暫く待つまと作業が終わり、解析メッシュの統計情報が以下の通り表示されました。やった!できた!~
「Nodes:21264・Elements:113492・Edges:19530・Faces:13020」が表示されるので「OK」で進めます。

不要な表示のチェックを外すと、灰色の面の上に青色の網の目のメッシュが表示されます。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

*** ツール「SV Simlation」で解析モデル「test2」の血流解析を実行する [#q82174e2]

練習[[SimV-UsageInfo2]]の手順通りに進めます。設定パネルが表示されたら、Select Modelは test2 で、Job Nameには「test2」と入力して「OK」で進めます。

ツールの下にある「Inlets and Outlet BC」を選択すると、パラメータ表が表示されます。 この解析モデルでは「大動脈の流入面:cap_aorta・腸骨動脈の流出面:cap_iliac・大動脈の流出面:cap_aorta_2」の3つの境界条件の設定が必要です。

先ず、「cap_aorta」の流入条件を表の最初の行で設定するために、右クリックメニューから「Set BC」で同様に行います。次に、「cap_iliac・cap_aorta_2」の流出の境界条件を設定します。2つども同様に抵抗値「16000」を選択します。

血管壁の特性は、同様に基本となる「Rigid」を選択します。解析ソルバーのパラメータは、前の練習の通りに設定します。

血流解析の実行は、まずはMPI並列処理を用いず、逐次処理で進めるので、まずChoose Meshで「test2」を選択し、「Create Files and Run Simulation」ボタンを押し、もしメッシュが存在して有効だが作成するかの確認は「OK」で進めます。最後の「Run Simulation」ボタンを押します。

逐次処理なので時間がかかりますが、血流解析が実行されています。無事に100% completeとなり、histor.datで確認すると「96秒」で完了しました。

[[AboutSimVascular]]

【このページの閲覧数:総計:&counter(total); 今日:&counter(today);】


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS