公式サイトの 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

AboutSimVascular

【このページの閲覧数:総計:1870 今日:7】


MEMO


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