公式サイトの DOCUMENTATION の「Simulation Guide」を用いた、SvSolverの活用や設定に関する情報5

以下の説明では、公式サイトの DCUMENTATION の「Simulation Guide」http://simvascular.github.io/docsFlowSolver.html において、「Creating a Job for Simulation」からの操作手順に従って、SimVasucular の解析ソルバー SvSolver の設定方法を学びます。ここでは、Windows10 の環境を用いて説明しますが、インストール手順SimV-Install1で導入された解析環境では、ファイルの扱いなどを読み替えれば、MacOSX や Ubuntu でも同様に操作できます。

以下の説明では、この例題を最初に行うことも想定して、SimV-UsageInfo2の内容と同じ内容も、重複して説明しています。

公式解説文書「Simulation Guide」を用いた操作手順

まず、SimVascular の解析ソルバー SvSolver の設定手順を学ぶために、公式解説文書「Simulation Guide」に従って行いますが、SimV-UsageInfo4で利用した例題「CylinderProject」のファイルを参照し利用してみます。まず参考にする操作手順の資料の「Simulation Guide」を開いて、ある程度大きなウインドウにすると、左側に目次が表示されます。

ここで説明する操作手順は、目次の「Creating Job > Basic Parameters > Inflow BC > Outlet BC > Wall Properties > Solver Parameters > Creating Data Files > Running Job > Postprocessing > Examples」の内容を、この手順で進めてゆきます。

Creating a Job for Simulation:血流解析のための解析ジョブの準備

⇒ウエブ資料リンク:Creating Job

準備として、作業フォルダ C:\WorkSV の中に、例題ファイル「CylinderProject.zip」があることを確認します。次に、このファイルを展開して「CylinderProject」フォルダを作業フォルダ内に用意します。SimV-UsageInfo4で既に準備されていれば、それを利用します。

ここで説明する操作手順では、このプロジェクトのファイルの途中から自分で設定を試みます。そこで「CylinderProject」フォルダをコピーして「CylinderTest1」フォルダフォルダを作成します。

まず操作手順のウエブ資料「Simulation Guidee」の「Creating Job」を開きます。以下の説明では、設定の項目な操作を文章でしますので、画面など表示は、この資料を参考にしてください。なおこの操作手順は、この資料の完全な翻訳ではなく、操作を簡略化した部分もあります。また逆に用語などの補足説明は追加しています。資料の灰色の囲みの中が、実際の操作手順になっています。

SimVascularの起動と準備

インストール手順SimV-Install1により、Windows10 に導入済みの環境では、デスクトップ上の「SimVascular」ショートカットから起動します。なお、色々なツールが並ぶウインドウ「SimVascular 2020.04.06」と黒いログコンソール「mbilog」の2つが表示されますが、ログコンソールも必要です。

ウエブ資料に従って、「Example1の作成」を試してみましょう。この作業のもとになるファイルは、先に準備した「CylinderTest1」プロジェクトです。SimVascular を起動して「File>Open SV Project」より、「CylinderTest1」フォルダを選択し、プロジェクトを読み込みます。

このプロジェクトは、単純は円筒形(Cylinder)なので、医用画像 Images や血管軸線 Paths や血管断面輪郭 Segmentation などの情報はなく、直接に、解析モデル Models と解析メッシュ Meshes が用意されています。これらはそのまま流用します。

以下では、血流解析 Simulations の各種の設定方法を確認するので、既にできている以下の4つの項目は削除 Remove しておきます。この資料で説明する手順で、以下の4つの解析設定の具体的な方法や条件などを確認してゆきます。
Example1:steady:基本となる定常解析(流出部は単純な抵抗係数で設定し血管壁の条件は固定設定)
Example2:steady_rcr:定常解析でRCR流出条件で設定(血管壁の条件は固定設定)
Example3:steady_rcr_deformable:定常解析でRCR流出条件で設定で、血管壁は固定量だけ変形する
Example4:steady_rcr_variable:定常解析でRCR流出条件で設定で、血管壁は血流に対応して任意に変形する

念のため以前の解析結果を完全に削除するために、この「CylinderTest1」の解析結果がある「C:\WorkSV\CylinderTest1\Simulations」のフォルダも全て削除します。以下の操作では、作業の段階ごとに必ず「Save SV Project」で上書き保存してください。

Example1:steady プロジェクトの新規作成

最初の「Example1」では、ジョブ名「steady」として基本となる定常解析で、流出部は単純な抵抗係数で設定するような、血流解析ジョブを設定します。まず「SV Data Manager」の「Simulations」項目を右クリックして、メニューから「Create Simulation Job」を選択します。Select Model は「cylinder」で、Job Name は「steady」と入力して、OK で進めます。

「Simulations」項目の下に、新しいジョブ「steady」が作られます。この項目をダブルクリックすると、「SV Simulation」ツールが右側に表示されます。現在は、標準の初期値があるだけで、具体的な設定はまだ未設定です。

Basic Parameters:基本的なパラメータ設定

⇒ウエブ資料リンク:Basic Parameters

以下の説明を進める前に、SimVascular(プリ・ポスト)と SvSolve(ソルバ)との関係を確認します。まず「Simulation Guide / Overview」の「Process Flow of SimVascular Simulation」を見ると、解析モデルが作成された後に、「svPresolver>svSolver」の順で処理が進むことがわかります。

ツール SV Simulation の「Basic Parameters」のタブ項目を見ます。基本的なパラメータには、「svPresolver・svSolver」で使用されるいくつかの基本的な設定情報となる、流体の材料特性と初期条件が含まれます。 ここでの単位は、標準設定(CSG単位:cm/gr/s:センチメートル/グラム/秒)を使用します。 なお SimVascular で用いる単位は上記の「Simulation Guide / Overview」の「Units in Simulation」を確認してください。

流体の密度(Fluid Density)は「1.06」で、流体の粘性(Fluid Viscosity)は「0.04」です。初期圧力(Initial Pressure)は「0」で、 初期速度(Initial Velocities)は「vx=0.0001 vy=0.0001 vz=0.0001」です。

Inlet Boundary Condition Specification:流入境界条件の設定

⇒ウエブ資料リンク:Inflow BC

ツール SV Simulation の「Inlet and Outlet BCs」のタブ項目を見ます。この円筒形のモデルでは、3Dモデルの表示で Reset view したときに上と下に円形の端面があり、上が2行目の「流入面:inflow」で下が1行目の「流出面:outflow」に対応しますが、まだ何も設定されていません。

流入面の境界条件を設定する前に、最初に流入面の流量を指定する単純なファイルを作成します。様々な血流解析に対応して、複数の流入波形ファイルがあると思いますが、この練習では最も基本となる定常解析用の流入条件ファイル(flow-file)として、「steady.flow」を用います。

実はこのファイルは、例題「CylinderTest1」のフォルダー「flow-files」に、「steady.flow」が用意されています。フォルダ「C:\WorkSV\CylinderTest1\flow-files」を開いて、起動したメモ帳に ファイル「steady.flow」をドラッグして内容を確認できます。

この「stable.flow」ファイルの形式は次のとおりです。ただし用意されているファイルではコメントが省略されています。コメントは必須ではありませんが、解析で使用した単位を確認するときに役立ちます。折角なのでメモ帳で追記して上書き保存してください。

次に2列の数値が続きます。 最初の列には時間の値があり、次の列にはFlow(毎秒当たりの流量:cc単位)の値が続きます。時間0秒から1秒で流量が「-100 cc/sec」で変化しないので、安定した一定の流量で、定常解析の設定になります。この流量については、次に詳しく説明します。

# Time (sec) Flow (cc/sec)
0 -100.0
1 -100.0

まず流量の正負の符号は、解析モデルの流入面から内部に流れ込む順流(フォワードフロー)の流量は、ここで検討した例 -100 のように「負の符号」です。逆に流入面から外にでる逆流(バックフロー)では、「正の符号」です。これは流入面の法線を示すベクトルが外向きを正とするため、順流では反対方向になるため負になります。

この設定のコメントにあるように、解析モデルの物理的寸法を確実に把握することは非常に重要です。分析のすべての単位(長さ、時間、流れ、密度など)は、単位として一貫している必要があります。この SimVascular にインポートする前に、Paraview でモデルのサイズを簡単に確認できるので試してください。

単位の標準設定は「CSG単位:cm/gr/s」なので、この場合に円柱の半径は r=2.0cm、長さは L=30cm です。流量の単位は、体積として考えると「cc = cm3 = ml」ですから対応しています。なお血流の流量は「WikiPedia:流量」を見ると、以下の通りです。

大動脈の場合: 断面積3〜5cm2で、流速40cm/s なので、流量で計算すると、120〜150 cm3/s = cc/s なので、上記の設定は桁数としては、それほど間違っていないです。逆に半径 r=2.0cm で、流量 100 cc/2 になるためには、流速が 7.9 cm/s になります。

具体的な設定とその解説

それでは、「Inlet and Outlet BCs」のタブ項目に関して、具体的な設定を行い、詳細な説明はそのあとにまとめます。この表には、境界条件を設定する流入面 inflow と流出面 outlet が既に並んでいます。

まず流入面 inflow を設定するので、この行 Name の「inflow」をダブルクリックします。パネルの各項目では次のように設定します。

・BC Type(境界条件の形式)は「Prescribed Velocities(指定速度の指定)」 ・Analytic Shape(断面内の分析形状)は「parabolic(放物線)」 ・Point Number(速度指定の点数)は「2(一定流量の場合でファイルsteady.flowの行数)」 ・Fourier Modes(速度変化のフーリエ級数モード)は「1(一定流量の場合)」、と指定します。

次に、Flow rate(from Files)で、先に用意した流入条件ファイル「steady.flow」を設定するので、「…」のボタンを押してファイルを「C:\WorkSV\CylinderTest1\flow-files」より「steady.flow」を開きます。パネルにファイル名が表示されます。

なお、Period(周期)はオプションであり、「steady.flow」から設定を確認されるが、ここでは指定した時間の間隔(0〜1)で「1.0」としておく。以上で完了で、OK で進めます。作業の節目に「Save SV Project」で上書き保存しておきます。

この例題「CylinderTest1」では設定済みですが、解析モデルを作成するときには、面タイプ「wall / cap」を必ず指定してください。この cap 指定の面に境界条件を設定します。

・Point Number(速度指定の点数)は、心拍1周期を規定する時間データポイントの数です。これは先に指定した「flowファイル」の時点の数とは限りません。この練習ではそれらは一致して両方の場合で2ですが、これは定常流を使用する非常に単純な例であり、2つの時点が一定の流れを規定するために必要な時点であるためです。

一般に「flowファイル」には、心拍周期全体で約20データポイントが必要であり、そこから補間されたデータには100〜200ポイント程度になります。流入面での速度ベクトルへの流入波のマッピングをスムーズに表現するには、この程度になります。

・Fourier Modes(速度変化のフーリエ級数モード)は、フーリエ平滑化により流入流量曲線を平滑化し、指定した間隔で周期関数が定義できることになります。

なお注意として、SimVascular は、 flowファイルで定義する流量データのフーリエ級数近似を行っています。この練習では定常流で一定の流れで、これを適切に表現するには1つのフーリエモードで可能です。一方変動する非定常の脈動流の問題では、 flowファイルの設定を正確に表すために、さらに多くのフーリエモードが必要になりますが、通常は脈動の問題では10個のフーリエモードで十分です。

Outlet Boundary Condition Specification:流出境界条件の設定

⇒ウエブ資料リンク:Inflow BC

流出面には弱く作用する圧力を想定しています。 この内容は、本練習で参考にしているウエブ資料の「Boundary Condition Specification: the Physical Side of the Problem」で、解説された式によって数学的に表現されます。

この練習では、まず流出面の初期状態の圧力を p0 = 0 を設定します。 結果として流出面に設定された総圧力は、考慮された血流の圧力計算式の結果になります。つまり、抵抗値設定の方法、インピーダンス設定の方法、RCR設定の方法、冠状動脈の設定方法などです。

それでは、具体的な流出口の境界条件の設定を始めましょう。ここでは最も単純な抵抗値設定の方法とします。

「Inlet and Outlet BCs」のタブ項目に関して、流出面 outlet を設定するので、この行 Name の「outlet」をダブルクリックします。境界条件の設定パネルが表示されたら、以下のように設定します。

・BC Type(境界条件の形式)は「Resistance(抵抗値の指定)」 ・Resistance(抵抗値)は「1333」 ・Distal Pressure(初期状態の周囲の圧力)は「0(標準設定)」以上で完了で、OK で進めます。作業の節目に「Save SV Project」で上書き保存しておきます。

重要なヒント:対応するモデルを作成するときに面タイプ(BC Type)を指定してください。

Advanced Options for splitting BC:複数に分かれる境界条件のための詳細設定

多くの臨床的な解析事例では、複数の分かれた流出面に対する抵抗値や蓄積容量を個別に明示的に設定する代わりに、複数の流出面の合計値を分割する方法を取ることが期待されます。この特性を用いた設定では、初めに流出面の全体として抵抗値や蓄積容量の初期値を0に設定します。

この練習では流出面が1つだけで、具体的にこの設定は用いないので省略します。

Wall Property Specification:壁面特性の設定

⇒ウエブ資料リンク:Wall Property

この練習では、先の流出面の境界条件を2種類想定し、ここでの壁面特性の設定を3種類想定しています。この組み合わせが最初に説明した以下の通りです。
Example1:steady:基本となる定常解析(流出部は単純な抵抗係数で設定し血管壁の条件は固定設定)
Example2:steady_rcr:定常解析でRCR流出条件で設定(血管壁の条件は固定設定)
Example3:steady_rcr_deformable:定常解析でRCR流出条件で設定で、血管壁は固定量だけ変形する
Example4:steady_rcr_variable:定常解析でRCR流出条件で設定で、血管壁は血流に対応して任意に変形する

最初の「Example1:steady」では、基本となる定常解析として、流出部は単純な抵抗係数で設定し、壁面の特性は、固定で滑りなし(no-slip)の境界条件として設定します。

それでは、具体的な流出口の境界条件の設定を始めます。ツール「SV Simulation」の「Wall Properties」タブに進みます。メニューより Type は「Rigid」とします。

なお SimVascular では、この他に「Deformable(Constant):変化可能(一定値)・Deformable(Variable):変形可能(変動値)」の選択肢もあり、これらは、それぞれ Examples 3 and 4 で設定します。

Solver Parameters:ソルバーパラメータの設定

⇒ウエブ資料リンク:Solver Parameters

血流解析ソルバー SvSolver には、多数のパラメータ(設定項目)があります。しかしこの練習では、これらの中で数個を具体的に設定する必要があるだけです。全てのパラメータを確認するためには、付録を参照してください。まずここでは、以下の4つを設定します。ツール「SV Simulation」の「Wall Properties」タブに進み、パラメータの一覧表を確認します。

・Number of Timesteps(解析タイムステップ数):200 ・Time Step Size(解析ステップ幅の時間・秒単位):0.03 ・Number of Timesteps between Restarts(結果出力での処理のステップ間隔):10 ・Step Construction(ステップ内での収束反復数):2(標準の設定で流速が一定の解析では2で十分とのこと)

Time Step Parameters Block:時間ステップパラメータのブロック(1〜3行)

この例では、一覧表の2行目:解析タイムステップ数(Number of Timesteps):200、および3行目:解析ステップ幅の時間(Time Step Size):0.03として設定します。一覧表の対応する Value の欄をクリックしてに入力します。

これらの2行は、血流解析を実行する物理的な時間を定義します。つまりこの場合には、全体の解析時間(T)= 解析タイムステップ数(N)×解析ステップ幅の時間(Δt)となり、数式では、T = N × Δt = 200×0.03 = 6.0秒です。

注意として、この値は以前に指定した流入条件の脈拍の周期の時間とは一致しません。この練習の場合には前に述べたように、定常流を対象としているので脈拍周期について考えることは実際には意味がありません。

しかしこの分析を6回の脈拍周期に対して実行したい場合、全体の解析時間を6秒間とした問題を実行する必要があります。もし解析ステップ幅の時間の設定を同じにした場合(Δt=0.03秒)、N=200の解析タイムステップ数が必要になります。

注意:この解析タイムステップ数 N は、以下で次の説明で定められた解析ステップ幅の時間 Δt を前提として、血流解析で必要となる特定の物理現象を再現するために必要なタイムステップの総数であることに注意してください。

注意:ここで重要な問題は、解析ステップ幅の時間 Δt の妥当な値をどのように設定するかです。実は、これに対する簡単な答えはありません。まず Δt は、解析の時間に関する離散化を制御するパラメーターです。これは、解析モデルのメッシュによって与えられる空間に関する離散化と同様の方法で影響します。

この2つのパラメータは、より細かくすればより正確な結果が得られますが、問題を解くための計算資源がより大きく、解析時間がより長くなります。ここではパラメータの設定方法について、厳密で理論的な詳細については詳しく説明しません。

その代わり、このパラメータを評価し設定するための合理的な手順を紹介します。妥当な解析ステップ幅の時間 Δtを推定する手順は、「CFL数」と呼ばれる無次元パラメーターに基づいています。

この「CFL数」は、流体領域で発生する速度(v)、時間的な解析ステップ幅の時間(Δt)、およびメッシュの空間的な離散化パラメーター(つまりメッシュサイズ)(h)に関して、次式のように関連付けます。CFL = vΔt / h(分子のvΔtは1解析ステップで流体が移動する距離/分母はメッシュの寸法)

有限要素法の解析では、物理現象がメッシュの寸法の中で、順番に流体が移動することが前提です。つまり流体の移動距離とメッシュの寸法は同等であるべきで、この「CFL数」は、約1.0にする必要があります。これは、流体空間での挙動の速度について、時間的および空間的離散化がバランスしていることを意味します。

例えば、平均予想速度が約 v=16.7 cm/s であるとして、空間的な離散化パラメーターつまり有限要素サイズは h=0.5 とすると、上記の考えに従い、1に近い「CFL数」を設定すると、次のようになります。 Δt = h v = 0.5 16.7 = 0.03秒

もちろん、現実世界の問題では、評価がはるかに複雑になると想像できます。モデルの最大速度がどこにあるか、メッシュ要素のサイズはどこにあるかなどを推定することは、非常に困難です。この解析ステップ幅の時間 Δt は、流体解析の線形ソルバーの性能に非常に重要な影響を与えるパラメーターです。例えば小さくすると、ソルバーが解を見つけやすく(収束しやすく)なりますが、特定の時点に到達するまでに時間がかかります。

Output Control Block:解析結果の出力制御のブロック(4〜9行)

一覧表の5行目:Number of Timesteps between Restarts(結果出力での処理のステップ間隔)は、10 を設定します。この値は、解析ソルバーが結果ファイルを保存する頻度を示します。この練習では、実際には 200 の異なる時点(ステップ)で、数値解析の 200 の解を計算していますが、これは上記で検討した解析ステップ幅の時間 Δt から定まる解析タイムステップ数 N になります。

しかし一般的には、すべての時間ステップごとに結果ファイルを保存する必要はありません。つまり2つの連続した解析結果は、Δt=0.03秒しか離れていないことに注意してください。この設定では、10 回の解析毎に1つの結果をファイルに保存するように、ソルバーに設定しています。

したがって、ソルバーの出力ファイルは次のようになります。restart.0.*、restart.10.*、restart.20.*、restart.30.*、…、restart.190.*、restart.200.* (ただし最初の0ステップは、初期状態であって解析結果ではありません)

Step Construction Block:増分計算の収束回数のブロック(10〜11行)

この設定は、1解析タイムステップ内の非線形反復ループの収束回数を設定します。初期設定では、各タイムステップでは2回の非線形収束計算を行います。各収束によって、解析ソルバーは結果を更新して正しい結果を得られるようにします。

注意:数値解析の非線形収束計算の、適切な回数を決定することも、重要な問題です。原則として、数値解析の結果の残差(つまり、誤差)が、十分小さくなるまで繰り返す必要があります。しかし、各タイムステップで多くの非線形収束計算を行うと、非常に計算コストがかかります。

一般にこの練習のような定常流の問題では、1回または2回の非線形収束回数で十分です。拍動性の問題については、少なくとも3回の非線形反復が必要です。さらに変形可能な壁条件の問題では、4回以上の非線形収束計算が必要です。

この収束回数のパラメーターは、解析ステップ幅の時間 Δt および有限要素メッシュによって与えられる空間離散化の品質とともに、血流解析の性能に重要な影響を与えます。これらのパラメーターを適切に選択することで、シミュレーションはより高速かつ正確に実行されます。これについては後で詳しく説明します。

ここで説明する一連の指示は、svSolver が取り得るすべての可能なパラメーターの非常に小さなサンプルを構成します。より詳細な議論はこの「セクション」で見つけることができます。

Creating Data Files for Simulation:シミュレーション用ファイルの作成

⇒ウエブ資料リンク:Creating Data Files

血流解析を実行する前に、PreSolver と FlowSolver が必要となるデータファイルを作成する必要があります。以下の記述で「*」は解析ジョブ名です。

PreSolverに対して:
= *.svpre: 入力スクリプトファイル:解析に用いるファイルや基本的なパラメータ設定など

FlowSolverに対して:

= geombc.dat.1: PreSolver によって作成され、解析問題を定義するための、メッシュ情報と境界条件で構成されます。
= restart.0.1: PreSolver によって作成され、解析問題の初期条件を定義します。
= numstart.dat: 最初の内容は数値0となり、この数値は、解析を実行するときに、出力する解析結果ファイルの番号として、初期条件として開始するステップ数を指定する値で、血流解析ソルバーによって使用されます。
= bct.dat: 流入条件を定義する「*.flow」ファイルで指定された血流の時間変化に対応して、解析モデルの流入面で時間に依存する速度ベクトルを定義します。 この「セクション」を参照してください。
= solver.inp: 血流解析ソルバーの詳細情報を提供し、タイムステップサイズ、タイムステップの数、非線形収束の数、境界条件制御などのパラメーターを指定します。この「セクション」では、詳細な説明を示します。

これらの5つのファイルは、分析を実行するために最低限必要なものです。 ただし、より複雑な境界条件を含むより複雑なシミュレーションを実行する場合は、さらに多くの入力ファイルが必要になります。

さらに、以下に示す4つの流出面での境界条件を用いる場合には、追加の入力ファイルが必要です。

【インピーダンス境界条件シミュレーション】:
この5つの標準ファイル(geombc.dat.1、restart.0.1、numstart.dat、bct.dat、solver.inp)に加えて、各インピーダンスを定義する流出面における時間領域でインピーダンス関数を設定するする必要があります。 つまりは、各流出面の流量の履歴を定義することになります。そのため2つの追加のASCII形式のテキストファイルが必要になります。「impt.dat」(各流出面でのインピーダンス関数を含む)と「Qhistor.dat」(時間ごとの流量履歴を含む)です。 詳細は「こちら」。

【RCR境界条件シミュレーション【 この5つの標準ファイル(geombc.dat.1、restart.0.1、numstart.dat、bct.dat、solver.inp)に加えて、各流出面での圧力と流量の間の関係を設定するASCII形式のテキストファイルで、RCRパラメータを設定する必要があります つまりは、各流出面に圧力を定義することになります。そのため、このようなパラメーターを含む「rcrt.dat」という名前のファイルを定義することが必要になります。詳細は「こちら」。

【冠動脈境界条件シミュレーション】:
この5つの標準ファイル(geombc.dat.1、restart.0.1、numstart.dat、bct.dat、solver.inp)に加えて、ASCII形式のテキストファイルで冠動脈モデルパラメータを指定して、各流出面の流れと圧力を定義します。このためには、各パラメーターを含む「cort.dat」という名前のファイルを定義することによって行われます。 詳細は「こちら」。

【閉ループ境界条件】:
これには、患者を想定した血液循環を表現するための集中パラメーターネットワークモデルが必要で、さらにこれを実現する実行可能ファイルの実装が必要です。これについては現時点では実装されておらず、このチュートリアルの今後のバージョンで取り上げます。 乞うご期待!

設定ファイル名の番号に関する説明: 例えば「geombc.data.1」と「restart.0.1」の両方のファイルでは、ファイル名の最後についた番号「.1」は、並列処理で領域分割したパーティション番号を示します。 つまり血流解析ソルバー「svSolver」には、MPI(メッセージパッシングインターフェイス)を使用して、つまり、複数のプロセッサまたは複数のCPUコアを使用して、並列に問題を実行する機能があるからです。

例えば4つの複数のプロセッサを使用してジョブを実行する場合、最初の処理は上記の2つのファイルを、解析に使用する多くのプロセッサに「分割」することです。これより計算をより高速に実行できます。 たとえば、svSolver で後で4つのプロセッサを使用する場合、これらのファイルは次のように分割されます。

geombc.dat.1 => geombc.dat.1、geombc.dat.2、geombc.dat.3、geombc.dat.4
restart.0.1 => restart.0.1、restart.0.2、restart.0.3、restart.0.4

大まかに言えば、これら4つのファイルはそれぞれ、元の分割されていないファイルサイズの1/4です。一般的なある時点のタイムステップ「n」の場合、解析結果ファイルは次のファイルによって与えられます。

restart.n.1、restart.n.2、restart.n.3、restart.n.4、...

Creating Data Files:実際のデータファイルを作成方法

この手順では、「CylinderTest1」プロジェクトの「Simulations」フォルダ内に、新たにジョブフォルダーを作り、この中に以下に示す各種の入力ファイルを作成します。まずツールの「Create Files and Run Simulation」タブに進みます。

確認のため、対象となる CylinderTest1 プロジェクトの Simulations フォルダ「C:\WorkSV\CylinderTest1\Simulations」開くと、現在作成している「steady.sjb」ジョブファイルのみがあります。

まず Choose Mesh の欄でメッシュを設定するので「cylinder」を選択します。次に「Create Data Files for Simulation」ボタンを押します。少し待ってデータが作成が完了したメッセ―が出るので、OK で進めます。これよりジョブ名「steady」を使用した新しいディレクトリが「Simulations」フォルダーの下に作成され、その中に次のフォルダーやファイルが作られます。

プリソルバー PreSolver 用の作成:
mesh-complete(フォルダー) inflow.flow steady.svpre

フローソルバー FlowSolver 用の作成:
geombc.dat.1 restart.0.1 bct.dat(および bct.vtp) solver.inp numstart.dat
(該当する場合に作られるがこの状態では、rcrt.dat, cort.dat はなし)

Running Simualtion Jobs:血流解析シミュレーションの実行

⇒ウエブ資料リンク:Running Job

実際にシミュレーションを実行する前に、必要に応じて「Import Extra Files into Job」ボタンをクリックして、追加ファイルをシミュレーションジョブに追加する必要がある場合があります。 この練習では、「importint」としてのの追加ファイルは必要ありません。

この練習ではまず1CPUの逐次処理で進めます。今後に、シミュレーションジョブを並列処理で実行する方法には、まず「Use MPI」にチェックを入れて、隣のスライダーで並列処理のプロセス数設定します。SimVascular では、解析を実行するPCのCPUを調べて、物理コア数ではなく論理コア数分の並列処理が設定可能です。

次に「Starting Step Number」で、解析の開始ステップ番号を設定します。デフォルトは0ですが、同じジョブを再度実行すると、前回のシミュレーションの最後のタイムステップを使用するので、解析ステップ数が追加されてゆきます。

つまりこの練習の設定では、全体 200 ステップで出力増分 10 で解析をした後で、デフォルトで設定しないと、解析ステップ 210 から追加されます。結果を上書きして残す場合には、ここに0を指定する必要があります。

ここでは逐次処理で試すので、「Use MPI」にチェックを入れずに、「Run Simulation」ボタンをクリックします。ジョブの実行中、シミュレーションの進行状況はツール上部の表示「Job Status」に簡単な進捗度合い(%表示)と、メインウィンドウの下部にあるステータスバーに表示されます。この内容は以下の通りです。

実行中のジョブの名前:完了したパーセンテージ  さらに以下の情報:「現在の解析ステップ] [解析時間] [非線形収束計算の残差] [再変化の対数]…、などが続きます。

表示「Job Status」が「Running: 100% completed」となり、ジョブが 100% 完了すると、ジョブが完了したことを通知するメッセージが表示されます。ここで「Show Details…」ボタンで、シミュレーションの進行状況に関する詳細情報を取得できます。同等の内容は、後のの手順で「histor.dat」より確認します。確認ができたら OK で進めます。表示「Job Status」が「Simulation done」となります。

なお解析ジョブの実行中に、完了する前にジョブを終了できます。 シミュレーションを停止する方法:
「SV Data Manager」で、実行しているジョブ名「steady」のジョブノードを右クリックします。メニューの「Stop Simulation」をクリックすると停止します。

この解析ジョブのフォルダ「C:\WorkSV\CylinderTest1\Simulations」の中にある「steady」フォルダを確認します。この中の「histor.dat」ファイルを開いて、数値解析の進行状況を確認することができます。これには、数値シミュレーションの実行状況を評価するための詳細情報が含まれています。これらの各列の意味を簡単に説明します。

この「histor.dat」ファイルには、aからhまでの8列の情報が、解析ステップ1から 200 まで、各ステップに収束計算を2回しているので、全体で 400 行分の情報が列記されています。
a:1 b:1.30E+001 c:1.16E-002 d:(0) e:2.10E+002 f:2.62E+028 g:< -10474 1 | 15 > h:[199-190]

= a:解析時間ステップ番号 − 各時間ステップ番号が2回現れることがわかります。これは2回の非線形収束計算を実行しているためです。この列は1から解析タイムステップの総数(この場合は200)までになります。
= b:解析のCPU時間(秒) − 解析を開始してから計測された計算時間です。
= c:非線形残差の確認 − これにより、解析結果がどの程度正確であるかがわかります。各タイムステップで、各解析ステップで2行目の数値は、1行目の数値よりも小さいことを確認してください。これは、解析ソルバーの非線形収束ループが正しく実行されていることを示す良い結果です。なお、解析タイムステップの最後(この場合200)の非線形残差は、常に最大でも「1.0e-03」を目指す必要があります。 = d:残差の対数 − これは、数値解析の収束の状態をすばやく評価するための非常に優れた方法です。この数値が非常に小さく、さらに負の場合、それは良い数値解析が実現できている証拠です。この「-10」の値は、数値析の開始から1桁、-20桁、2桁など、残差を減らしたことを意味します。
= e:速度場の残差のエントロピーノルム(最大Δu/ u)
= f:圧力場の残差のエントロピーノルム(最大Δp/ p)
= g:< Ga Gb | Gc>
Ga:最大残差が発生するブロック(各ブロックにはデフォルトで255要素があります) Gb:エラーが最大のブロック内のノード Gc:最大残差と平均残差の比率の対数測定:この数値をできるだけ小さくすることが、残差の空間的均一性の指標になります 
= h:[ Ha - Hb ] 
Ha:プレコンディショナーソルバーで使用されるクリロフベクトルの数 Hb:GMRESソルバーで使用されるクリロフベクトルの数 (なお標準の svLS を使用する場合、これらの数値はゼロです。)

ここで血流解析の実行が完了すると、保存を指定した解析結果に関して、全体の解析ステップの中で、各時間に対応する解析結果ファイルのセットが作られます。

また別の場面では、完了したシミュレーションジョブを、改めて続行したい場合があります。前の処理プロセス(並列数)と同じ数のプロセスを使用するならば、単に「Run Job」ボタンをクリックするだけです。 この場合に解析ソルバーは、前の結果の終了時の解析タイムステップ 200 から継続して、追加の形の次の 200 ステップのシミュレーションを開始します。

血流解析シミュレーションが完了すると、解析設定情報を含む解析結果ファイルを可視化し確認する準備が整います。これらのファイルを変換して、可視化用ファイルを生成します。この可視化手順については、次のセクションで説明します。

Running Simualtion Jobs at Clusters:並列処理クラスタ―での血流解析シミュレーションジョブの実行

大規模解析モデルを用いて、高速な血流解析シミュレーションを実行するためには、解析に必要なデータファイルをエクスポートし、並列処理クラスターにアップロードして、血流解析シミュレーションを実行することもできます。 この場合には解析用の並列処理クラスターで、SimVascular のフローソルバー「MPI並列処理用:svSolve」が使用可能であることが必要です。

実行手順の概要としては、「SV Data Manager」で対象となるジョブ名を右クリックして、メニューの「Export Data Files」より、指定したフォルダに解析に必要なファイル群が保存されます。このファイルを並列処理クラスタ―に転送し、ここで mpiexec を用いて svsolver を並列実行します。結果ファイルが作られるので、これを SimVascular の解析フォルダに戻して、通常の方法で可視化用データに変換します。

Post-processing:解析結果の可視化

⇒ウエブ資料リンク:Postprocessing

以下の解析結果の可視化では、SimVascular ではなく「ParaView」を利用しますが、まずはフローソルバー「svSolve」の解析結果ファイル「restart」を、可視化用ファイルに変換します。

Generating the *.vtp and *.vtu files in SimVascular:SimVascular での可視化用ファイル *.vtp と *.vtu の作成

可視化用ファイル *.vtp と *.vtu を作成するために、以下の手順で進めます。

まずツール「SV Simulation」の「Convert Result」タブに進みます。まず解析結果が保存されているディレクトリが「C:/WorkSV/CylinderTest1/Simulations/steady」であることを確認します。

次に、変換する解析ステップを設定します。まず Start は最初の解析結果ファイルのステップ番号で(0)、次に Stop は最後の解析結果ファイルのステップ番号で(200)、最後の Increment は解析結果ファイル出力の間隔のステップ数で(10)と設定します。

最後に、出力する情報を選択するので、「Volume Mesh と Surface Mesh」にチェックを入れて、ここで「Convert…」ボタンを押して変換します。変換したファイルを保存するフォルダの場所を指定するので、「E:\WorkSV\CylinderTest1\Simulations\steady」のフォルダーを選択します。これは上記の「Result Dir」で確認した場所と同じです。

少し待つと、変換が完了したメッセージが表示されます。詳細な情報は「Show Details…」で確認できます。変換したファイルの処理内容が列挙されます。OK で終了します。可視化用ファイルは、指定したフォルダ内に新しく作られた「steady-converted-results」フォルダ内に、変換された「vtp, vtu」ファイルして保存されます。

可視化用ファイルの変換が完了すると、ツールの設定で流れの数値情報の出力(標準でチェック)「Calculate Flows」がオンになっている場合、エクスポートされたフォルダーに、以下の4つのテキストファイルが作成されます。

= all_results-flows.txt: 各解析ムステップ対応した流入と流出の各面の流量
= all_results-pressures.txt: 各解析ムステップ対応した流入と流出の各面の圧力
= all_results-averages.txt: 流入と流出の各面の圧力、流量の平均値、流量の最大値、流量の最小値
= all_results-averages-from_cm-to-mmHg-L_per_min.txt: all_results-averages.txtと同じ情報ですが、単位を圧力は mmHg で、流量は L/min として計算した結果です

この SV Simulation の Convert Results での、解析結果の変換では、その他のオプションも用意されています。

= As Single File: このオプションは、全解析ステップの結果を、単一ファイルとして、「*.vtpまたは*.vtu」ファイルに結合します。
= Last Step to restart.x.0: このオプションは、すべての解析結果ファイルを、最後の単一の解析結果ファイル restart.200.0 に結合します。このファイルは、次の新しい解析においては、ファイル名を restart.0.1 に変更してから、解析結果を引継ぎ継続するような形で使われます。

Visualizing the results in ParaView:ParaView を用いた解析結果の可視化

解析ステップにおいて時間によって変化する解析結果を可視化するために、ツール「ParaView」を使用します。まず Paraview を起動します。

ツールのメニューバーの「File」から「Open…」を選択します。「Open File」ダイアログが表示されます。 プロジェクトフォルダの変換した解析結果を保存したフォルダ「E:\WorkSV\CylinderTest1\Simulations\steady」に移動し、ファイル「all_results..vtu」を選択して、「OK」をクリックします。

「Properties」のパネルで「Apply」をクリックすると、解析結果が画面に表示されます。この場合には、圧力表示の初期状態になりました。解析ステップの最後を選択するために、Time の欄で最大の 20 にすると、定常解析の最後の収束した結果が表示されます。

この時点で、回転ボタンまたは移動ボタンを使用してモデルを回転させることにより、モデルを操作できます。 「Surface with Edge」オプションを使用して、有限要素メッシュを視覚化します。

ParaView のマウス操作: 左ドラッグ:2軸回転 中ドラッグ:平行移動 右ドラッグ・ホイール回転:拡大縮小

Visualizing Pressure Results:圧力結果の可視化

最初に、表示する解析ステップを、「 0 から 20 」(最後に可視化可能なタイムステップ)に変更します。この練習では、上記で既に対応すみで、最終結果が ParaView で表示されます。

なおこの解析結果で表示可能な物理量としては、average_pressure:平均圧力、average_speed:平均流速、pressure:圧力、velocity:流速、vinplane_traction:せん断力、などがあります。

次に圧力の単位は解析の設定で dyn/cm2 ですが、これを変換してみます。まず表示を「pressure」に戻してみると、現在の設定の表示では、右下のスケールは 1.3e+05 dyn/cm2 を表示しています。この圧力表示を「mmHg単位」(1 mmHg = 1333.2 dyn/cm2)に変換してみます。 これを行うには、電卓ツールを使用します。

ツールバーの3段目の左端の「電卓ツール」を選択します。変更された Properties で、Result Array Name を「Pressure in mmHg」とし、その下の計算式では「pressure / 1333.2」を入力し、Apply を押すと、表示が「1.0e+02 mmHg」つまり「100 mmHg」となります。図形の表示は変わりませんが、スケールの名称と数値が単位変更で変わっています。

Examples:他の条件での例題設定

⇒ウエブ資料リンク:Examples

上記の最初の「Example1」の例は、流入条件に放物線状分布(parabolic)の定常流があり、流出条件に抵抗値設定がある、円柱の解析空間による事例です。 以下のの例では引き続きシ円柱の解析空間を使用して、流入条件として円管内の一様分布の流れである基本となる定常流(plug:プラグフロー)への変更を想定します。

さらに、流出条件を「RCR形式の集中パラメータ設定の境界条件」に変更し、流出条件を「固定量だけ変形可能な壁面」、「血流に応じて変形可能な壁面」の2種類の設定に変更し、以下の3種類を事例を追加で設定します。

Example 2:steady_rcr:円管にプラグフローの定常解析で、RCR流出条件で設定(血管壁の条件は固定設定)
Example 3:steady_rcr_deformable:円管にプラグフローの定常解析で、RCR流出条件で設定で、血管壁は固定量だけ変形する
Example 4:steady_rcr_variable:円管にプラグフローの定常解析で、RCR流出条件で設定で、血管壁は血流に対応して任意に変形する

Example 2:steady_rcr:例題2「steady_rcr」

⇒ウエブ資料リンク:Example 2

この例題では、円管にプラグフローの流入条件の定常解析で、RCR形式の集中パラメータ設定の流出条件を設定し、血管壁の条件は固定設定とした解析設定を示します。

それでは、以前に作った「Example 1:steady」のジョブを、コピー&ペーストして、新しいジョブ「Example 2:steady_rcr」を作りましょう。

手順としては、SV Data manager の「Simulations / steady」の項目を右クリックして、メニューで「Copy」して、「Simulations」の項目の右クリックのメニューで「Paste」すると、新しい解析ジョブ設定「steady_copy」が作られます。右クリックメニュー Rename でこのジョブの名前を「steady_rcr」に変更します。ここで「Save SV Projects」でプロジェクトを上書き保存します。常に操作ごとに実行してください。

それでは、例題2の変更点である境界条件を設定します。まず「Simulations / steady_rcr」項目をダブルクリックします。ツール SV Simulation の「Inlet and Outlet BCs」に進みます。

まず流入条件を変更するので、表の「inflow」の名称をダブルクリックし、設定パネルを開きます。Analytic Shape(流入条件の断面分布形状)を「plug」に変更し、後はそのままで OK で進みます。

次に流出条件を変更するので、表の「outlet」の名称をダブルクリックし、設定パネルを開きます。BC Type(境界条件の設定方法)を「RCR」に変更し、3つのパラメータ(Rp,C,Rd)を「121 0.000015 1212」に設定し OK で進みます。

境界条件の設定変更に対応して、解析条件も変更するので、「Solver Parameters」タブに移動します。「2行:Number of Timesteps」を「500」、「3行:Time Step Size」を「0.001」、「5行:Number of Timesteps between Restarts」を「20」、に変更します。

例題1と同様な方法で、解析を実行するので「Create Files and Run Simulation」タブに移動します。設定は例題1を引き継いでいるので、Choose Mesh は cylinder が選択されているので、変更点のみを説明します。

ここでは並列処理を試すので、「Use MPI」にチェックを入れて、Number of Processesを「8」として、「Create Data Files for Simulation」で入力データを作成した後で OK で進めて、「Run Simulation」で解析を実行します。完了の表示は OK で進みます。

次に解析結果を可視化用に変換するので、「Convert Results」タブに移動します。解析結果は Rsult Dir の「C:/WorkSV/CylinderTest1/Simulations/steady_rcr/8-procs_case」にあります。変換する解析ステップの設定は「Start:0・Stop:500・Increment:20」とします。

オプションは、出力項目として「Volume Mesh・Surface Mesh・Calculate Flows」の3つに選択し、最終結果のファイル名指定で「Last Step to restart.x.0」を選択し、「Convert…」ボタンで変換します。変換ファイルを保存先は、上記の Result Dir nフォルダを選択します。変換完了の表示は OK で進みます。

この例題2では、RCR形式の境界条件設定時のパラメータの影響を考慮する必要があるため、より小さい解析ステップ幅の時間(0.03⇒0.001)が使用されています。 より正確な数値計算を行うには、時間刻み幅を、時間定数(RC =(121 + 1212)0.000015 = 0.02)よりも大幅に小さくする必要があります。 ステップサイズが小さいと、全体の解析時間を実現するためのタイムステップの数も増加します。

Example 3:steady_rcr_deformable:例題3「steady_rcr_deformable」

⇒ウエブ資料リンク:Example 3

この例題では、円管にプラグフローの流入条件の定常解析で、RCR形式の集中パラメータ設定の流出条件を設定し、血管壁は均一な特性を持ち固定量だけ変形するような、解析方法を示します。

この例題3のように、変形可能な血管壁の条件を数値解析する最も確実な方法は、最初に同じ境界条件で変形しない固定壁の条件で数値解析することです。 この例題3にとって前の例題2は、初期流れ場を得るために実行する必要がある固定壁の解析条件です。例題2のシミュレーションが完了して変換された後、この最後のステップの解析結果ファイルは、単一のファイル(restart.500.0)に統合されます。

それでは、前に作った「Example 2:steady_rcr」のジョブを、コピー&ペーストして、新しいジョブ「Example 3:steady_rcr_deformable」を作りましょう。

手順としては、SV Data manager の「Simulations / steady_rcr」の項目を右クリックして、メニューで「Copy」して、「Simulations」の項目の右クリックのメニューで「Paste」すると、新しい解析ジョブ設定「steady_rcr_copy」が作られます。このジョブの名前を「steady_rcr_deformable」に変更します。ここで「Save SV Projects」でプロジェクトを上書き保存します。常に操作ごとに実行してください。

それでは、例題3の変更点である初期流れ場(IC)壁面境界条件(BCs)を設定します。まず「Simulations / steady_rcr_deformable」項目をダブルクリックします。ツール SV Simulation の「Basic Parameters」に進みます。

表の「IC File」をダブルクリックして、初期流れ場(IC)のファイルを選択するために、例題2の変換した解析結果のフォルダ「C:\WorkSV\CylinderTest1\Simulations\steady_rcr\8-procs_case\steady_rcr-converted-results」から「restart.500.0」ファイルを選択します。

次に「Wall Properties」タブに進みます。血管壁の特性 Type を「Deformable(Constant)」として、血管壁の材料特性を以下の通り設定します。
血管壁の厚さ Thickness:「0.2 cm」 血管壁の弾性係数 Elastic Modulus:「4000000 dyn/cm2 = 0.4 MPa(通常の大動脈の剛性3MPaの1/10の柔らかい設定)」 ポアソン比 Poisson Ratio:「0.5(初期標準値)」 せん断剛性係数 Shear Constant:「0.833333(初期標準値)」 血管密度 Density:「1.0 g/cm3(水と同等)」 圧力 Pressure:「133300 dyn/cm2 (初期圧力として、例題2の固定血管壁の解析結果から求められた値)」

この設定を考慮した解析用データファイルを作成するために、「Create Files and Run Simulation」タブに移動します。設定は例題2と同等とします。まず「Create Data Files for Simulation」で入力データを作成した後で OK で進めて、「Run Simulation」で解析を実行します。暫く待つと解析が終了するので、完了の表示は OK で進みます。

この解析結果は例題2とは異なり、解析ステップでは初期変位も解析結果を出力、この最初の変位を vtp ファイルとして「displacement.vtp」に出力して解析結果の検証を可能にします。最後に例題2の結果ファイル restart.500.0 からコピーした例題3の初期状態の結果「restar.0.1」に追加します。

例題2と同様な方法でジョブを実行したら、解析結果の変換は「C:\WorkSV\CylinderTest1\Simulations\steady_rcr_deformable\8-procs_case」を指定して、フォルダ「steady_rcr_deformable-converted-results」にある結果ファイル「all_results..vtu」を ParaView で結果を確認できます。

例題3では、ParaView の可視化項目として「displacement」があり、「Warp by Vector」機能を用いて、変形図を確認することができます。

Example 4:steady_rcr_variable:例題4「steady_rcr_variable」

⇒ウエブ資料リンク:Example 4

この例題では、円管にプラグフローの流入条件の定常解析で、RCR形式の集中パラメータ設定の流出条件を設定し、血管壁は変化する特性を持ち自由に変形するような、解析方法を示します。例題3と同様に、例題2のシミュレーション結果を初期流れ場として使用します。

それでは、前に作った「Example 3:steady_rcr_deformable」のジョブを、コピー&ペーストして、新しいジョブ「Example 3:steady_rcr_variable」を作りましょう。

手順としては、SV Data manager の「Simulations / steady_rcr_deformable」の項目を右クリックして、メニューで「Copy」して、「Simulations」の項目の右クリックのメニューで「Paste」すると、新しい解析ジョブ設定「steady_rcr_deformable_copy」が作られます。このジョブの名前を「steady_rcr_variable」に変更します。ここで「Save SV Projects」でプロジェクトを上書き保存します。常に操作ごとに実行してください。

それでは、例題3の変更点である血管壁面や流入面や流出面の境界条件(BCs)を設定します。まず「Simulations / steady_rcr_variable」項目をダブルクリックします。ツール SV Simulation の「Wall Properties」に進みます。血管壁の特性を変更してみましょう。

まず血管壁の特性 Type を「Deformable(Variable)」として、血管壁の材料特性を以下の通り設定します。
まず共通の設定として、ポアソン比 Poisson Ratio:「0.5(初期標準値)」 せん断剛性係数 Shear Constant:「0.833333(初期標準値)」 血管密度 Density:「1.0 g/cm3(水と同等)」 圧力 Pressure:「133300 dyn/cm2 (初期圧力として、例題2の固定血管壁の解析結果から求められた値)」

3つの境界条件(wall・outlet・inflow)を、以下の通りに順に設定します。
1:wall:血管壁の弾性係数 E. Modulus:「4000000 dyn/cm2 = 0.4 MPa(通常の大動脈の剛性3MPaの1/10の柔らかい設定)」(Thickness は不要)
2:outlet:流出面の厚さ Thickness:「0.1 cm」(E. Modulus は不要)
3:inflow:流入面の厚さ Thickness:「0.2 cm」(E. Modulus は不要)

次に「Solver Parameters」タブに進みます。この例題4では非線形の増分解析での収束計算 Step Construction を「10」とします。これは血管壁が自由に変形する場合には、血流解析ソルバーが、正しい結果を得るためにより多くの繰り返し収束計算が必要とするためです。

この設定を考慮した解析用データファイルを作成するために、「Create Files and Run Simulation」タブに移動します。設定は例題2と同等とします。まず「Create Data Files for Simulation」で入力データを作成した後で OK で進めて、「Run Simulation」で解析を実行します。暫く待つと解析が終了するので、完了の表示は OK で進みます。

例題3とは異なり、この解析設定ステップでは、血管厚と剛性を均一に設定する代わりに、血管厚と剛性を変化するものとして血管壁に割り当て解析します。この結果として「varwallprop.vtp・displacment.vtp」が作成され、それぞれ解析結果としての「血管厚と剛性と初期変位」が表示されます。

例題2と同様な方法でジョブを実行したら、解析結果の変換は「C:\WorkSV\CylinderTest1\Simulations\steady_rcr_variable\8-procs_case」を指定して、フォルダ「steady_rcr_deformable-converted-results」にある結果ファイル「all_results..vtu」を ParaView で結果を確認できます。

例題4でも、ParaView の可視化項目として「displacement」があり、「Warp by Vector」機能を用いて、変形図を確認することができます。また例題4独自の結果として、解析ジョブフォルダ「C:\WorkSV\CylinderTest1\Simulations\steady_rcr_variable」の中に、「varwallprop.vtp・displacment.vtp」があり可視化が可能です。

AboutSimVascular

【このページの閲覧数:総計:352 今日:1】


MEMO


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-08-08 (土) 13:49:45 (77d)