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

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

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

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

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

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

最初に、逐次処理での計算時間を確認します。「SV Data Manager」の「Simulations/aorta」項目にチェックを入れて、「aorta」をダブルクリックして、ツール「SV Simulation」を表示させます。既に「ExText1」で解析を完了している設定なので、「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]

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

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

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

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

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

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

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

ただし、ここからは大動脈の形が変化し、分岐して斜め方向に進む部分もあるので、スライダーの刻みは前の練習の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を「illiac」として「OK」で進め、「Paths」項目の下に追加された「illiac」をクリックします。空の制御ポイントリストが表示されます。

先に作ったパスaortaの分岐が始まる12番目の位置を、パスilliacの0番目の制御ポイントにします。分岐を右側に進む腸骨動脈を、同様な手順で以下の制御ポイントを追加してゆきます。パスaortaと同じようにA:130でさらに分岐するので、ここでパスilliacも完成とします。~
「(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番目の制御ポイントの作成でパス「illiac」は完成とします。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

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

ここでの手順は、先の練習「SimV-UsageInfo2」の「[[2-D Segmentation:2次元セグメンテーション>SimV-UsageInfo2#s680950c]] 」を参考にして、パス「aorta」とパス「illiac」を別々に、血管断面を特定するための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(分岐部分でilliacも重なっているので飛び越す)」「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」で上書き保存してください。

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

パスilliacの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)」

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

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

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

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

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

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

まずツールの「Create Model…」ボタンを押します。対象となる輪郭グループを選択しますが、ここでは「aorta+illiac」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+illiac」を統合した血管表面が確認できました。作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

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

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

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


[[AboutSimVascular]]

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

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