(57)【要約】【課題】構造体が変形しても流脈線の追跡を可能とする。【解決手段】処理部１２は、位置情報に表される複数のグリッド点Ｖ１〜Ｖ４の加速度運動に起因する誤差を補正する補正値を含む計算式により、複数のグリッド点Ｖ１〜Ｖ４上の流体の複数の第１時刻の各々における速度の時間微分値をそれぞれ算出する。次に処理部１２は、解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子の、第１時間間隔より短い第２時間間隔の複数の第２時刻の各々における位置を、複数のグリッド点Ｖ１〜Ｖ４上の流体の複数の第１時刻の各々における速度と速度の時間微分値とに基づいてそれぞれ算出する。そして処理部１２は、複数の粒子の連なりを示す流脈線の表示情報を生成する。【選択図】図１
2018180707.tif 000002
【特許請求の範囲】
【請求項１】
流体シミュレーションの解析時間の進行に伴い解析空間内を加速度運動する複数のグリッド点の第１時間間隔の複数の第１時刻の各々における位置を示す位置情報と、前記複数のグリッド点上の流体の前記複数の第１時刻の各々における速度を示す速度情報とを含む流体情報を記憶する記憶部と、
前記流体情報に基づいて、前記位置情報に表される前記複数のグリッド点の加速度運動に起因する誤差を補正する補正値を含む計算式により、前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度の時間微分値をそれぞれ算出し、前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度と前記速度の時間微分値とに基づいて、前記解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子の前記第１時間間隔より短い第２時間間隔の複数の第２時刻の各々における位置をそれぞれ算出し、前記複数の粒子の連なりを示す流脈線の表示情報を生成する処理部と、
を有する流脈線可視化装置。
【請求項２】
前記処理部は、前記位置情報に基づいて、前記複数のグリッド点の各々に対し、前記複数の第１時刻の各々におけるグリッド点移動速度とグリッド点移動加速度とをそれぞれ算出し、前記グリッド点移動速度と前記グリッド点移動加速度とを変数として含む前記計算式により、前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度の時間微分値をそれぞれ算出する、
請求項１記載の流脈線可視化装置。
【請求項３】
前記処理部は、前記複数のグリッド点の各々について、グリッド点の前記複数の第１時刻の各々における前記流体の前記速度を示す点をそれぞれ接続し、前記点を通るとき、対応する第１時刻での前記流体の前記速度の時間微分値に応じた傾きとなる、前記流体の前記速度の時間変化を表す補間曲線を生成し、前記複数のグリッド点の各々の前記補間曲線に基づいて、前記複数の粒子の前記複数の第２時刻の各々における位置をそれぞれ算出する、
請求項１または２記載の流脈線可視化装置。
【請求項４】
前記記憶部は、さらに、前記解析空間内の構造体の形状の時間変化を示す構造体情報を記憶し、
前記処理部は、第１解析時刻における第１流脈線に基づいて第２解析時刻における第２流脈線を計算する場合、
前記第１流脈線上の第１の位置にある離散点を含む、前記解析空間内の部分領域を、前記離散点についての解析対象領域に決定し、
前記流体情報に示される前記解析対象領域内の前記流体の前記速度に基づいて、前記第２解析時刻における前記離散点上の粒子の移動先を示す第２の位置を計算し、
前記構造体情報に示される前記解析対象領域内に存在する前記構造体の情報に基づいて、前記第２解析時刻における前記解析対象領域内の前記構造体の占有領域を特定し、
前記第１の位置と前記第２の位置とに基づいて、前記第２流脈線の前記占有領域への侵入の有無を判定し、
前記第２流脈線が前記占有領域に侵入しないと判定したとき、前記第２の位置を通過する前記第２流脈線の表示情報を生成する、
請求項１乃至３のいずれかに記載の流脈線可視化装置。
【請求項５】
さらに、前記表示情報に基づいて、前記流脈線を表示する表示部を有する、
請求項１ないし４のいずれかに記載の流脈線可視化装置。
【請求項６】
コンピュータが、
流体シミュレーションの解析時間の進行に伴い解析空間内を加速度運動する複数のグリッド点の第１時間間隔の複数の第１時刻の各々における位置を示す位置情報と、前記複数のグリッド点上の流体の前記複数の第１時刻の各々における速度を示す速度情報とを含む流体情報に基づいて、前記位置情報に表される前記複数のグリッド点の加速度運動に起因する誤差を補正する補正値を含む計算式により、前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度の時間微分値をそれぞれ算出し、
前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度と前記速度の時間微分値とに基づいて、前記解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子の前記第１時間間隔より短い第２時間間隔の複数の第２時刻の各々における位置をそれぞれ算出し、
前記複数の粒子の連なりを示す流脈線の表示情報を生成する、
流脈線可視化方法。
【請求項７】
コンピュータに、
流体シミュレーション上の解析時間の進行に伴い解析空間内を加速度運動する複数のグリッド点の第１時間間隔の複数の第１時刻の各々における位置を示す位置情報と、前記複数のグリッド点上の流体の前記複数の第１時刻の各々における速度を示す速度情報とを含む流体情報に基づいて、前記位置情報に表される前記複数のグリッド点の加速度運動に起因する誤差を補正する補正値を含む計算式により、前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度の時間微分値をそれぞれ算出し、
前記複数のグリッド点上の前記流体の前記複数の第１時刻の各々における前記速度と前記速度の時間微分値とに基づいて、前記解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子の前記第１時間間隔より短い第２時間間隔の複数の第２時刻の各々における位置をそれぞれ算出し、
前記複数の粒子の連なりを示す流脈線の表示情報を生成する、
処理を実行させる流脈線可視化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、流脈線可視化装置、流脈線可視化方法、および流脈線可視化プログラムに関する。
【背景技術】
【０００２】
力学の一分野として流体力学がある。流体力学は、流体の振る舞いを記述する学問である。流体力学は、空気、水の流れはもとより、温度、濃度などの物理量の輸送が問題となる様々な産業分野に応用されている。例えば流体力学を用いることで、自動車の試作品の評価のための風洞実験に基づいて、自動車の空力特性を最適化することができる。ただし、風洞実験には多大なコストがかかる。そこで風洞実験に代えて、数値流体力学を用いることにより風洞実験を模擬したコンピュータシミュレーション（流体シミュレーション）が行われる。
【０００３】
コンピュータの性能向上に伴い、流体シミュレーションも飛躍的に発展している。その結果、流体シミュレーションは、航空機、自動車、鉄道車両、船舶などの空力特性の評価だけでなく、心臓、血管などの血流状態の解析にも応用されている。
【０００４】
流体シミュレーションを行った場合、解析結果を視覚により容易に把握できるように、解析結果が可視化される。流体シミュレーションの結果の可視化手段の一つとして、流脈線の表示がある。流脈線は、空間中のある点を通過した流体粒子を連ねてできる曲線である。風洞実験であれば、所定の場所から噴出された煙の軌跡が流脈線となる。すなわち、流体シミュレーションで流脈線の表示情報を生成してその流脈線を表示することで、風洞実験における煙の軌跡と同様の流体中の粒子の動きを、風洞実験を行わずに可視化することができる。
【０００５】
流体シミュレーションに関する技術としては、例えば高速にシミュレーションを行い、流体の任意のシーンを短時間で滑らかにかつ細部の形状で表現する技術が考えられている。また、構造流体解析シミュレーションによる構造流体解析結果を、血管の異常診断に容易に適用可能とする技術もある。さらに、数値流体力学に精通していない医師などのユーザが適切な血流シミュレーションを行うことを可能とする装置も考えられている。その他、流体シミュレーションに関連する様々な論文が発表されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−６５５２号公報
【特許文献２】特開２０１５−９７７５９号公報
【特許文献３】国際公開第２０１６／０５６６４２号
【非特許文献】
【０００７】
【非特許文献１】Tino Wienkauf and Holger Theisel, "Streak Lines as Tangent Curves of a Derived Vector Field", IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS, NOVEMBER/DECEMBER 2010, VOL. 16, NO. 6
【非特許文献２】Erwin Fehlberg, "NASA TECHNICAL REPORT", NASA TR R-315, JULY 1969
【非特許文献３】J.Donea, S. Huerta, J.-Ph. Ponthot and A. Rodrigues-Ferran, "Arbitrary Lagrangian-Eulerian methods", Encyclopedia of Computational Mechanics, John Wiley & Sons Ltd, November 2004, pp.413-437
【非特許文献４】Seiryo Sugiura, Takumi Washio, Asuka Hatano, Junichi Okada, Hiroshi Watanabe, Toshiaki Hisada, "Multi-scale simulations of cardiac electrophysiology and mechanics using the University of Tokyo heart simulator" ,Progress in Biophysics and Molecular Biology, October/November 2012, Volume 110, Pages 380-389
【非特許文献５】William H. Press, Brian P. Flannery, Saul A. Teukolsky and William T. Vetterling, “Numerical Recipes in C: The Art of Scientific Computing”, Cambridge University Press, 1992/10/30, pp.113-117.
【非特許文献６】Joseph E. Flaherty, “Finite Element Analysis Chapter 4 Finite Element Approximation”, 2005年4月1日、［２０１７年２月２７日検索］、インターネット<URL:http://www.cs.rpi.edu/~flaherje/pdf/fea4.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、従来の流脈線の解析技術では、自動車などの周囲の空気の流れを解析する場合のように、解析空間中に存在する構造体が変形しないことが前提となっており、構造体が変形する場合は、流脈線を正確に追跡することが困難である。
【０００９】
１つの側面では、本件は、構造体が変形しても流脈線の追跡を可能とすることを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、記憶部と処理部とを有する流脈線可視化装置が提供される。
記憶部は、流体シミュレーションの解析時間の進行に伴い解析空間内を加速度運動する複数のグリッド点の第１時間間隔の複数の第１時刻の各々における位置を示す位置情報と、複数のグリッド点上の流体の複数の第１時刻の各々における速度を示す速度情報とを含む流体情報を記憶する。処理部は、まず流体情報に基づいて、位置情報に表される複数のグリッド点の加速度運動に起因する誤差を補正する補正値を含む計算式により、複数のグリッド点上の流体の複数の第１時刻の各々における速度の時間微分値をそれぞれ算出する。次に処理部は、複数のグリッド点上の流体の複数の第１時刻の各々における速度と速度の時間微分値とに基づいて、解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子の、第１時間間隔より短い第２時間間隔の複数の第２時刻の各々における位置をそれぞれ算出する。そして処理部は、複数の粒子の連なりを示す流脈線の表示情報を生成する。
【発明の効果】
【００１１】
１態様によれば、構造体が変形しても流脈線の追跡が可能となる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る流脈線可視化装置の一例を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】可視化装置のハードウェアの一構成例を示す図である。
【図４】流脈線の計算例を示す図である。
【図５】可視化装置の機能を示すブロック図である。
【図６】弾性体情報ファイル群の一例を示す図である。
【図７】流体情報ファイル群の一例を示す図である。
【図８】事前解析ファイルの一例を示す図である。
【図９】流脈線可視化処理の手順の一例を示すフローチャートである。
【図１０】事前解析処理の手順の一例を示すフローチャートである。
【図１１】ＡＬＥ制御されたグリッド点自身の運動による見かけの力の原理を示す図である。
【図１２】時間発展計算処理の手順を示すフローチャートの前半部分である。
【図１３】時間発展計算処理の手順を示すフローチャートの後半部分である。
【図１４】ルンゲ・クッタ係数表の一例を示す図である。
【図１５】流脈線のデータ例を示す図である。
【図１６】グリッド点の位置が時間に対して連続的に変化する様子を示す図である。
【図１７】時刻ｔ＝ｔkにおける場の情報を求める処理の手順の一例を示すフローチャートである。
【図１８】時刻ｔ＝ｔkにおける弾性体場の情報を求める処理の手順の一例を示すフローチャートである。
【図１９】四面体要素の一例を示す図である。
【図２０】ルンゲ・クッタ法による時間発展処理の手順の一例を示すフローチャートである。
【図２１】計算の結果得られる可能性のある位置の例を示す図である。
【図２２】状態変数の真理値表を示す図である。
【図２３】心臓内部での位置判定の処理手順の一例を示すフローチャートである。
【図２４】時間発展後の位置が流体内か否かの判定処理の手順の一例を示すフローチャートである。
【図２５】移動ベクトルが作る線分と心筋の交点数の計数処理の手順の一例を示すフローチャートである。
【図２６】予測球半径の決定処理の手順の一例を示すフローチャートである。
【図２７】時間分割による計算量削減の概念を示す図である。
【図２８】時間分割数に応じた合計計算時間の変化の一例を示す図である。
【図２９】要素の辺の長さの分布の一例を示す図である。
【図３０】予測球半径に応じた計算コストの変化を示す図である。
【図３１】移動距離の確率分布を示す図である。
【図３２】確率分布を仮定した時の計算効率化曲線を示す図である。
【図３３】流脈線の表示例を示す図である。
【図３４】時間刻み幅を変えたときの軌跡の精度の変化を示す図である。
【図３５】ＡＬＥグリッド点の運動補正を加えた速度場の例を示す図である。
【図３６】計算精度向上による流脈線の心筋へのめり込み抑止効果を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず、第１の実施の形態について説明する。第１の実施の形態は、構造体が変形しても流脈線の追跡が可能な流脈線表示装置である。
【００１４】
構造体が変形する場合は、流脈線を正確に追跡することが困難である。その原因の１つに、構造体が変形することによって、計算上、移動境界問題によるグリッド点の運動に伴う見かけの力が生じることにある。
【００１５】
見かけの力とは、卑近な例を出せば、コリオリの力がある。地球上で静止している観測者から砲弾を打つと、遠心力だけでは説明できない力が弾道の軌道を曲げているように見える。これは、宇宙から見れば、観測者自身も地球と共に運動しているため、観測者自身の加速度が生じており、それが見かけの力を生むからである。このように、本質的な力ではないが、観測者の運動（座標系と取り方）に起因して働くかのように見える力を“見かけの力”と呼ぶ。
【００１６】
すなわち、構造体が変形する場合、流体の運動の計算に、構造体の変形の影響を反映させることになる。このとき、構造体の形状を定義するためのグリッド点の移動に併せて、流体の運動を計算することになる。グリッド点が加速度運動をしていれば、その点に基づく流体の運動の計算には、見かけの力が生じる。このような見かけの力を反映させて流体の運動を計算しないと、流脈線を正しく算出することができない。例えば、流体の速度を表す速度場の計算精度が低いと、流脈線が心筋の中にめり込むようなあり得ない挙動を示し、計算が破たんしてしまう。
【００１７】
そこで、第１の実施の形態では、グリッド点の加速度運動によって生じる見かけの力を補正することで、流体の速度場を高精度に計算できるようにする。その結果、心筋付近での流脈線の挙動を正確に導き出すことができる。その結果、流脈線が心筋の中にめり込む現象を抑制することができる。これにより計算の安定性が上がり、流脈線が心筋中にめり込み、計算不能になるエラーを回避することができる。
【００１８】
図１は、第１の実施の形態に係る流脈線可視化装置の一例を示す図である。流脈線可視化装置１０は、記憶部１１、処理部１２、および表示部１３を有する。記憶部１１は、例えば流脈線可視化装置１０が有するメモリまたはストレージ装置である。処理部１２は、例えば流脈線可視化装置１０が有するプロセッサまたは演算回路である。表示部１３は、例えば流脈線可視化装置１０が有するグラフィック回路である。
【００１９】
記憶部１１は、例えば構造体情報１１ａと流体情報１１ｂとを有する。構造体情報１１ａは、流体シミュレーション上の解析空間内の構造体の形状の時間変化を示す情報である。流体情報１１ｂは、グリッド点Ｖ１〜Ｖ４の位置情報とグリッド点Ｖ１〜Ｖ４上での流体の速度情報とを含む。例えば位置情報は、複数のグリッド点Ｖ１〜Ｖ４の第１時間間隔の複数の第１時刻（Ｔ０，Ｔ１，・・・）それぞれでの位置を示している。また速度情報は、複数のグリッド点Ｖ１〜Ｖ４上の流体の複数の第１時刻（Ｔ０，Ｔ１，・・・）それぞれでの速度を示している。複数のグリッド点は、流体シミュレーション上の解析時間の進行に伴い解析空間内を加速度運動する。なお図１には、４つのグリッド点Ｖ１〜Ｖ４を示しているが、解析空間内には図示していない他の多数のグリッド点があるものとする。また図１において、各グリッド点での流体の速度を、矢印で示している。
【００２０】
処理部１２は、流体情報１１ｂに基づいて、流脈線５ａ，５ｂを計算する。例えば処理部１２は、位置情報に表される複数のグリッド点の加速度運動に起因する誤差を補正する補正値を含む計算式により、複数のグリッド点Ｖ１〜Ｖ４上の流体の複数の第１時刻それぞれでの速度の時間微分値を算出する。具体的には、例えば処理部１２は、位置情報に基づいて、複数のグリッド点Ｖ１〜Ｖ４それぞれの複数の第１時刻（Ｔ０，Ｔ１，・・・）それぞれでの速度と加速度とを算出する。そして処理部１２は、算出した速度と加速度とを変数として含む計算式により、複数のグリッド点Ｖ１〜Ｖ４上での流体の複数の第１時刻（Ｔ０，Ｔ１，・・・）それぞれでの速度の時間微分値を算出する。なお、速度と加速度の算出式の一例を、後述の式（６）、式（７）に示す。そして、速度と加速度とを変数として含む、速度の時間微分値の計算式の一例を、後述の式（４）、（５）に示す。
【００２１】
次に処理部１２は、解析時間の進行に伴い粒子発生源から順番に出力される複数の粒子を定義する。そして処理部１２は、複数のグリッド点Ｖ１〜Ｖ４上の流体の複数の第１時刻（Ｔ０，Ｔ１，・・・）それぞれでの速度と速度の時間微分値とに基づいて、複数の粒子の複数の第２時刻（ｔ０，ｔ１，・・・）それぞれでの位置を算出する。なお複数の第２時刻（ｔ０，ｔ１，・・・）は、第１時間間隔より短い第２時間間隔の時刻である。例えば処理部１２は、複数のグリッド点Ｖ１〜Ｖ４それぞれについて、グリッド点の複数の第１時刻（Ｔ１，Ｔ２，・・・）それぞれにおける速度を示す点を滑らかに接続する、流体の速度の時間変化を表す補間曲線を生成する。補間曲線は、１つの第１時刻に対応する点を通るとき、対応する第１時刻での流体の速度の時間微分値に応じた傾きとなる。そして処理部１２は、複数のグリッド点Ｖ１〜Ｖ４それぞれの補間曲線に基づいて、複数の粒子の複数の第２時刻それぞれでの位置を算出する。この補間曲線の一例を、後述の式（２０）に示す。
【００２２】
また処理部１２は、構造体情報１１ａに基づいて、構造体２の形状の時間変化を再現する。そして処理部１２は、粒子発生源４から出力された複数の粒子の連なりを示す流脈線５ａ，５ｂの表示情報を生成する。
【００２３】
表示部１３は、処理部１２が生成した表示情報に基づいて、流脈線５ａ，５ｂを表示画面１に表示する。例えば表示部１３は、表示画面１に、構造体２の画像に重ねて、流体が存在する流体領域３ａ，３ｂ内に流脈線５ａ，５ｂを表示する。図１において、流脈線５ａは第２時刻「ｔ０」における流脈線であり、流脈線５ｂは第２時刻「ｔ１」における流脈線である。
【００２４】
このようにして、グリッド点の加速度運動に起因する見かけの力を反映させて、複数の粒子の位置を高精度に算出し、正確な流脈線の表示情報を生成することにより、正確な流脈線を表示することができる。
【００２５】
さらに処理部１２は、流脈線５ａ，５ｂが構造体に侵入するか否かを判定し、侵入しない場合にのみ流脈線５ａ，５ｂを表示させることもできる。その際、処理部１２は、処理の効率化のため、第１解析時刻における第１流脈線に基づいて第２解析時刻における第２流脈線を計算する際に、以下のような処理を実行することができる。
【００２６】
例えば処理部１２は、第１流脈線上の第１の位置にある離散点を含む、解析空間内の部分領域を、離散点についての解析対象領域に決定する。解析対象領域は、例えば球形の領域である。次に処理部１２は、流体情報に示される解析対象領域内の流体の速度に基づいて、第２解析時刻における離散点上の粒子の移動先を示す第２の位置を計算する。次に処理部１２は、構造体情報に示される解析対象領域内に存在する構造体の情報に基づいて、第２解析時刻における解析対象領域内の構造体の占有領域を特定する。次に処理部１２は、第１の位置と第２の位置とに基づいて、第２流脈線の占有領域への侵入の有無を判定する。そして処理部１２は、第２流脈線が占有領域に侵入しないと判定したとき、第２の位置を通過する第２流脈線の表示情報を生成することにより、第２流脈線を表示する。
【００２７】
このように、解析範囲を解析対象領域内に限定して、流脈線が構造体の占有領域に侵入したか否かを判定することで、処理量が削減され、効率的な処理が可能となる。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、心臓の動きと共に、心臓内の血流の流脈線を可視化する可視化装置である。
【００２８】
例えば数値流体解析を用いれば、心臓中の血流輸送など技術的、倫理的観点から測定が困難である系についても流体の振る舞いを模擬することが可能である。そのため、心臓中での血流輸送の不全が問題となる先天性心疾患などでは治療法の検討に数値流体解析が使用されており、数値流体解析は重要な技術である。そして可視化装置により、このような数値流体解析の結果を可視化することで、医者などの医療関係者が解析結果を容易に把握することができ、治療方針を立てやすくなる。
【００２９】
図２は、第２の実施の形態のシステム構成例を示す図である。可視化装置１００は、ネットワーク２０を介して心臓シミュレータ２００に接続されている。心臓シミュレータ２００は、心筋の運動と冠循環とのシミュレーションを行うコンピュータである。可視化装置１００は、心臓シミュレータ２００からシミュレーション結果を取得する。そして可視化装置１００は、シミュレーション結果に基づいて流脈線の表示情報を生成し、生成した流脈線を表示する。シミュレーション結果には、例えば各時刻における心臓の形状を示す３次元モデル、血管中の血液の速度、心筋または血液の物性値などの情報が含まれる。
【００３０】
図３は、可視化装置のハードウェアの一構成例を示す図である。可視化装置１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）などの演算処理装置である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３１】
メモリ１０２は、可視化装置１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３２】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３３】
ストレージ装置１０３は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３４】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３５】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３６】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３７】
機器接続インタフェース１０７は、可視化装置１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３８】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００３９】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した装置も、図３に示した可視化装置１００と同様のハードウェアにより実現することができる。
【００４０】
可視化装置１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。可視化装置１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、可視化装置１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。また可視化装置１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４１】
次に流脈線について説明する。
図４は、流脈線の計算例を示す図である。可視化装置１００は、解析対象の空間中に粒子発生源３０を定義する。解析が始まると、粒子群３３が粒子発生源３０から連続的に射出される。粒子群３３は流れ場が時間に対して不変であれば、一定の曲線（流線）になる。流れ場が時間依存して変化すると、粒子群３３が作り出す曲線も時々刻々と変化していく。この曲線が流脈線３１，３２である。図４では、時刻ｔ0における粒子群３３の連なりを示す流脈線３１と時刻ｔ1における粒子群３３の連なりを示す流脈線３２とが示されている。流脈線３１，３２は、障害物３５の影響で複雑な曲線となる。
【００４２】
流脈線３１，３２は時間変動する流れ場に沿って、どのように粒子群３３が輸送されていくかを可視化する有力な方法である。例えば障害物３５を自動車とした場合を考える。開発した自動車の空気抵抗を可視化するため、自動車前方から空気を送ると共に、自動車の前方に粒子発生源３０を配置する。そして可視化装置１００内での流体シミュレーションにおいて、粒子群３３を連続的に射出し、粒子群３３の軌跡が流脈線３１，３２として測定される。流脈線３１，３２は流体の輸送を直接記述し、可視化できるため、様々な分野に応用可能である。
【００４３】
流脈線の計算や、可視化の研究は多数行われており、乱流や不安定流などを対象とした研究は多数ある。しかし、心臓のように流体から見て壁面になるような弾性体が大きく変形を起こす場合の流脈線の可視化については先行研究があまりない。心臓は周期的に拍動し、拡張と収縮を繰り返すため、大変形を起こす系の典型例である。そして、心臓のポンプ作用はこの周期的な運動が重要な役割を果たしているため、弾性体が周期的に大変形を起こす系における血流の輸送を評価することは、心疾患の治療法を考慮するうえで重要になる。
【００４４】
生体シミュレーションの研究では、心臓の挙動をコンピュータ上でシミュレートすることも行われている。コンピュータ上でシミュレーションを行うことで、実際に手術を実行しなくても、手術を実行した場合の治療効果を評価できる。そのため生体シミュレーションを用いれば、医師は実際に手術をする前に、最もよい治療法を検討することが可能である。特に、心臓シミュレーションは、３次元的に複雑な構造を持つ心臓が対象である。そして、心臓の挙動も動的に変化する。心臓の挙動に合わせて、心臓内の血流の輸送を表す流脈線が可視化できれば、心臓の状態を視覚的に容易に把握することができる。視覚的に分かりやすく表示することは、判断の間違いを防ぐためにも有用である。
【００４５】
心臓内の血流の流脈線を可視化する際に障害となるのは以下の点である。
１．心筋（弾性体）が大きく変形するとき、心筋付近で流跡線、流脈線の挙動を正確に追跡することが困難なことである。
【００４６】
２．流跡線が常に１点のみ計算すればよいのに対して、流脈線は線分を構成するＮ点全てを計算しなければならず、計算量が非常に多いことである。
３．有限要素モデルの一部の品質の悪いメッシュが、全体の計算量を増加させてしまうことである。
【００４７】
そこで、第２の実施の形態の可視化装置１００は、以下の機能により、実現可能な計算量で高精度の流脈線を可視化できるようにしている。
１−１：可視化装置１００は、流脈線の各点が可動領域外の心筋に入り込んだり、シミュレーション対象の系の外に出したりしたかどうかを正確に判定する。
【００４８】
１−２：可視化装置１００は、流脈線上の点が可動領域外にある場合、流線の微分方程式のパラメータの時間刻み幅を調節し、可動領域外に出ないように制御する。
１−３：可視化装置１００は、任意の時刻における場の情報を推定するため、補間法を用いて場を補間する。
【００４９】
１−４：可視化装置１００は、流脈線の動きの精度を高めるため、見かけの力を反映させた計算式により、流脈線を計算する。
２−１：１−３の機能を適用すると計算量が増加するため、可視化装置１００は、流脈線の点が動く最大距離を計算し、その距離を半径とする予測球内部の場の情報のみを計算することでデータ容量に関係なく計算量を一定にする。
【００５０】
２−２：可視化装置１００は、時間刻み幅を分割することで予測球半径を小さくし、予測球を使用しない場合より計算量を減らすと共に、同時に精度も向上させる。
３−１：大部分の計算は品質のよいメッシュに対して行われるのを利用し、可視化装置１００は、品質のよいメッシュと決めて投機的に計算を実行し、失敗した場合には高精度計算を行うことで、計算量を削減する。投機的な計算とは、流脈線を構成する点の移動先が予測球の外部になる可能性があることを許容して、予測球の半径を小さくすることである。計算に失敗する場合とは、流脈線を構成する点の移動先が予測球内に存在しない場合である。
【００５１】
３−２：３−１にて投機的に実行するため、可視化装置１００は確率モデルを用意し、失敗時のペナルティまで含めて計算量が最小になるようなパラメータセットを決定する。
４−１：見かけの力を反映させた流脈線の計算を効率的に実施するため、見かけの力に応じた係数を事前に計算し、時間ステップごとに、その計算結果を参照して流脈線を計算する。
【００５２】
これらの機能が可視化装置１００に実装されていることで、以下の効果が得られている。
１．心筋（弾性体）が大きく変形をする場合にも心筋（弾性体）の運動を考慮して流脈線を計算できる。
【００５３】
２．流脈線の各点を、予測球を用いて、見かけの力を反映させた計算式で高速・高精度に計算ができる。
３．確率モデルを用い、計算コストを最小化する予測球半径の決定ができる。
【００５４】
以下、可視化装置１００の機能を詳細に説明する。
図５は、可視化装置の機能を示すブロック図である。可視化装置１００は、情報の記憶機能として、シミュレーション結果記憶部１１０と、事前解析結果記憶部１２０とを有する。シミュレーション結果記憶部１１０は、心臓シミュレータ２００から取得したシミュレーション結果を記憶する。例えば数値流体力学シミュレーションが心臓シミュレータ２００で実施され、動的に変化する弾性体と流体の場のシミュレーション結果がＬ個（Ｌは１以上の整数）の時刻ｔ0，ｔ1，・・・，ｔLでファイルに保存される。例えば心筋の情報と血流の情報が別々のファイルとして、シミュレーション結果記憶部１１０に保存される。図５の例では、時刻ごとの心筋の情報が弾性体情報ファイル群１１１として保存され、時刻ごとの血流の情報が流体情報ファイル群１１２として保存されている。
【００５５】
事前解析結果記憶部１２０は、見かけの力の事前解析によって算出される、見かけの力に応じた係数を記憶する。以下、事前解析によって算出された係数群を、事前解析結果Ωと呼ぶ。例えば事前解析結果記憶部１２０は、事前解析結果Ωを含む事前解析ファイル１２１を記憶する。
【００５６】
可視化装置１００は、シミュレーション結果記憶部１１０に記憶されたシミュレーション結果を分析することで、血流の輸送情報を記述する流脈線を計算することができる。なお、シミュレーション結果として出力される時間間隔Δｔi＝ｔi+1−ｔiは心臓シミュレータ２００が微分方程式を解く場合の時間間隔と一致していなくてもよい。情報量を削減するため、間引かれたシミュレーション結果が出力されることが一般的である。そこで可視化装置１００は、流脈線を高精度に求めるため、複数の時刻での出力ファイルを用いてターゲットとなる時刻での種々の物理量を、補間法などを用いて推定する。
【００５７】
次に可視化装置１００の処理機能について説明する。可視化装置１００は、情報読み込み部１３０、事前解析部１４０、流脈線計算部１５０、表示処理部１６０、および解析部１７０を有する。
【００５８】
情報読み込み部１３０は、流体解析の結果を示すファイルをシミュレーション結果記憶部１１０から読み込む。事前解析部１４０は、情報読み込み部１３０が読み込んだ情報を用いて、流脈線計算用の係数を算出する。事前解析部１４０は、事前解析結果Ωを含む事前解析ファイル１２１を、事前解析結果記憶部１２０に格納する。流脈線計算部１５０は、情報読み込み部１３０が読み込んだ情報と、事前解析部１４０が算出して係数とを用いて流脈線を計算する。表示処理部１６０は、得られた結果を可視化する。
【００５９】
解析部１７０は、情報読み込み部１３０、事前解析部１４０、流脈線計算部１５０、および表示処理部１６０が共通に使用する機能をまとめたものである。情報読み込み部１３０、事前解析部１４０、流脈線計算部１５０、および表示処理部１６０は、具体的な解析処理を実行する際に、解析部１７０に実行する処理を依頼して、結果を得る。
【００６０】
解析部１７０は、係数計算部１７１、流体情報解析部１７２、弾性体情報解析部１７３、予測球半径計算部１７４、予測球内部計算部１７５、移動境界衝突判定部１７６、および表示様式決定部１７７を有する。係数計算部１７１は、見かけの力を反映させた補間多項式に含まれる係数を計算する。流体情報解析部１７２は、流体の速度場や離散点の位置、境界面の解析などを行う。弾性体情報解析部１７３は、心筋など流体ではない弾性体の離散点の位置や境界面の解析を行う。予測球半径計算部１７４は、流脈線の計算時の計算速度と計算精度の向上のために用いる予測球の半径を決定する。予測球内部計算部１７５は、予測球内部の速度場、心筋位置などを計算する。移動境界衝突判定部１７６は、流脈線上の点が計算上の誤差のため、心筋内部に入り込んだかどうかを判定する。表示様式決定部１７７は、得られた流脈線の表示の仕方を決定する。
【００６１】
なお、図５に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
次に、シミュレーション結果として得られる情報について詳細に説明する。
【００６２】
図６は、弾性体情報ファイル群の一例を示す図である。弾性体情報ファイル群１１１は、シミュレーションの時刻ごとの弾性体情報ファイル１１１ａ，１１１ｂ，・・・の集合である。各弾性体情報ファイル１１１ａ，１１１ｂ，・・・には、例えば「stru(X).inp」というファイル名が付与される。ファイル名中の「Ｘ」は、シミュレーションの時刻が古い順に付与された昇順の番号である。
【００６３】
弾性体情報ファイル１１１ａ，１１１ｂ，・・・内には、対応する時刻における心臓の形状を表す心筋データが含まれている。心筋データには、グリッド（３次元空間内に配置された頂点）のｘ、ｙ、ｚの座標値、心筋に含まれる４面体の要素（ＴＥＴＲＡ）の４つの頂点を示すグリッドのＩＤ、各要素に加わる力などの情報が含まれる。
【００６４】
図７は、流体情報ファイル群の一例を示す図である。流体情報ファイル群１１２は、シミュレーションの時刻ごとの流体情報ファイル１１２ａ，１１２ｂ，・・・の集合である。各流体情報ファイル１１２ａ，１１２ｂ，・・・には、例えば「flui(Y).inp」というファイル名が付与される。ファイル名中の「Ｙ」は、シミュレーションの時刻が古い順に付与された昇順の番号である。
【００６５】
流体情報ファイル１１２ａ，１１２ｂ，・・・内には、対応する時刻における血液の流れを表す血流データが含まれている。血流データには、グリッド（３次元空間内に配置された頂点）のｘ、ｙ、ｚの座標値、血管内の４面体の要素（ＴＥＴＲＡ）の４つの頂点を示すグリッドのＩＤ、各グリッド上での血液の流れる方向と速さを示す速度場ベクトルが含まれる。
【００６６】
図８は、事前解析ファイルの一例を示す図である。事前解析ファイル１２１には、すべての時刻における、すべてのグリッド点の補間多項式（後述の式（２））を再現できるように、グリッド番号、時刻、位置座標、速度場（血流のみ）、補間多項式係数が記録される。例えば事前解析ファイル１２１には、出力時刻インデックステーブル１２１ａ、心筋側補間多項式係数テーブル１２１ｂ、および流体側補間多項式係数テーブル１２１ｃが含まれる。
【００６７】
出力時刻インデックステーブル１２１ａには、時刻のインデックス（Time Index）に対応付けて、流体解析のシミュレーション上での時刻（Time）が設定されている。
心筋側補間多項式係数テーブル１２１ｂには、グリッドのＩＤ（GRID ID）と時刻のインデックス（Time Index）と軸のインデックス（Direction Index）の組に対応付けて、軸方向の位置（Position）、心筋側補間多項式に用いる各係数（係数ａ、係数ｂ、係数ｃ、係数ｄ）の値が設定されている。
【００６８】
流体側補間多項式係数テーブル１２１ｃには、グリッドのＩＤ（GRID ID）と時刻のインデックス（Time Index）と軸のインデックス（Direction Index）の組に対応付けて、軸方向の位置（Position）、軸方向の速さ（Velocity）、流体側補間多項式に用いる各係数（係数ａ、係数ｂ、係数ｃ、係数ｄ）の値が設定されている。
【００６９】
なお流体側補間多項式係数テーブル１２１ｃには、各グリッドにおける流体の速度場の時間微分の計算結果を含めることもできる。
可視化装置１００は、図６と図７に示したシミュレーション結果と、図８に示した事前解析結果Ωとに基づいて、流脈線を計算し可視化する。以下、流脈線の可視化処理について詳細に説明する。
【００７０】
図９は、流脈線可視化処理の手順の一例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
［ステップＳ１０１］流脈線計算部１５０は、事前解析結果記憶部１２０に事前解析ファイル１２１が格納されているか否かを判断する。流脈線計算部１５０は、事前解析ファイル１２１が格納されている場合、処理をステップＳ１０２に進める。また流脈線計算部１５０は、事前解析ファイル１２１が格納されていない場合、処理をステップＳ１０３に進める。
【００７１】
［ステップＳ１０２］流脈線計算部１５０は、事前解析結果記憶部１２０から事前解析ファイル１２１を読み込む。その後、流脈線計算部１５０は、処理をステップＳ１０５に進める。
【００７２】
［ステップＳ１０３］事前解析部１４０は、補間多項式の係数を算出するための事前解析処理を行う。事前解析処理の詳細は後述する（図１０参照）。
［ステップＳ１０４］事前解析部１４０は、事前解析処理によって算出された係数の値を含む事前解析ファイル１２１を生成し、事前解析ファイル１２１を事前解析結果記憶部１２０に格納する。
【００７３】
次に、流脈線計算部１５０は、ステップＳ１０５〜Ｓ１０８において、流脈線の初期設定を行う。
［ステップＳ１０５］流脈線計算部１５０は、計算する流脈線の本数Ｍ（Ｍは１以上の整数）を決定する。例えば流脈線計算部１５０は、ユーザから入力された値を、流脈線の本数Ｍとする。
【００７４】
［ステップＳ１０６］流脈線計算部１５０は、流脈線の計算回数Ｎ（Ｎは１以上の整数）を決定する。以下、流脈線の計算回数Ｎを「時間発展回数」と呼ぶ。例えば流脈線計算部１５０は、ユーザから入力された値を、時間発展回数Ｎとする。
【００７５】
流脈線は時間と共に変化するので、時間発展回数Ｎを決定することで、流脈線の結果が出力される時刻列ｔ0，ｔ1，・・・，ｔNが決定される。指定された時間発展回数Ｎがファイルの個数Ｌ（Ｌは１以上の整数）より大きい場合は、流脈線計算部１５０は、Ｌ＋１番目を心臓の２周期目の拍動として扱い、ｔ0でのファイルを使用する。時刻列は、例えば０．０１秒間隔の等間隔に設定される。ただし、時刻列の時間間隔は、等間隔でなくてもよい。
【００７６】
［ステップＳ１０７］流脈線計算部１５０は、流脈線の粒子発生源の座標を決定する。例えば流脈線計算部１５０は、ユーザから指定された解析空間上の点を、粒子発生源の座標とする。ユーザは、例えば心筋情報と血流情報を参照しながら、空間の一点を指定する。流脈線計算部１５０は、指定された点の座標を、座標ベクトルＸ0として読み込む。流脈線の本数が１本の場合は、流脈線の粒子発生源は座標ベクトルＸ0に設定される。流脈線の本数が複数本ある場合、流脈線計算部１５０は、座標ベクトルＸ0を中心とした半径ｒ（ｒは正の実数）の球の中から流脈線ｌjの粒子発生源をランダムに決定する。なお流脈線の粒子発生源は、血流中の座標から選ばれる。流脈線計算部１５０は、決定した粒子発生源の座標ベクトルＸjを流脈線の粒子発生源として設定する。
【００７７】
その後、流脈線計算部１５０は、ｊ番目（ｊ＝１，２，・・・，Ｍ）の流脈線ｌjの初期設定を以下のようにして行う。
ｊ番目の流脈線ｌjは時間発展回数Ｎと同じ分だけの離散点で構成される。そこで流脈線計算部１５０は、流脈線ｌjに含まれる各離散点を示す点Ｐij（ｉ＝０，１，２，・・・，Ｎ）を生成する。流脈線計算部１５０は、各離散点の初期値の座標を、粒子発生源の座標とする。
【００７８】
なお、時刻ｔ＝ｔiにおける流脈線ｌjの計算では、点Ｐij（ｉ＝０，１，２，・・・，ｉ）が、発生源から射出された流脈線粒子の位置として、時間発展計算の対象になる。点Ｐij（ｉ＝ｉ＋１，・・・，Ｎ）に対応する流脈線粒子はまだ発生源から射出されていないと考えるため、時刻ｔ＝ｔiにおける流脈線ｌjの計算では計算対象とはならない。そして流脈線計算部１５０は、離散点のうちｉの値が小さい順に計算をする。そのため、先に計算される離散点ほど、粒子発生源から射出されてからの時間は長くなる。
【００７９】
［ステップＳ１０８］流脈線計算部１５０は、流脈線ｌjの点が大動脈など、系の流体境界から出た場合のための設定を行う。流脈線ｌj上の点Ｐijが大動脈など流体境界から系外に出た場合、系外では流体の速度場が定義されていないため、次の時刻でのＰijの計算を実行することはできない。そこで流脈線計算部１５０は、すべての点Ｐijに領域内判定フラグを、各離散点のパラメータとして設定する。領域内判定フラグは、領域内にある場合を「Ｔ」とし、大動脈など流体の流れに従い領域外に出た場合を「Ｆ」とする。初期状態では流体内部に点Ｐijが存在しているため、流脈線計算部１５０は、すべての離散点の領域判定フラグにＴをセットする。
【００８０】
［ステップＳ１０９］流脈線計算部１５０は、インデックスｉ＝１から順番に、インデックスｉ＝１，２，・・・，Ｎ−１について、ステップＳ１１０〜Ｓ１１４のループ処理を繰り返し実行する。
【００８１】
［ステップＳ１１０］流脈線計算部１５０は、インデックスｊ＝１から順番に、インデックスｊ＝１，２，・・・，Ｍについて、ステップＳ１１１〜Ｓ１１３のループ処理を繰り返し実行する。
【００８２】
［ステップＳ１１１］流脈線計算部１５０は、時間発展の起点になる時刻を決定し、メモリ１０２に保持する。計算開始時刻は第ｉ回目の計算ではｔ＝ｔiに設定される。時間発展の終端時刻はｔ＝ｔi+1に設定される。
【００８３】
［ステップＳ１１２］流脈線計算部１５０は、時間ｔi≦ｔ≦ｔi+1における時間発展計算を行う。時間発展計算により、各時刻ｔ＝ｔiにおいて、流脈線ｌjの粒子発生源から射出されたすべての点Ｐij（ｉ＝０，１，２，・・・，ｉ）が時間発展の対象となり、線分上のすべての点が時々刻々と更新されていく。流脈線ｌj上の点Ｐijの時間［ｔi，ｔi+1］の時間発展計算の結果、座標値が返される。これが次の時刻ｔ＝ｔi+1での座標Ｐi+1,jとして設定される。
【００８４】
［ステップＳ１１３］流脈線計算部１５０は、得られた計算結果をメモリ上に保存する。計算結果は、表示処理部１６０によって流脈線ｌjが描画される。また流脈線計算部１５０は、ファイルに流脈線ｌjの座標値を出力することもできる。
【００８５】
［ステップＳ１１４］流脈線計算部１５０は、ステップＳ１１１〜Ｓ１１３の処理を１回実行するごとにインデックスｊに１を加算し、インデックスｊ＝Ｍの処理が終了したら、処理をステップＳ１１５に進める。
【００８６】
［ステップＳ１１５］流脈線計算部１５０は、ステップＳ１１０〜Ｓ１１４の処理を１回実行するごとにインデックスｉに１を加算し、インデックスｉ＝Ｎ−１の処理が終了したら、流脈線可視化処理を終了する。
【００８７】
次に、事前解析処理（ステップＳ１０３）の詳細について説明する。事前解析処理は、任意時刻ｔにおける心筋の構造情報の推定と血流部分の速度場の推定に使用する係数を生成する処理である。
【００８８】
初めに前提になる出力データについて説明する。出力データには、シミュレーション上の時刻ｔ＝ｔiが付与されている。ここで、心筋の構造情報をベクトルＭ（ベクトルｒ，ｔi）とする。このとき心筋上には、有限個の離散点ベクトルｒkが与えられている。これは、図６に示すように心筋の弾性体情報ファイル１１１ａ，１１１ｂ，・・・に出力されており、離散点はＧＲＩＤ  ＩＤで一意に識別され、座標が保存されている。軸ごとの座標の値が、ＧＲＩＤ  ＩＤに対応する離散点を示す離散点ベクトルｒkの要素である。
【００８９】
有限要素法では、これらの離散点を頂点とした図形（例えば四面体）を要素として、計算が行われる。要素は図６の弾性体情報ファイル１１１ａ，１１１ｂ，・・・のＴＥＴＲＡ  ＩＤで一意に識別され、要素を構成する離散点のＧＲＩＤ  ＩＤが保存されている。図６の例では四面体要素を用いているが、要素は四面体以外の形状でもよい。これらの離散点の位置と有限要素の配置により心筋の形状が決定される。
【００９０】
流体部分の構造情報も心筋と同様である。流体部分の構造情報をベクトルＢ（ベクトルｒ，ｔi）とする。このとき、流体部分も有限個の離散点と有限要素で構成され、図７に示すような流体情報ファイル１１２ａ，１１２ｂ，・・・に出力されている。流体に関して、心筋との違いは、流体情報として、離散グリッド点（ベクトルｒk）上での流体の速度場を示す速度場情報（速度ベクトルｖ（ベクトルｒk，ｔi））も出力されていることである。事前解析部１４０は、すべての時刻ｔ0，ｔ1，・・・，ｔLの心筋の構造、血流の構造および速度場情報を用いて、事前解析を実行する。
【００９１】
図１０は、事前解析処理の手順の一例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
［ステップＳ１２１］事前解析部１４０は、インデックスｉ＝１から順番に、インデックスｉ＝１，２，・・・，Ｎ−１について、ステップＳ１２２のループ処理を繰り返し実行する。
【００９２】
［ステップＳ１２２］事前解析部１４０は、情報読み込み部１３０を介して、時刻ｔiのベクトルＢ（ベクトルｒ，ｔi）、ベクトルｖ（ベクトルｒ，ｔi）、ベクトルＭ（ベクトルｒ，ｔi）を、シミュレーション結果記憶部１１０から読み込む。
【００９３】
［ステップＳ１２３］事前解析部１４０は、ステップＳ１２２の処理を１回実行するごとにインデックスｉに１を加算し、インデックスｉ＝Ｎ−１の処理が終了したら、処理をステップＳ１２４に進める。
【００９４】
［ステップＳ１２４］事前解析部１４０は、心筋の構造情報であるベクトルＭ（ベクトルｒ，ｔi）を構成する時刻ｔiにおけるグリッド座標ベクトルｒlの時間微分ベクトルｄｒl／ｄｔの値を、すべての時刻、すべてのグリッド点について算出する。
【００９５】
［ステップＳ１２５］事前解析部１４０は、血流の構造情報であるベクトルＢ（ベクトルｒ，ｔi）を構成する時刻ｔiにおけるグリッド座標ベクトルｒlの時間微分ベクトルｄｒl／ｄｔの値を、すべての時刻、すべてのグリッド点について算出する。
【００９６】
［ステップＳ１２６］事前解析部１４０は、血流の時刻ｔiにおけるグリッド座標ベクトルｒl上での速度場ベクトルｖ（ベクトルｒl，ｔi）の時間微分ベクトルｄｖ（ベクトルｒl，ｔi）／ｄｔを、すべての時刻、すべてのグリッド点について計算する。
【００９７】
なおステップＳ１２４〜Ｓ１２６に示したインデックスｌは、グリッド番号を示す。また、心筋についてはグリッド座標の総数はＮM,elem個存在し、血流についてはグリッド座標の総数はＮB,elem個存在するものとする。
【００９８】
次に、心筋、血流部分のグリッド座標ベクトルｒlにおける時刻ｔiでの時間微分ベクトルｄｒl／ｄｔの値を計算方法について詳細に説明する。時間微分ベクトルｄｒl／ｄｔの値は、すべてのグリッド点について同じ方法で計算できる。
【００９９】
まず事前解析部１４０は、グリッド番号ｌを指定し、位置ベクトル列ｒk（ｔi）（ｉ＝０，１，２，・・・，ｎ−１）の情報を取得する。次に事前解析部１４０は、取得した情報からベクトルのＸ，Ｙ，Ｚ成分を抜き出し、座標列Ｘl（ｔi）（ｉ＝０，１，２，・・・，ｎ−１）、Ｙl（ｔi）（ｉ＝０，１，２，・・・，ｎ−１）およびＺl（ｔi）（ｉ＝０，１，２，・・・，ｎ−１）として保存する。ここでｎはファイル数である（ｎは１以上の整数）。
【０１００】
次に事前解析部１４０は、Ｘ成分についてすべての点Ｘl（ｔi）を通るような滑らかに連続な曲線Ｘl（ｔ）を補間法で求める。補間法として、例えばcubic splineを用いる。なお、cubic spline以外の補間法を用いてもよい。cubic splineでは曲線Ｘl（ｔ）を区間ｔi≦ｔ≦ｔ(i+1) 毎に定義された補間多項式Ｘ(l,i)（ｔ）を用いて式（１）で定める。
【０１０１】
【数１】
2018180707.tif 000003
【０１０２】
補間曲線Ｘl,i（ｔ）の具体形は
【０１０３】
【数２】
2018180707.tif 000004
【０１０４】
となる。ただし、ｎは心臓の拍動１周期分であるため、事前解析部１４０は、ｎ＋１番目は０番目の値になるように、周期境界条件を課す。例えば事前解析部１４０は、ｔn+m＝ｔmとする。また事前解析部１４０は、補間曲線Ｘl,i（ｔ）の関数値についてもＸl,n+m＝Ｓl,mとする。ここで係数ａl,i，ｂl,i，ｃl,i，ｄl,iは未知数であるが、区間ｔi≦ｔ≦ｔi+1ごとに微分まで含めて滑らかに連続になる条件を付加することで、連立一次方程式を作ることができる。この連立方程式を数値的に解くことですべての係数ａl,i，ｂl,i，ｃl,i，ｄl,iの組を計算することができる（非特許文献５参照）。そして、ｄＸl／ｄｔは式（３）から直接計算することができる。
【０１０５】
【数３】
2018180707.tif 000005
【０１０６】
このようにして、時間に関する１階微分および２階微分が連続になるように時刻ｔiにおけるｄＸl／ｄｔの値を求めることができる。
そして事前解析部１４０は、係数ａl,i，ｂl,i，ｃl,i，ｄl,iの配列を事前解析結果Ωに含めて保存する。Ｙ，Ｚ成分についても同様の手続きで補間関数を求めることができる。事前解析部１４０は、このような係数の算出を、すべての心筋のグリッド点と血流のグリッド点について行う。その結果、ベクトルｄｒl／ｄｔの値が計算されたこととなる。
【０１０７】
次に速度場ベクトルｖ（ベクトルｒl，ｔi）の時間微分ベクトルｄｖ（ベクトルｒl，ｔi）／ｄｔを求める手続きを説明する。この時間微分ベクトルｄｖ（ベクトルｒl，ｔi）／ｄｔは、グリッド点を流体に固定し、グリッド点が流体と共に運動すると仮定した場合におけるグリッド点の加速度を表している。これは流体力学の世界ではラグランジュ座標と呼ばれるものである。
【０１０８】
なお、解析対象が非圧縮性流体の場合、加速度に流体の密度を掛けると、そのグリッド点上の粒子に加わる力となる。そのため、グリッド点の加速度を求めることは、非圧縮性流体内のグリッド点上の粒子に加わる力の大きさと方向を求めることに等しい。
【０１０９】
流体の速度場は、速度場ベクトルｖ＝（ｖx，ｖy，ｖz）のように成分表示することができる。ここでは速度場のｘ成分（ｖx）について説明するが、速度場のｙ成分（ｖy）についても同様にして計算することができる。速度場のｚ成分（ｖz）を算出する場合、事前解析部１４０は、合成関数の微分を計算する。すると、以下の式（４）が成立する。
【０１１０】
【数４】
2018180707.tif 000006
【０１１１】
式（４）から各グリッド点（グリッド番号ｋ）における時刻ｔ＝ｔiでの速度場のｘ成分（ｖx）の時間微分を求めることができる。グリッド番号ｋの座標ベクトルｒkにおけるベクトルｄｒk／ｄｔは、補間多項式からすでに求めている。∇ｖxについては、非特許文献６などを参考にして計算できる。残りの速度場の時間に関する偏微分は、以下の式（５）を用いて計算できる。
【０１１２】
【数５】
2018180707.tif 000007
【０１１３】
ここで、ベクトルａaveはグリッド番号ｋのグリッド点のラグランジュ座標での平均加速度ベクトル、ベクトルｖaveは平均速度ベクトルであり、下記の式（６）、（７）で定義される。
【０１１４】
【数６】
2018180707.tif 000008
【０１１５】
【数７】
2018180707.tif 000009
【０１１６】
ここで、式（５）にはグリッド点のラグランジュ座標での平均加速度（ベクトルａave）の項と、平均速度（ベクトルｖave）の項が含まれているが、これはグリッド点が任意の運動をしているため、グリッド点自体の運動に起因する見かけの力を補正するためである。
【０１１７】
グリッド点が加速度運動をする場合における解析手法として、例えばＡＬＥ（Arbitrary Lagrangian-Eulerian）法がある。
図１１は、ＡＬＥ制御されたグリッド点自身の運動による見かけの力の原理を示す図である。ＡＬＥ制御されたグリッド点は、心臓の収縮に合わせて１拍動すると元の位置に戻り、心臓の拍動に合わせて運動する。このとき、グリッド点は速度が時々刻々と変化するので、加速度が生じる。ところがグリッド点自身に観測装置を設置すれば、観測者は自らを静止したと解釈してしまう。自分自身の加速度運動による効果は見かけの力としてあたかも流体に働くように見えてしまう。そのため、自分自身の加速度運動による補正をしなければならない。この見かけの力を補正するための手続きが式（５）、式（６）、式（７）には含まれている。このようにして、各グリッド点における時刻ｔ＝ｔiでの速度場の時間微分を計算することができる。事前解析部１４０は、このような速度場の時間微分をすべてのグリッド点での血流の速度場について求め、各グリッド点での速度場の時間微分を含むデータセットを、事前解析結果Ωとして事前解析結果記憶部１２０に保存する。
【０１１８】
次に、時間発展計算処理（ステップＳ１１２）の詳細について説明する。
図１２は、時間発展計算処理の手順を示すフローチャートの前半部分である。以下、図１２に示す処理をステップ番号に沿って説明する。
【０１１９】
［ステップＳ１３１］流脈線計算部１５０は、点Ｐijの領域内判定フラグを読み込む。そして流脈線計算部１５０は、領域内判定フラグが「Ｔ」か否かを判断する。領域内判定フラグが「Ｔ」であれば、流脈線計算部１５０は、処理をステップＳ１３２に進める。領域内判定フラグが「Ｆ」であれば、流脈線計算部１５０は、この点は既に領域外に出たものとして扱い、計算を行わず、時間発展計算処理を終了する。これにより、領域内判定フラグが「Ｆ」の場合、座標値は更新されないこととなる。
【０１２０】
［ステップＳ１３２］流脈線計算部１５０は、点Ｐijの座標値を読み込む。
［ステップＳ１３３］流脈線計算部１５０は、計算開始時刻ｔ＝ｔiおよび計算終了時刻ｔ＝ｔi+1を、メモリ１０２から読み込む。
【０１２１】
［ステップＳ１３４］流脈線計算部１５０は、計算開始時刻ｔ＝ｔiに対応する、流体部分のグリッド情報ベクトルＢ（ベクトルｒ，ｔi）と速度場ベクトルｖ（ベクトルｒ，ｔi）を、情報読み込み部１３０を介してファイルflui(i).inpから読み込む。また流脈線計算部１５０は、心筋部分の弾性体のグリッド情報（心筋の構造情報）であるベクトルＭ（ベクトルｒ，ｔi）を、情報読み込み部１３０を介してファイルstru(i).inpから読み込む。
【０１２２】
［ステップＳ１３５］流脈線計算部１５０は、計算終了時刻ｔ＝ｔi+1における流体部分のグリッド情報ベクトルＢ（ベクトルｒ，ｔi+1）と速度場ベクトルｖ（ベクトルｒ，ｔi+1）を、情報読み込み部１３０を介してファイルflui(i+1).inpから読み込む。また流脈線計算部１５０は、ベクトルＭ（ベクトルｒ，ｔi+1）を、情報読み込み部１３０を介してファイルstru(i+1).inpから読み込む。
【０１２３】
［ステップＳ１３６］流脈線計算部１５０は、flui(i).inpとflui(i+1).inpの各グリッド点の速度場ベクトルのノルム（速度場ベクトルの長さ）を計算し、補間式を用いることにより当該時間区間における速度の最大値を求め、求めた最大値をＶmaxとしてメモリ１０２に保存する。
【０１２４】
［ステップＳ１３７］区間［ｔi，ｔi+1］をそのまま１回の時間発展で計算すると精度が不十分である。そのため流脈線計算部１５０は、区間［ｔi，ｔi+1］をＮdiv（Ｎdivは１以上の整数）等分し、中間時刻（ｔ＝ｔk（ｋ＝１，２，・・・，Ｎdiv））を決定する。これにより、区間を［ｔi，ｔi＋Δｔ］，［ｔi＋Δｔ，ｔi＋２Δｔ］，・・・，［ｔi＋（Ｎdiv−１）Δｔ，ｔi+1］に分割して解くこととなる。分割数Ｎdivは、流脈線計算部１５０が最適値を自動で決定する。なお、分割数Ｎdivを外部から与えることもできる。その後、処理がステップＳ１４１（図１３参照）に進められる。
【０１２５】
図１３は、時間発展計算処理の手順を示すフローチャートの後半部分である。以下、図１３に示す処理をステップ番号に沿って説明する。
［ステップＳ１４１］流脈線計算部１５０は、中間時刻（ｔ＝ｔk（ｋ＝１，２，・・・，Ｎdiv））の、ｋ＝１からｋ＝Ｎdivまで、ステップＳ１４２〜Ｓ１５０のループ処理を繰り返し実行することで、時間発展計算を行う。これにより、各中間時刻ｔ＝ｔkにおける座標ベクトルｒkが得られ、時刻ｔ＝ｔi+1における点Ｐi+1jの座標ベクトルｒNdiv＝ベクトルｒi+1が得られる。
【０１２６】
［ステップＳ１４２］流脈線計算部１５０は、時刻ｔ＝ｔkにおける場の情報（流体の構造情報ベクトルＢ（ベクトルｒ，ｔk）と速度場ベクトルｖ（ベクトルｒ，ｔk））を求める。この処理の詳細は後述する（図１７参照）。
【０１２７】
［ステップＳ１４３］流脈線計算部１５０は、時刻ｔ＝ｔkにおける弾性体場の情報（心筋の構造情報ベクトルＭ（ベクトルｒ，ｔk））を求める。この処理の詳細は後述する（図１８参照）。
【０１２８】
［ステップＳ１４４］流脈線計算部１５０は、時間ｄｔ＝ｔk+1−ｔk分だけ時間発展を行い、ベクトルｒk+1を求める。
ステップＳ１４２〜Ｓ１４４における各中間時刻での時間発展は以下のようにして行うことができる。点Ｐijが時刻ｔ＝ｔkで、ベクトルｒk（ｔk）にあったとすると、流脈線の方程式は式（８）で与えられる。
【０１２９】
【数８】
2018180707.tif 000010
【０１３０】
ここでベクトルｖ（ベクトルｒ，ｔ）は時刻ｔ、位置ベクトルｒでの速度（場）である。従って、時間Δｔ後の座標は常微分方程式である式（８）を数値的に解くことによって得られる。式（８）を４次ルンゲ・クッタ法で解くと以下のような計算式が得られる。なお、この考え方はより高次のルンゲ・クッタ型公式にも適用可能であり、高精度の計算が可能である（非特許文献２参照）。ここでは典型例として４次のルンゲ・クッタ公式で説明する。
【０１３１】
４次のルンゲ・クッタ公式では、以下の式（９）、式（１０）が成り立つ。
【０１３２】
【数９】
2018180707.tif 000011
【０１３３】
【数１０】
2018180707.tif 000012
【０１３４】
ここで流脈線計算部１５０は、係数αIと係数βIの値を、ルンゲ・クッタ係数表から取得する。
図１４は、ルンゲ・クッタ係数表の一例を示す図である。図１４に示すルンゲ・クッタ係数表には、Ｉ（Ｉは１〜４の整数）の値ごとの、係数αIと係数βIの値が示されている。図１４に示すようなルンゲ・クッタ係数表は、例えばメモリ１０２に予め記憶されている。
【０１３５】
時刻ｔ＝ｔkでの任意の位置ベクトルｒでの速度場ベクトルｖ（ベクトルｒ，ｔk）は、ベクトルｖ（ベクトルｒ，ｔi）、ベクトルｖ（ベクトルｒ，ｔi+1）、ベクトルＢ（ベクトルｒ，ｔi）、ベクトルＢ（ベクトルｒ，ｔi+1）、ベクトルＭ（ベクトルｒ，ｔi）、およびベクトルＭ（ベクトルｒ，ｔi+1）から求めることができる。また時刻ｔ＝ｔkでの移動境界面をＳkとすると、ステップＳ１４２、Ｓ１４３で用いる移動境界面Ｓk上の速度場の情報も計算することができる。以下、移動境界面を単に「境界面」と呼ぶ。従って、式（９）、式（１０）、図１４に示したルンゲ・クッタ係数表を用いて時間発展に必要な中間の値を計算することができる。これらの結果を式（８）に代入することで、ベクトルｒ（ｔk+1）を求めることができる。なお、時間発展処理の詳細は後述する（図２０参照）。
【０１３６】
以下、図１３の説明に戻る。
［ステップＳ１４５］流脈線計算部１５０は、ベクトルｒk+1の心臓内部での位置判定を行う。この処理を行うのは、求めたベクトルｒk+1は有限の時間幅で誤差を含んでおり、心筋内部に入り込んでしまう場合があるためである。サブルーチンとして位置判定を行った結果、位置判定の結果を示すステータスが返される。例えば心筋を跨いだり、心筋内部に入り込んだりしていなければ正常終了ステータスである「０」または「２」が返される。ベクトルｒk+1が解析対象の流体の要素内の位置（例えば心房・心室中）を示している場合、ステータス「０」が返される。ベクトルｒk+1が解析対象の流体の要素外の位置（例えば動脈中）を示している場合、ステータス「２」が返される。この処理の詳細は後述する（図２３参照）。
【０１３７】
［ステップＳ１４６］流脈線計算部１５０は、判定結果が、正常終了を示すステータス「０」か否かを判断する。ステータスが「０」であれば、処理がステップＳ１５０に進められる。ステータスが「０」でなければ、処理がステップＳ１４７に進められる。
【０１３８】
［ステップＳ１４７］流脈線計算部１５０は、判定結果が、終了を示すステータス「２」か否かを判断する。ステータス「２」が返される場合とは、計算の途中で点Ｐijが流体境界を超えて、大動脈のような系外に出た場合である。ステータスが「２」であれば、処理がステップＳ１４８に進められる。ステータスが「２」でなければ、処理がステップＳ１４９に進められる。
【０１３９】
［ステップＳ１４８］流脈線計算部１５０は、点Ｐijが系外に出た場合、流脈線上の点Ｐijのｊ＝１からｊまでの領域内判定フラグを「Ｆ」に設定する。領域内判定フラグ「Ｆ」は、点Ｐijが解析領域外に出たことを示している。その後、流脈線計算部１５０は、時間発展計算処理を終了する。このように終了ステータスが「２」の場合、系外に出たとして、領域内判定フラグを「Ｆ」に変えられる。線分を描画するとき、線分は点Ｐi1，Ｐi2，Ｐi3，・・・，ＰiNの順番に点と点を曲線で結んで描画される。そのため、Ｐijが領域外に出た場合は、粒子発生源から射出したそれ以前の点も描画をする根拠が失われる。そこで流脈線計算部１５０は、ｊ＝１，２，・・・，ｊまでの領域内判定フラグをすべて「Ｆ」に変えて処理を終了している。
【０１４０】
［ステップＳ１４９］流脈線計算部１５０は、正常終了しなかった場合（ステータスが「０」または「２」でない場合）、コントロールパラメータである時間刻み幅を小さくし、さらに計算を複数回に分けて、ステップＳ１４２〜Ｓ１４７の処理を繰り返す。ステップＳ１４２〜Ｓ１４７の処理の繰り返しは、可変時間刻み法で計算が収束するまで続けられる。流脈線計算部１５０は、時間刻み幅を小さくしていき、正常に終了したら、処理をステップＳ１５０に進める。
【０１４１】
なお、ベクトルｒk+1が予測球外に出てしまっているときも、正常終了しなかった場合に相当する。この場合、流脈線計算部１５０は、例えば予測球の半径を大きくして再計算することで、ベクトルｒk+1が予測球外に出てしまうことを抑止できる。
【０１４２】
［ステップＳ１５０］流脈線計算部１５０は、ベクトルｒk+1を保存し、保存した値をｋ＋１番目の繰り返し計算の初期値とする。
［ステップＳ１５１］流脈線計算部１５０は、ステップＳ１４２〜Ｓ１５０のループ処理が１回終わるごとに、ｋに１を加算し、ループ処理を繰り返す。流脈線計算部１５０は、ｋ＝Ｎdivの処理が終了すると、処理をステップＳ１５２に進める。
【０１４３】
［ステップＳ１５２］流脈線計算部１５０は、最終的に求まったベクトルｒNdivを、ベクトルｒk+1として保存する。
図１２、図１３に示した処理により、流脈線上の点の座標が更新されていく。
【０１４４】
図１５は、流脈線のデータ例を示す図である。図１５に示すように、解析対象の時刻ごとに、各流脈線の点の座標値が設定されている。時刻ｔ＝ｔ0では、各流脈線上の点には、初期値としてすべて粒子発生源の座標値が設定されている。時刻ｔ＝ｔ1において最初に放出された粒子の位置を示す点の座標値が更新される。その後、時刻が進むごとに、新たな粒子が放出され、新たに放出された粒子と既に放出されている粒子それぞれの位置を示す点の座標値が更新される。図１５では、前回の時刻から位置が変更された点の座標値にアンダーラインを示している。
【０１４５】
次に、出力データが与えられていない時刻ｔkにおける場の情報（ベクトルＢ（ベクトルｒ，ｔk）、ベクトルｖ（ベクトルｒ，ｔk）、およびベクトルＭ（ベクトルｒ，ｔk））を求める手続きを説明する。これらの場の情報は、ルンゲ・クッタ法による時間発展で説明した式（９）、式（１０）の計算に使用される。
【０１４６】
シミュレーションの結果としてデータが出力されているのは時刻ｔ＝ｔi，ｔi+1の場合だけである。そのため、ルンゲ・クッタ法で計算する中間時刻ｔkにおいて、グリッド座標、および速度場は定義されていない。そこで、流脈線計算部１５０は、出力ファイルの速度場から場を近似的に求める。このとき留意すべきは、シミュレーション実行時に、時々刻々とグリッドの位置を動かしていくことである。グリッドの位置の決め方には任意性があるが、心臓など境界自体が移動する問題ではＡＬＥ法がよく利用される。ＡＬＥ法では、シミュレーションに使用する座標自体が、記述する偏微分方程式の解の精度を落とさないように独立に決定される。決定には一般には偏微分方程式が使用される。しかし、データ解析の立場ではグリッドの位置を決定する支配方程式を知ることはできず、与えられたグリッド点の出力値だけが分かっている。このとき、グリッド点の位置が時間に対して連続的に変化する。
【０１４７】
図１６は、グリッド点の位置が時間に対して連続的に変化する様子を示す図である。図１６では、横軸に時刻、縦軸にグリッド点（頂点）のＸ座標値を示している。図１６に示すように、グリッド点は、時間進行に伴い位置が連続的に変化する。そこで流脈線計算部１５０は、グリッド点の位置が時間に対して連続的に変化することを利用して、補間法を用いて任意時刻におけるグリッド位置を推定する。
【０１４８】
図１７は、時刻ｔ＝ｔkにおける場の情報を求める処理の手順の一例を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
［ステップＳ１６１］流脈線計算部１５０は、時刻ｔkにおける場の情報をメモリに設定する。設定される情報は、ベクトルＢ（ベクトルｒ，ｔi）、ベクトルｖ（ベクトルｒ，ｔi）、ベクトルＢ（ベクトルｒ，ｔi+1）、およびベクトルｖ（ベクトルｒ，ｔi+1）である。
【０１４９】
なお、時刻ｔkは、ｔi≦ｔk≦ｔi+1を満たす。そしてベクトルＢ（ベクトルｒ，ｔi）、ベクトルｖ（ベクトルｒ，ｔi）、ベクトルＭ（ベクトルｒ，ｔi）、ベクトルＢ（ベクトルｒ，ｔi+1）、ベクトルｖ（ベクトルｒ，ｔi+1）、およびベクトルＭ（ベクトルｒ，ｔi+1）は既知である。これらのベクトルの値は、ステップＳ１３４とステップＳ１３５において既にファイルから読み込まれている。
【０１５０】
流脈線計算部１５０は、はじめに、流体部分の構造を規定するグリッド点について以下の処理を行う。ただし、計算量の削減のため、点Ｐi+1jの最大移動距離を理論的に求め、その最大移動距離を半径Ｒとする球内部のグリッド点のみを対象とする。この球を以後予測球と呼ぶ。
【０１５１】
［ステップＳ１６２］流脈線計算部１５０は、予測球半径Ｒを決定する。この処理の詳細は後述する（図２６参照）。
［ステップＳ１６３］流脈線計算部１５０は、予測球半径Ｒ内部にある流体のグリッド点を検索し、予測球内部に存在するグリッド点の数をＮB,elemに設定する。
【０１５２】
［ステップＳ１６４］流脈線計算部１５０は、予測球半径Ｒ内部にあるＮB,elem個のグリッド点すべてに対して、ステップＳ１６５〜Ｓ１６８のループ処理を行う。
［ステップＳ１６５］流脈線計算部１５０は、グリッド点ｉが境界面上か否かを判断する。境界面上であれば、流脈線計算部１５０は、処理をステップＳ１６７に進める。境界面上でなければ、流脈線計算部１５０は、処理をステップＳ１６６に進める。
【０１５３】
ステップＳ１６５により、グリッド点ｉが境界面上か否かにより、処理が分岐する。このような処理分岐が行われているのは、任意の時刻ｔkにおけるグリッド点ｉの座標を補間して求めることになるが、グリッド点ｉが心筋と血流の境界面Ｓ（ｔ）上の点である場合は、血流は心筋に対して滑りなしの拘束条件が課されるためである。
【０１５４】
［ステップＳ１６６］流脈線計算部１５０は、グリッド点ｉについての補間式に基づいて、グリッド位置を計算する。補間式は、例えば前述の式（２）である。なお事前解析結果Ωには、グリッド点ｉの座標の時間に関する補間式（式（２））の結果が保存されている。そのため流脈線計算部１５０は、事前解析結果Ωから、任意の時刻におけるグリッド座標を特定することができる。その後、流脈線計算部１５０は、処理をステップＳ１６９に進める。
【０１５５】
［ステップＳ１６７］流脈線計算部１５０は、グリッド点ｉが境界面Ｓ（ｔ）上の点であれば、境界条件を満たすように、以下のようにしてグリッド点ｉの位置を計算する。
グリッド点ｉが境界面Ｓ（ｔ）上の点である場合、その速度場から構成される位相空間上の点を（ベクトルｒID（ｔ），ベクトルｖID（ｔ））とする。すると、時刻ｔiおよびｔi+1では値が出力されているため２点（ベクトルｒID（ｔi），ベクトルｖID（ｔi））、（ベクトルｒID（ｔi+1），ベクトルｖID（ｔi+1））を通る曲線として求めればよい。グリッド位置ベクトルｒID（ｔ）と速度場ベクトルｖID（ｔ）について、以下の式（１１）の関係が成立する。
【０１５６】
【数１１】
2018180707.tif 000013
【０１５７】
従って、条件式は４つある。そのため、境界面Ｓ（ｔ）上のグリッド点ｉについては、ベクトルID（ｔ）を時間について３次式で定めることにより、４つの条件を満たすようにすることができる。従って、ベクトルｒID（ｔ）は、以下の式（１２）から決定できる。
【０１５８】
【数１２】
2018180707.tif 000014
【０１５９】
係数ベクトルａiはベクトルID（ｔ）の成分をξID（ξ＝ｘ，ｙ，ｚ）、その微分の成分をｖξ（ξ＝ｘ，ｙ，ｚ）とすると、
【０１６０】
【数１３】
2018180707.tif 000015
【０１６１】
【数１４】
2018180707.tif 000016
【０１６２】
【数１５】
2018180707.tif 000017
【０１６３】
【数１６】
2018180707.tif 000018
【０１６４】
となる。ここで、
【０１６５】
【数１７】
2018180707.tif 000019
【０１６６】
【数１８】
2018180707.tif 000020
【０１６７】
【数１９】
2018180707.tif 000021
【０１６８】
とした。このようにして、任意の時刻における境界面Ｓ（ｔ）上の位置ベクトルｒID（ｔ）の集合を取得できる。流体におけるすべてのグリッド点ｉの位置を計算することで、流体の構造情報であるベクトルＢ（ベクトルｒ，ｔk）を決定することができる。
【０１６９】
［ステップＳ１６８］流脈線計算部１５０は、補間式（式（１２））を用いて算出した係数を、メモリ１０２に保存する。なお、式（１２）では速度場も同時に求めることができる。速度場についてはここで計算してもよいし、必要に応じて式（１１）および式（１２）を用いて計算することもできる。そのため流脈線計算部１５０は、補間式（式（１２））を用いて算出した係数のみを保存している。
【０１７０】
［ステップＳ１６９］流脈線計算部１５０は、ステップＳ１６５〜Ｓ１６８の処理を１回行うごとにｉに１を加算し、ステップＳ１６５〜Ｓ１６８の処理を繰り返す。流脈線計算部１５０は、ｉ＝ＮB,elemに対する計算が終了すると、予測球内部の全てのグリッド点ｉにおけるグリッド点ｉの位置が計算されることになる。
【０１７１】
場の情報と同様に、心筋の構造情報であるベクトルＭ（ベクトルｒ，ｔ）についても、任意の時刻でのグリッド点情報を計算することができる。
図１８は、時刻ｔ＝ｔkにおける弾性体場の情報を求める処理の手順の一例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
【０１７２】
［ステップＳ１７１］流脈線計算部１５０は、読み込まれた心筋の構造情報をメモリに設定する。設定される情報は、ベクトルＢ（ベクトルｒ，ｔi）、ベクトルｖ（ベクトルｒ，ｔi）、ベクトルＭ（ベクトルｒ，ｔi）、ベクトルＢ（ベクトルｒ，ｔi+1）、ベクトルｖ（ベクトルｒ，ｔi+1）、ベクトルＭ（ベクトルｒ，ｔi+1）である。
【０１７３】
［ステップＳ１７２］流脈線計算部１５０は、予測球半径Ｒに基づいて、予測球内部の心筋の構造を検索し、心筋のグリッド点ｉを検索する。予測球半径Ｒは、流体部分の処理の時と同じ値が用いられる。流脈線計算部１５０は、検出したグリッド点ｉの数を、グリッド点ＮM,elemに設定する。
【０１７４】
［ステップＳ１７３］流脈線計算部１５０は、予測球半径Ｒ内部にあるＮM,elem個のグリッド点ｉすべてに対して、ステップＳ１７４〜Ｓ１７７の処理を行う。
［ステップＳ１７４］流脈線計算部１５０は、グリッド点ｉが境界面Ｓ（ｔ）の点であるか否かを判断する。境界面Ｓ（ｔ）上であれば、流脈線計算部１５０は、処理をステップＳ１７６に進める。境界面Ｓ（ｔ）上でなければ、流脈線計算部１５０は、処理をステップＳ１７５に進める。
【０１７５】
［ステップＳ１７５］流脈線計算部１５０は、事前解析結果Ωを用いて補間式（式（２））に従い、グリッド点ｉの位置を計算する。その後、流脈線計算部１５０は、処理をステップＳ１７８に進める。
【０１７６】
［ステップＳ１７６］流脈線計算部１５０は、式（１２）に従いグリッド点ｉの座標を計算する。流体におけるすべてのグリッド点ｉの位置を計算することで、流体の構造情報であるベクトルＭ（ベクトルｒ，ｔk）を決定することができる。
【０１７７】
［ステップＳ１７７］流脈線計算部１５０は、補間式（式（１２））を用いて算出した係数を、メモリ１０２に保存する。
なお流体の処理を先に行った場合、流体側に位置が同じになる対応するグリッド点ｉが存在する。そのため流脈線計算部１５０は、ステップＳ１７６，Ｓ１７７の処理に代えて、ステップＳ１６７における計算結果から、グリッド点ｉの座標を取得し、保存する処理を行ってもよい。
【０１７８】
［ステップＳ１７８］流脈線計算部１５０は、ステップＳ１７４〜Ｓ１７７の処理を１回行うごとにｉに１を加算し、ステップＳ１７４〜Ｓ１７７の処理を繰り返す。流脈線計算部１５０は、ｉ＝ＮM,elemに対する計算が終了すると、時刻ｔ＝ｔkにおける弾性体の構造情報を求める処理を終了する。このようにして、心筋の構造情報ベクトルＭ（ベクトルｒ，ｔk）を求めることができる。
【０１７９】
次に、任意の時刻ｔにおける血流中のグリッド座標ベクトルｒi（ｔ）での速度場ベクトルｖl（ベクトルｒl（ｔ），ｔ）の計算方法について説明する。
この速度場ベクトルｖl（ベクトルｒl（ｔ），ｔ）は、流脈線上の点の時間発展をルンゲ・クッタ法で行うための式（９）、式（１０）の計算に用いられる。出力データが与えられている時刻をｔiとすると、ｔi≦ｔ≦ｔi+1を満たす整数ｉを決定することができる。事前解析結果Ωには、各頂点の時刻ｔiにおけるグリッド座標ベクトルｒl（ｔi）の値、その点での速度場ベクトルｖl（ベクトルｒl（ｔi），ｔi）の値、および速度場の時間微分ベクトルｄｖ（ベクトルｒl（ｔi），ｔi）／ｄｔが保存されている。従って、速度場は時刻ｔiとｔi+1で速度場とその微分が与えられていることになる。そのため、微分まで含めて連続な曲線を補間曲線として仮定することができる。与えられた２つの時刻での速度場とその時間微分が与えられているため、式（２０）のような未知変数を４つとする３次の多項式を補間曲線として用いることができる。
【０１８０】
【数２０】
2018180707.tif 000022
【０１８１】
係数ベクトルｂk,iは、二つの時刻ｔiとｔi+1において速度場ベクトルｖi（ｔ）が滑らかに連続に繋がるように決める。ξ＝ｘ，ｙ，ｚとして、式（２１）〜（２６）を用いて係数を決定することができる。なお、以下の式において、速度の各軸方向の時間微分値を、「ｖ’x（ｔ）」、「ｖ’y（ｔ）」、「ｖ’z（ｔ）」のように「’」を付けて表している。
【０１８２】
【数２１】
2018180707.tif 000023
【０１８３】
【数２２】
2018180707.tif 000024
【０１８４】
【数２３】
2018180707.tif 000025
【０１８５】
【数２４】
2018180707.tif 000026
【０１８６】
【数２５】
2018180707.tif 000027
【０１８７】
【数２６】
2018180707.tif 000028
【０１８８】
このようにして、与えられたグリッド点ｉにおける任意の時刻ｔにおける速度場を求めることができる。
次に、任意の時刻ｔにおける血流中の任意の座標ベクトルｒでの速度場ベクトルｖ（ベクトルｒ，ｔ）の計算方法について説明する。
【０１８９】
いま、与えられた血流中の任意の座標ベクトルｒは血流中に属するため、座標ベクトルｒを含む血流の有限要素Ｉlを求める事ができる。有限要素Ｉlに属する頂点の座標をベクトルｒl（ｔ）、速度場をベクトルｖl（ベクトルｒl（ｔi），ｔ）とすると、座標ベクトルｒにおける速度場ベクトルｖ（ベクトルｒ，ｔ）は以下の式（２７）から決定することができる。
【０１９０】
【数２７】
2018180707.tif 000029
【０１９１】
ここで、Ｎi（ベクトルｒ，ｔ）を構造関数と呼ぶ。１次の四面体の構造関数の具体的の計算方法を以下に示す。
図１９は、四面体要素の一例を示す図である。四面体要素Ｉlの各頂点の座標が、それぞれＰ1（ｘ1，ｙ1，ｚ1）、Ｐ2（ｘ2，ｙ2，ｚ2）、Ｐ3（ｘ3，ｙ3，ｚ3）、Ｐ4（ｘ4，ｙ4，ｚ4）で与えられるものとする。このとき、構造関数は式（２８）で与えられる。
【０１９２】
【数２８】
2018180707.tif 000030
【０１９３】
ここで、Ｖは四面体要素Ｉlの体積である。また、係数ａi，ｂi，ｃiはｉ以外の３つの点が作る平面の方程式の法線ベクトルとして求めることができる。例えば、Ｎ1は点Ｐ1以外の３点Ｐ2，Ｐ3，Ｐ4が作る平面の法線ベクトルから決定できる。法線ベクトルをベクトルｎ1とすると、ベクトルｎ1＝（ａ1，ｂ1，ｃ1）＝ベクトル（Ｐ2Ｐ3）×ベクトル（Ｐ2Ｐ4）として計算することができる。ここで、ベクトル（Ｐ2Ｐ3）は、点Ｐ2から点Ｐ3へのベクトルである。ベクトル（Ｐ2Ｐ4）は、点Ｐ2から点Ｐ4へのベクトルである。「×」は、ベクトルの外積である。なお、法線ベクトルの向きは底面の３角形Ｐ2Ｐ3Ｐ4からみて、頂点Ｐ1の向きが正になるようにとるものとする。さらに係数ｄiは平面の方程式ａiｘ＋ｂiｙ＋ｃiｚ＋ｄi＝０が点Ｐ2（または点Ｐ3，点Ｐ4でもよい）を通ることから決定することができる。従って、任意の点ベクトルｒが四面体要素Ｉl中の点であると、式（２８）に従い構造関数の値が決定できる。そして、式（２７）からその場所での速度場ベクトルｖ（ベクトルｒ，ｔ）を計算することができる（非特許文献６参照）。
【０１９４】
次に、ルンゲ・クッタ法による時間発展処理について詳細に説明する。
図１３のステップＳ１４２，Ｓ１４３で任意の時刻における心筋と血流のグリッド点ｉの位置を求めた後、ステップＳ１４４で流脈線上の点ベクトルｒ（ｔk）の時間発展がルンゲ・クッタ法で行われる。
【０１９５】
図２０は、ルンゲ・クッタ法による時間発展処理の手順の一例を示すフローチャートである。以下、図２０に示す処理を、ステップ番号に沿って説明する。
［ステップＳ１８１］流脈線計算部１５０は、インデックスｉ＝１から順番に、インデックスｉ＝１，２，３，４について、ステップＳ１８２〜Ｓ１８３のループ処理を繰り返し実行する。
【０１９６】
［ステップＳ１８２］流脈線計算部１５０は、ベクトルｒ（ｔk）が属する血流要素番号Ｉlを求め、式（２７）による速度ベクトルの計算をするための要素情報を取得する。
［ステップＳ１８３］流脈線計算部１５０は、ルンゲ・クッタ法で用いる中間の速度ベクトルｖi（ｉ＝１，２，３，４）を、式（９）、式（１０）で計算する。ここでベクトルｖiの計算には、データが与えられていない任意の時刻での流体中の任意の座標における速度場の計算も行われる。例えば、ベクトルｖ1は時刻ｔkにおける座標ベクトルｒ（ｔk）における速度場の値であるが、時刻ｔkは事前解析によりデータが与えられている時刻とは限らない。また、座標ベクトルｒkもデータが与えられている流体中のグリッド点ｉの座標とは限らない。従って、任意の時刻ｔにおける、任意の座標ベクトルｒでの速度場の計算を行うこととなる。
【０１９７】
例えば、座標ベクトルｒ（ｔk）と時刻ｔkが与えられているため、前述した、任意の時刻ｔにおける血流中の任意の座標ベクトルｒでの速度場ベクトルｖ（ベクトルｒ，ｔ）の計算方法（式（２７））により、速度場を計算することができる。なお、ベクトルｖ2はベクトルｖ1の情報を含むが、ベクトルｖ1が既に計算されている。そのため、前述の任意の時刻ｔにおける血流中のグリッド座標ベクトルｒi（ｔ）での速度場ベクトルｖl（ベクトルｒl（ｔ），ｔ）の計算方法（式（２０）および式（２７））でも速度場を計算することができる。
【０１９８】
［ステップＳ１８４］流脈線計算部１５０は、ステップＳ１８２〜Ｓ１８３の処理を１回行うごとにｉに１を加算し、ステップＳ１８２〜Ｓ１８３の処理を繰り返す。流脈線計算部１５０は、ｉ＝４に対する計算が終了すると、すべてのベクトルｖi（ｉ＝１，２，３，４）の計算が完了したこととなるため、処理をステップＳ１８５に進める。
【０１９９】
［ステップＳ１８５］流脈線計算部１５０は、式（９）により、次の時刻ｔk+1における流脈線の座標ベクトルｒ（ｔk+1）を計算する。
次に、心臓内部での位置判定について詳細に説明する。
【０２００】
ここでは、時間発展の結果得られたベクトルｒk+1の心臓中の位置を判定する手続きについて説明する。ルンゲ・クッタ法などの方法は有限の誤差を含むため、計算の結果得られた位置ベクトルｒk+1が本来であればありえない位置になることがある。
【０２０１】
図２１は、計算の結果得られる可能性のある位置の例を示す図である。心臓４０の右心系４１と左心系４２の内部が、解析対象の流体が存在する領域である。右心系４１には、右心房や右心室が含まれる。第２の実施の形態では、左心系４２には、左心房や左心室が含まれる。左心系４２に繋がっている動脈４３内の血流は、解析対象外である。ただし、大動脈の一部をシミュレーションに含めてもよい。
【０２０２】
時刻ｔ＝ｔkで点Ｐkjが流体中に存在するとき、時間発展により移動したときの移動先は、図２１に示すように５通りの分類が可能である。移動した点には、移動先に応じて状態変数（ステータス）が設定される。心筋壁を超えず、解析対象の流体の要素内にある場合の状態変数は「０」である。心筋壁を超え、解析対象の流体の要素外にある場合の状態変数は「１」である。心筋壁を超えず、解析対象の流体の要素外にある場合の状態変数は「２」である。心筋壁を超え、解析対象の流体の要素内にある場合の状態変数は「３」である。心筋壁を超えてはいないが、心筋と解析対象の流体の要素との境界上にある場合の状態変数は「４」である。
【０２０３】
図２２は、状態変数の真理値表を示す図である。なお、どちらの場合も移動前の点をＰとし、点Ｐは必ず流体中に存在していると仮定し、移動後の点Ｑの判定のみ行うものとする。どのような状態変数になるのかは、２つの判定を行うことで分類可能である。
【０２０４】
１つ目は対象となる点Ｑが流体中に存在するかどうかを判定する流体判定である。点Ｑが流体中に存在すればＴを返し、存在しなければＦを返す。
２つ目は移動元の点Ｐと移動後の点Ｑを結んだ直線ＰＱが心筋または心筋表面と交わるかどうかを判定する直線判定である。直線ＰＱが心筋（表面）と交わればＴを返し、交わらない場合はＦを返す。また直線判定では、同時に交点の個数も返す。
【０２０５】
流脈線計算部１５０は、点Ｑが流体中に存在し、直線ＰＱが心筋と交わらない場合は、正常に移動したものとして状態変数「０」を設定する。
点Ｑが流体中に存在せず、直線ＰＱが心筋（表面）と交わる場合、点Ｑは（１）心筋を突き破って系外に出た場合と（２）心筋内部にめり込んだ場合との２通りが存在する。どちらも再計算をすることになるため、流脈線計算部１５０は、状態変数として「１」を設定する。
【０２０６】
点Ｑは流体中に存在せず、線分ＰＱが心筋（表面）と交わらない場合は、大動脈などを通してシミュレーション系外に出たものとして、流脈線計算部１５０は状態変数「２」を設定する。
【０２０７】
点Ｑが流体中に存在しても、左心房から右心房へ移動するなどありえない移動をする場合では、流体判定はＴが返るが、直線判定もＴであり、交点は必ず複数になる。そのため、交点の数が２以上の場合、流脈線計算部１５０は状態変数「３」を設定する。
【０２０８】
流体判定がＴであり、直線判定がＴの場合でも、交点数が１の場合は流体と心筋の境界面に達したとして、流脈線計算部１５０は状態変数「４」を設定する。
このような状態判定の処理手順を以下に示す。
【０２０９】
図２３は、心臓内部での位置判定の処理手順の一例を示すフローチャートである。以下、図２３に示す処理をステップ番号に沿って説明する。
［ステップＳ１９１］流脈線計算部１５０は、時間発展後の座標ベクトルｒk+1が流体中に存在するかどうか判定する。この処理の詳細は後述する（図２４参照）。
【０２１０】
［ステップＳ１９２］流脈線計算部１５０は、移動ベクトルｄｒ＝ベクトルｒk+1−ベクトルｒkが作る有限の長さの線分が心筋と交点を持つか判定すると共に、この線分が心筋表面と交わる交点の数を計数する。この処理の詳細は後述する（図２５参照）。
【０２１１】
［ステップＳ１９３］流脈線計算部１５０は、図２２に示した真理値表に基づいて、状態を判定する。すなわち、ステップＳ１９１，Ｓ１９２の結果は、それぞれ真偽値Ｔ（真、Ｔｒｕｅ）、Ｆ（偽、Ｆａｌｓｅ）の２値で返される。ステップＳ１９３の結果は０以上の整数値となる。流脈線計算部１５０は、真理値表を参照し、ステップＳ１９１〜Ｓ１９３の戻り値に対応する心臓の状態変数として、「０」〜「４」のいずれかの値を位置判定結果とする。
【０２１２】
このようにして、位置判定が行われ、状態変数が決定される。
次に、時間発展後の位置が流体か否かの判定処理（ステップＳ１９１）について詳細に説明する。
【０２１３】
図２４は、時間発展後の位置が流体内か否かの判定処理の手順の一例を示すフローチャートである。図２４の例では、座標ベクトルｒk+1が流体中に存在するか判定する。以下、図２４に示す処理をステップ番号に沿って説明する。
【０２１４】
［ステップＳ２０１］流脈線計算部１５０は、時刻ｔkでの座標ベクトルｒkを取得する。
［ステップＳ２０２］流脈線計算部１５０は、時刻ｔk+1での座標ベクトルｒk+1を取得する。
【０２１５】
［ステップＳ２０３］流脈線計算部１５０は、予測球半径の値Ｒを取得する。
［ステップＳ２０４］流脈線計算部１５０は、座標ベクトルｒkを中心とした半径Ｒの予測球内部の要素のリスト（流体要素リストＬf）を取得する。
【０２１６】
［ステップＳ２０５］流脈線計算部１５０は、流体要素リストＬfの要素数をｓｉｚｅfとする。
［ステップＳ２０６］流脈線計算部１５０は、結果（ｒｅｓｕｌｔ）の初期値として「Ｆ（Ｆａｌｓｅ）」を設定する。
【０２１７】
［ステップＳ２０７］流脈線計算部１５０は、ｉ＝１，２，・・・，ｓｉｚｅfまで、要素リスト内の要素Ｌiに対してステップＳ２０８の処理を繰り返す。
［ステップＳ２０８］流脈線計算部１５０は、要素リスト内の要素Ｌiに対して、要素Ｌiが座標ベクトルｒk+1を含むかどうかを判定する。座標ベクトルｒk+1を含む場合、流脈線計算部１５０は、処理をステップＳ２１０に進める。座標ベクトルｒk+1を含まない場合、流脈線計算部１５０は、処理をステップＳ２０９に進める。
【０２１８】
［ステップＳ２０９］流脈線計算部１５０は、ステップＳ２０８の処理を１回行うごとにｉに１を加算し、ステップＳ２０８の処理を繰り返す。そして流脈線計算部１５０は、ｉ＝ｓｉｚｅfの処理が終了したら、時間発展後の位置が流体内か否かの判定処理を終了する。
【０２１９】
［ステップＳ２１０］流脈線計算部１５０は、要素Ｌiの要素番号ＩＤをメモリに保存する。
［ステップＳ２１１］流脈線計算部１５０は、ｒｅｓｕｌｔをＴｒｕｅに変更する。
【０２２０】
このようにして、移動先の点の座標がいずれかの要素に含まれていた場合、座標ベクトルｒk+1は流体中に存在するとして戻り値がＴ（Ｔｒｕｅ）に設定される。しかし、含まれていない場合は戻り値がＦ（Ｆａｌｓｅ）に設定される。
【０２２１】
次に、予測球内部にある移動ベクトルｄｒが通過する弾性体要素の検索処理（ステップＳ１９２）について詳細に説明する。
図２５は、移動ベクトルが作る線分と心筋の交点数の計数処理の手順の一例を示すフローチャートである。以下、図２５に示す処理をステップ番号に沿って説明する。
【０２２２】
［ステップＳ２２１］流脈線計算部１５０は、時刻ｔkでの座標ベクトルｒkを取得する。
［ステップＳ２２２］流脈線計算部１５０は、時刻ｔk+1での座標ベクトルｒk+1を取得する。
【０２２３】
［ステップＳ２２３］流脈線計算部１５０は、取得した情報から移動ベクトルｄｒ＝ベクトルｒk+1−ベクトルｒkを計算する。これにより、点の移動経路を示す線分が定義される。
【０２２４】
［ステップＳ２２４］流脈線計算部１５０は、予測球半径Ｒの値を取得する。
［ステップＳ２２５］流脈線計算部１５０は、予測球半径内部にある弾性体の要素リスト（弾性体要素リストＬe）を作成する。
【０２２５】
［ステップＳ２２６］流脈線計算部１５０は、弾性体の要素リストＬeの要素数をｓｉｚｅeとする。
［ステップＳ２２７］流脈線計算部１５０は、結果（ｒｅｓｕｌｔ）の初期値として「Ｆ（Ｆａｌｓｅ）」に設定する。
【０２２６】
［ステップＳ２２８］流脈線計算部１５０は、ｉ＝１，２，・・・，ｓｉｚｅeまで、要素リストＬe内の要素に対してステップＳ２２９のループ処理を繰り返す。
［ステップＳ２２９］流脈線計算部１５０は、ｉ番目の要素Ｌiが移動ベクトルｄｒと交わるか否かを判断する。要素Ｌiは多面体であるため、流脈線計算部１５０は、要素Ｌiに含まれるすべての面に対して移動ベクトルｄｒと交点を求める。要素内のすべての面に対して、交点が１点も存在しなければ、流脈線計算部１５０は、その要素とは交わらないと判定する。交わらない場合、流脈線計算部１５０は、処理をステップＳ２３０に進める。交わる場合、流脈線計算部１５０は、処理をステップＳ２３１に進める。
【０２２７】
［ステップＳ２３０］流脈線計算部１５０は、ステップＳ２２９の処理を１回行うごとにｉに１を加算し、ステップＳ２２９の処理を繰り返す。そして流脈線計算部１５０は、ｉ＝ｓｉｚｅeの処理が終了したら、移動ベクトルｄｒが通過する弾性体要素の検索処理を終了する。
【０２２８】
［ステップＳ２３１］流脈線計算部１５０は、要素Ｌiの要素番号ＩＤをメモリに保存する。
［ステップＳ２３２］流脈線計算部１５０は、線分を示すベクトルｄｒと心筋表面との交点数Ｚ（Ｚは１以上の整数）を求め、メモリ１０２に保存する。
【０２２９】
［ステップＳ２３３］流脈線計算部１５０は、ｒｅｓｕｌｔをＴｒｕｅに変更する。
このようにして、交点が１点も存在しない場合、交わらないとしてＦが返され、交点が１点以上存在する場合、交わるとしてＴが返される。交わる場合は交点を持つ要素の番号と、心筋表面との交点数Ｚが保存される。
【０２３０】
以上の処理により、点の移動先の状態を適切に判定することができる。この際、移動先の判定対象として予測球内の要素を対象とすることで、処理を効率化することができる。以下、予測球半径Ｒの決定方法について詳細に説明する。
【０２３１】
流脈線計算部１５０は、予測球は時間発展前の座標ベクトルｒkが時間刻み幅Δｔの間にどれだけの距離を動くことができるかに基づいて決定する。４次のルンゲ・クッタ法の場合、式（９）から次の不等式が成立する。
【０２３２】
【数２９】
2018180707.tif 000031
【０２３３】
従って、半径Ｒを
【０２３４】
【数３０】
2018180707.tif 000032
【０２３５】
と定義すれば、半径Ｒは流脈線上の点Ｐが時間Δｔに進む最大距離を表す。そして、時間Δｔ後にも点Ｐは必ずこの球内部に存在する。また、中間ベクトルｖiも同様にして、半径Ｒの球内部の点であることを次のようにして示すことができる。すなわち式（９）において、Ｉ＝１の場合を例にとると、
【０２３６】
【数３１】
2018180707.tif 000033
【０２３７】
が成立する。そのため、中間ベクトルが指し示す座標も半径Ｒの球内部の点になるのである。同様のことを式（９）のＩ＝２，３，４について行えば、すべての中間ベクトルｖIも同様にして、半径Ｒの球内部の点であることが分かる。このような半径Ｒを予測球半径とする。流脈線計算部１５０は、予測球半径を設定するため流体の速度場から最大値を求める。そのために以下のようにして求める。
【０２３８】
速度場は式（２０）に従って、３次の多項式で補間されている。そのことから、各グリッド点ｉにおける速度場の区間［ｔi，ｔi+1］における最大値を数値的に求めることができる。得られた各グリッド点ｉにおける速度場の最大値の中からさらに最大値を選ぶことによって、この二つの時刻の中での速度場のノルム最大の点を最大速度｜ベクトルｖmax｜として設定することができる。この処理はデータセットに対して１回だけ実行すればよいため、事前解析結果Ωとして保存すれば、二度目以降の処理は行わなくてよい。その後、ルンゲ・クッタ法の時間刻み幅Δｔを設定すると、最大移動距離はＲ＝｜Δｔベクトルｖmax｜として定まる。
【０２３９】
しかし、このように定めた予測球半径Ｒは時間刻み幅Δｔが小さくなりすぎると、グリッドの幅（隣接するグリッド点間の距離）より小さくなってしまう。そのため、グリッド点ｉの離散化に伴う最小値Ｒminが存在する。例えば、このＲminは経験的な最小値として初期値をＲmin＝０．００１［ｍ］に設定する。グリッドの統計分析から最小値を求めることも可能である。
【０２４０】
予測球の半径Ｒが、このようにして求めたＲminより小さくなった場合、予測球の半径はＲ＝Ｒminとして、予測球内部に要素が一つも存在しない状況を回避することができる。以上のような予測球半径Ｒの決定処理を整理すると、図２６のような手順となる。
【０２４１】
図２６は、予測球半径の決定処理の手順の一例を示すフローチャートである。以下、図２６に示す処理をステップ番号に沿って説明する。
［ステップＳ２４１］流脈線計算部１５０は、要素の辺の長さと速度場の統計解析から予測球半径の最小値Ｒminを決定する。
【０２４２】
［ステップＳ２４２］流脈線計算部１５０は、時刻ｔiでの速度ベクトルｖiの値を取得する。
［ステップＳ２４３］流脈線計算部１５０は、時刻ｔiでの速度の最大値｜ベクトルｖi,max｜を取得する。
【０２４３】
［ステップＳ２４４］流脈線計算部１５０は、時刻ｔi+1での速度の最大値｜ベクトルｖi+1,max｜を取得する。
［ステップＳ２４５］流脈線計算部１５０は、｜ベクトルｖi,max｜が｜ベクトルｖi+1,max｜以上かどうかを判断する。流脈線計算部１５０は、｜ベクトルｖi,max｜が｜ベクトルｖi+1,max｜以上であれば、処理をステップＳ２４６に進める。流脈線計算部１５０は、｜ベクトルｖi,max｜が｜ベクトルｖi+1,max｜未満であれば、処理をステップＳ２４７に進める。
【０２４４】
［ステップＳ２４６］流脈線計算部１５０は、｜ベクトルｖi,max｜を｜ベクトルｖmax｜に設定する。流脈線計算部１５０は、その後、処理をステップＳ２４８に進める。
［ステップＳ２４７］流脈線計算部１５０は、｜ベクトルｖi+1,max｜を｜ベクトルｖmax｜に設定する。流脈線計算部１５０は、その後、処理をステップＳ２４８に進める。
【０２４５】
［ステップＳ２４８］流脈線計算部１５０は、ルンゲ・クッタ法の時間刻み幅ｄｔを取得する。
［ステップＳ２４９］流脈線計算部１５０は、｜ベクトルｖmax｜ｄｔを計算し、計算結果を予測球半径Ｒに設定する。
【０２４６】
［ステップＳ２５０］流脈線計算部１５０は、予測球半径Ｒが、予測球半径の最小値Ｒminより小さいか否かを判断する。流脈線計算部１５０は、予測球半径Ｒが最小値Ｒminより小さい場合、処理をステップＳ２５１に進める。流脈線計算部１５０は、予測球半径Ｒが最小値Ｒmin以上の場合、予測球半径決定処理を終了する。
【０２４７】
［ステップＳ２５１］流脈線計算部１５０は、最小値Ｒminを予測球半径Ｒに設定する。その後、流脈線計算部１５０は、予測球半径決定処理を終了する。
以上のような処理により、適切な予測球半径Ｒを決定することができる。
【０２４８】
なお、第２の実施の形態では、以下のような処理によって、処理の高速化を図ることができる。
［分割法による計算の高精度化と高速化］
図１２のステップＳ１３７では、出力ファイルが与えられた時間ｔi≦ｔ≦ｔi+1の時間分割をさらにＮdiv分割している。この分割の仕方について詳細に説明する。
【０２４９】
流脈線の計算では一回の流脈線上の点が関与する要素は全体のごく一部である。そのため、記憶容量削減と計算時間の短縮のため予測球を用いる。従って、流脈線の計算コストは予測球半径Ｒ3に比例して増大する。このことは、以下のように説明できる。
【０２５０】
計算対象となる要素の数Ｎelemは、空間的な要素数の密度を座標ベクトルｒの関数としてρ（ベクトルｒ）とすると、以下の式で与えられる。
【０２５１】
【数３２】
2018180707.tif 000034
【０２５２】
密度ρ（ベクトルｒ）がおおよそ一様であると仮定すれば、ρ（ベクトルｒ）＝ρ0となる。そのため、Ｎelem∝Ｒ3となる。
ここで時間ｔi≦ｔ≦ｔi+1をＮdiv分割することを考える。Ｎdiv分割すると、ルンゲ・クッタ法による時間発展回数はＮdiv回となる。一方で、予測球半径は式（３０）から決定される。そのため、時間刻み幅がＮdiv分の１になると、予測球半径もＮdiv分の１になる。１回の計算量は、予測球半径Ｒ3に比例するため、Ｎdiv-3になる。この計算をＮdiv回繰り返すため、合計の計算量はＮdiv-2になる。この計算の概要を模式化したのが図２７である。
【０２５３】
図２７は、時間分割による計算量削減の概念を示す図である。図２７では、点Ｐの移動先となる点Ｑを計算する場合を想定している。時間分割せずに時間刻み幅を長くすると、点Ｐを中心とする大きな予測球４５内を解析することとなるが、時間分割を行い、時間刻み幅を短くすると、点Ｐにある粒子の移動可能範囲が狭まる。そのため、予測球４５よりも小さな予測球４６内を解析すればよい。すなわち、大きな予測球４５に対して１回計算をするより、時間をＮdiv分割して、経路を細分化したほうが予測球４６が小さくなる。その結果、計算対象になる要素数を減らせ、計算量を削減できることが分かる。
【０２５４】
図２８は、時間分割数に応じた合計計算時間の変化の一例を示す図である。図２８のグラフは、横軸が分割数Ｎdivであり、縦軸が計算時間である。理論上の計算時間５１の遷移を破線で示し、実際の計算時間５２の遷移を実線で示している。実際の計算時間５２は、時間ｔi≦ｔ≦ｔi+1のトータルの計算時間を測定したものである。Ｎdiv＝０の時は、予測球を使用せず、そのまま全部の要素を計算対象とした場合にかかった時間である。
【０２５５】
理論上は分割数Ｎdivが多くなるほど計算時間は短くなる。しかし、実際には、分割数を多くしすぎると、予測球内の要素のリスト作成など、分割後の単位時間当たり１回ずつ行われる処理の回数が増えてしまい、処理時間が増加に転じる。そのため、分割数Ｎdivには最適値が存在する。分割数Ｎdivの最適値は、例えば流脈線の計算を始める前にＮdivを変えながら、対象となる系に対して予め測定しておく。
【０２５６】
［統計分析による予測球半径の最小値の決定法］
流体シミュレーションは有限個の離散点情報で行われる。従って、予測球半径を小さくしすぎると予測球内部に離散点情報が含まれない状況が生じうる。これは予測球半径に下限値が存在することを意味する。同時に、予測球半径は式（３０）から決定されるため、時間刻み幅にも下限値が存在する。予測球を用いた計算では、予測球半径の下限値Ｒminを設定し、その予測球半径が下限値以下の場合になるときは、Ｒminを予測球半径として設定する。なお、予測球の下限値以下になった時に、それより大きな値であるＲminを使用するので、流脈線上の点が予測球外部に出てしまうことはない。このように、計算を安定に進めるためにＲminの決定は重要である。また、Ｒminの値は時間分割数Ｎdivの決定にも関与する。Ｒminの値が定まれば、Ｒ0＝｜Δｔベクトルｖmax｜が最大移動距離であるため、天井関数を使って以下の式で分割数Ｎdivを決定できる。
【０２５７】
【数３３】
2018180707.tif 000035
【０２５８】
分割数Ｎdivの値は計算速度と計算精度に関わるため、Ｒminの決定は計算速度と計算精度の面でも重要である。
しかし、下限値Ｒminの決め方には工夫がいる。具体的には、確率モデルを導入し、流脈線計算部１５０は、計算実行時に失敗することを許容した投機的な計算を行う。計算に失敗したときには計算が確実に成功するパラメータで計算を実行し、その計算にかかる時間がペナルティとしてかかると考える。そして、ペナルティまで含めて統計的に計算時間を最小にするように下限値Ｒminを決定する。詳細を以下に記す。
【０２５９】
流脈線計算部１５０は、初めにペナルティとして用いる最悪値としての半径Ｒwを決める。これはシミュレーションに用いられた要素の辺の長さの最長のものを設定する。
図２９は、要素の辺の長さの分布の一例を示す図である。図２９のグラフは、横軸が要素の辺の長さであり、縦軸が、辺の長さごとの該当する辺の存在確率を示す確率密度である。グラフ中には、２種類の心臓シミュレーション＃１，＃２における確率密度関数６１，６２を破線で示している。
【０２６０】
図２９の例では、シミュレーションに使用された要素の一部が非常に粗く、最長で０．００８［ｍ］にも達する。そのため、そのまま計算に用いてしまうと分割数Ｎdivも小さくなり、速度が遅くなる。しかし、殆どの計算は最長の長さでなくても計算できる。
【０２６１】
最悪値としての半径Ｒwの決定後、流脈線計算部１５０は、計算に使用する下限値Ｒminを決定する。この際、流脈線計算部１５０は、統計的な計算コストを、計算の失敗を前提として計算する。そして、流脈線計算部１５０は、投機的な実行を考慮に入れ、失敗した時のペナルティまで含めて計算量が最小になるような半径を、下限値Ｒminとして選択する。これは、仮定する確率モデルに極端に依存する話であるが、簡単な例を用いて説明する。まず、流脈線上の点は、すべての要素が等確率で解析対象になると仮定する。すると、図２９の確率密度関数６１，６２に従って、計算が成功する。
【０２６２】
今、半径Ｒで計算時間がＴだけかかるとする。この計算量はＲ3に比例する。また半径をβＲ（０＜β≦１）に縮小することで、計算はｐ［％］の確率で成功するものとする。計算が成功する場合とは、点の移動先が半径βＲの予測球内にある場合である。計算に失敗した場合、半径Ｒで再計算する。この場合、ペナルティまで含めた計算時間Ｔ’は、
【０２６３】
【数３４】
2018180707.tif 000036
【０２６４】
となる。
図３０は、予測球半径に応じた計算コストの変化を示す図である。図３０の縦軸が計算コスト（Ｔ’／Ｔ）であり、横軸が予測球半径Ｒである。図３０に示すように、Ｒ＝０．００３［ｍ］付近でペナルティまで含めたコストが最悪値半径Ｒmax＝０．００８［ｍ］と比べて約１０％まで落ちることがわかる。そして、ペナルティまで含めて統計的に最小の計算量で済む半径が存在することがわかる。実際には、有限回の計算であるため、すべての要素を等確率に解析対象とするという状態にはならない。そのため、これよりも半径の値は小さくなる。
【０２６５】
この場合、最適な予測球半径Ｒが存在することは示せるが、最適値自体は過大評価される傾向がある。そこで、過大評価を抑えることを目的とし、各離散点における速度場のノルムを求め、これに時間刻み幅をかけて移動距離の分布を出すと図３１のようになる。
【０２６６】
図３１は、移動距離の確率分布を示す図である。図３１では、横軸が移動距離、縦軸が発生数を示している。同じ形状、同じ大きさの４面体があったとしても、４面体上での速度場の大きさが２倍違えば、対象となる４面体を通過する時間は半分になる。そこで、移動距離の分布から式（３３）を用いて予測球半径Ｒの関数としてペナルティまで含めた計算効率性を図示したのが図３２である。
【０２６７】
図３２は、確率分布を仮定した時の計算効率化曲線を示す図である。図３２では、横軸が予測球半径Ｒ、縦軸が計算効率である。計算効率は、値が小さいほど効率がよいことを示す。図３２から計算効率が最もよい予測球半径Ｒを求めると、０．００１２［ｍ］〜０．００１６［ｍ］程度になる。これは経験的な最適値Ｒmin＝０．００１５±０．０００５［ｍ］のモデル論的な裏付けである。
【０２６８】
以上のようにして、予測球半径Ｒの最適値を求めることができる。すなわち、離散点が予測球の外部に出てしまう場合の再計算のペナルティを考慮した、最も効率的な予測球半径Ｒを設定することができる。その結果、流脈線の計算効率が向上する。
【０２６９】
［具体的な計算例］
以下、心臓シミュレータによる心筋と冠循環の解析を用いて、流脈線を実際に計算した場合の計算速度について具体的に説明する。
【０２７０】
初めに計算に用いたデータについて説明する。シミュレーション結果は心臓の拍動１周期分が出力されており、０．０１［ｓｅｃ］ごとに１００個の心臓の状態のデータが出力されている。心臓の拍動により速度場は時間依存して変化するため、速度場は非定常流である。また、心筋も拍動のため拡張と収縮を繰り返す。従って、心筋面も動き、移動境界が問題になる。この系において心臓中の血流の輸送を記述するため、心臓中の複数の点に粒子発生装置を配置し、流脈線を計算する。
【０２７１】
可視化装置１００に外部から心筋と流体の情報を読み込ませる。この際、可視化装置１００に、流脈線の本数Ｍと計算回数Ｎを入力する。また可視化装置１００に対して、心臓中の左心室と右心房を流脈線の発生源とするように、発生源の位置を入力する。発生源の配置指示に従い、例えば可視化装置１００は、半径０．０５［ｍ］の球内部の流体部分からランダムに２０個ずつ、流脈線の発生源を配置したものとする。また、計算回数は０．３拍分の３０回とする。なお、時間発展計算は４次のオーダのルンゲ・クッタ法で行った。
【０２７２】
以上のような初期条件を設定し、可視化装置１００が流脈線計算を開始する。開始後、ステップ毎に粒子発生源から粒子が発生する。それぞれの粒子の時間Δｔ＝０．０１［ｓｅｃ］後の位置は図９に示した流脈線計算のフローチャートに従って、計算される。計算された流脈線は、モニタ２１に表示される。
【０２７３】
図３３は、流脈線の表示例を示す図である。図３３の例では、心臓７０の断面の画像の上に重ねて、複数の流脈線７１が表示されている。
流脈線の計算では、計算量の削減のため、および計算精度の向上のため、予測球が使用されている。予測球を使った計算では、時間刻み幅Δｔ＝０．０１［ｓｅｃ］をさらにＮdiv分割して細分化した。Ｎdivの値は、統計的に計算量が最小になるように自動的に最適値が決定される。このシミュレーション結果の場合、Ｎdivの値はＮdiv＝３〜７程度に設定された。
【０２７４】
Ｎdivの最適化による計算速度を定量的に測定した結果は、図２８に示した通りである。図２８の例では、予測球を使用した場合の効果を示すため、予測球を使用しない場合の流脈線の計算時間も計測している。Ｎdiv＝０のときが、予測球を使用しない場合、すなわちそのまま全部の要素を計算対象とした場合にかかった時間である。
【０２７５】
予測球を使った場合（Ｎdiv＝１）の時、つまり、実質上時間分割をしない場合は予測球の構築などに時間がかかる。そのため、予測球を使用しない場合よりも時間がかかる（約１．４７倍）。しかし、Ｎdiv＝２とすると、予測球の構築にかかる固定コストよりも、Ｎdiv-2に比例する計算コスト減少量の方が大きくなる。そのため、計算時間は予測球を使用しない場合と比べても約２２．９％まで減少する。Ｎdivを増やしていくと、計算時間は短くなっていくが、予測球を構築するための固定コストがあるため、性能向上に上限値が存在することが分かる。図２８の例では、Ｎdiv＝４が最良である。そして、分割数Ｎdivを増やして行くと、固定コストの効果が上回り、計算時間は増大に転じる。Ｎdiv＝１０では最良のケースと比べて性能が約５３％程度まで悪化している。
【０２７６】
このように分割数Ｎdivには最適値が存在するが、実際の計算では流脈線の計算を始める前に最良の分割数が決定されている。また、図２８の計算では、グリッド点数が高々５０，０００点程度であるため、予測球を使わなかった場合の方が、予測球を使いＮdiv＝１の場合よりも計算時間は短い。しかし、シミュレーション系が大規模になれば、予測球を使わない場合は計算量がグリッド点に比例して増えていく。例えば、グリッド数が１０倍になれば、時間も１０倍かかる。しかし、予測球を使用した場合、予測球半径Ｒは速度の最大値と時間刻みだけから決まり、常に一定になるため、計算量も一定になる。このため、シミュレーションを行う系が大きくなるほど、予測球を使用する効果は大きくなる。
【０２７７】
さらに、予測球による時間分割のもう一つの効果について述べる。それは精度向上である。４次のルンゲ・クッタ法の場合、式（９）〜式（１０）で与えられるが、誤差のオーダはＯ（Δｔ4）で与えられることが知られている。そのため、時間をＮdiv分割すると、１回のルンゲ・クッタ演算での誤差はＮdiv-4倍になる。時間ｔi≦ｔ≦ｔi+1まで合計Ｎdiv回のルンゲ・クッタ法の計算をして、誤差がＮdiv倍だけ累積しても、合計の誤差はＮdiv-3に留まる。Ｎdiv＝４ならば、１／６４倍になる。
【０２７８】
図３４は、時間刻み幅を変えたときの軌跡の精度の変化を示す図である。図３４では、横軸がシミュレーション上の時間、縦軸が離散点のｘ座標である。図３４の例では、時間刻み幅Δｔを「０．０１」、「０．０５」、「０．００１」、「０．０００１」としたときの、特定の離散点のｘ座標の時間変化（軌跡）を表している。
【０２７９】
積分後の座標変化量が小さい場合、もしくは積分回数が少ない場合においては、時間刻み幅が大きい場合でも軌跡はほとんど変わらない。しかし、積分回数が大きくなった領域（時刻ｔ＞２．５［ｓｅｃ］）では時間刻み幅Δｔ＝０．０１［ｓｅｃ］の場合の軌跡は、Δｔ＝０．００１［ｓｅｃ］，０．０００１［ｓｅｃ］の軌跡と比べて大幅にずれてしまっている。反対にΔｔ＝０．００１［ｓｅｃ］の軌跡とΔｔ＝０．０００１［ｓｅｃ］の軌跡はよい一致を見せている。このことから、時間刻み幅を小さくすることで、計算誤差の累積を防ぐことができることがわかる。
【０２８０】
このように、分割数Ｎdivの決定は計算速度の面でも、計算精度の面でも重要である。そして、分割数Ｎdivは予測球半径の最小値Ｒminに依存して決まる。実際の計算では図３１のような速度場と要素の辺の長さの両方を考慮した確率モデルを仮定し、確率分布を計算する。そして、その確率分布から式（３３）を用いて計算効率を求め、最良の計算効率を与えるＲminを求める。これは図３２に示すように、最小値が存在し、その値はおおよそＲmin＝０．００１５±０．０００５［ｍ］程度として与えられる。そして、常に最小の計算コストで計算を実行することができる。
【０２８１】
次に計算の安定性について述べる。第２の実施の形態では、速度場は、ＡＬＥによるグリッド座標の運動による補正を取り入れ、式（４）で計算する。
図３５は、ＡＬＥグリッド点の運動補正を加えた速度場の例を示す図である。図３５には、速度場の評価を線形補間で行った場合の速度変化（点線）と、式（４）でＡＬＥグリッド座標自身の運動により生じた見かけの力の補正を入れた場合の速度変化（実線）との計算結果を示している。
【０２８２】
線形補間近似が非常に良い結果を与えるときもあるが、速度場が時間に関して急激に変化する領域（［０．０３≦ｔ≦０．１］）では速度場の評価に線形近似を用いると、速度場の評価精度が悪くなる。速度場の評価精度が悪い領域では、数値誤差が大きくなるため、流脈線の計算時に流脈線が心筋に入り込む原因になる。これを模式的に示したのが図３６である。
【０２８３】
図３６は、計算精度向上による流脈線の心筋へのめり込み抑止効果を示す図である。心臓の収縮期に心筋に近い場所に流脈線が存在した場合、その付近の流脈線上の点は心筋の移動方向へ運動する。
【０２８４】
速度場の計算精度が低いと、速度場が過小評価され、流脈線上の点の速度が、正しい値より小さくなる場合がある。心筋に近い場所の流脈線上の点の速度が過小に算出され、心筋の収縮速度より小さくなると、心筋が流脈線上の点を追い越してしまう。その結果、流脈線が心筋の中に入り込むような挙動になる。一旦、流脈線上の点が心筋にめり込んでしまうと、心筋上では流体の速度場が定義されないので、計算不能に陥る。
【０２８５】
このような事態を避けるため、第２の実施の形態では、速度場の計算時に、ＡＬＥグリッド座標の運動を式（４）に従い補正として取り入れている。これにより、速度場の計算精度が上がり、心筋に近い場所の流脈線上の点の速度が、心筋の収縮速度より小さな値となり、心筋が流脈線上の点を追い越してしまうような状況の発生が抑止される。その結果、流脈線が心筋の中に入り込むような事態が回避できる。
【０２８６】
このようにグリッド点自身の加速度運動に起因する見かけの力を補正することで、流脈線計算装置の計算の安定性が向上する。
〔その他の実施の形態〕
流脈線上の各点はお互いに相互作用せず、独立である。そのため、並列化に適している。そこでＭＰＩ（Message Passing Interface）やＯｐｅｎＭＰ（Multi-Processing）を用いて流脈線の計算を並列化させてもよい。これにより計算速度を向上させることができる。
【０２８７】
また第２の実施の形態では、心臓シミュレーションの結果を用いて、血流の流脈線を可視化する例を示したが、他の流体シミュレーションの結果に対しても適用できる。例えば自動車のリアに可変ウィング機構がついている場合に、可変ウィング稼働時の周囲の空気の流れをシミュレーションによって解析することも考えられる。第２の実施の形態に示す可視化装置１００を用いれば、可変ウィング稼働時の周囲の空気の流れを流脈線で可視化することができる。また、可変翼を有する航空機における翼の変形過程での周囲の空気の流れを示す流体シミュレーション結果についても、同様に適用できる。
【符号の説明】
【０２８８】
１  表示画面
２  構造体
３ａ，３ｂ  流体領域
４  粒子発生源
５ａ，５ｂ  流脈線
１０  流脈線可視化装置
１１  記憶部
１２  処理部
１３  表示部
【図１】
2018180707.tif 000037
【図２】
2018180707.tif 000038
【図３】
2018180707.tif 000039
【図４】
2018180707.tif 000040
【図５】
2018180707.tif 000041
【図６】
2018180707.tif 000042
【図７】
2018180707.tif 000043
【図８】
2018180707.tif 000044
【図９】
2018180707.tif 000045
【図１０】
2018180707.tif 000046
【図１１】
2018180707.tif 000047
【図１２】
2018180707.tif 000048
【図１３】
2018180707.tif 000049
【図１４】
2018180707.tif 000050
【図１５】
2018180707.tif 000051
【図１６】
2018180707.tif 000052
【図１７】
2018180707.tif 000053
【図１８】
2018180707.tif 000054
【図１９】
2018180707.tif 000055
【図２０】
2018180707.tif 000056
【図２１】
2018180707.tif 000057
【図２２】
2018180707.tif 000058
【図２３】
2018180707.tif 000059
【図２４】
2018180707.tif 000060
【図２５】
2018180707.tif 000061
【図２６】
2018180707.tif 000062
【図２７】
2018180707.tif 000063
【図２８】
2018180707.tif 000064
【図２９】
2018180707.tif 000065
【図３０】
2018180707.tif 000066
【図３１】
2018180707.tif 000067
【図３２】
2018180707.tif 000068
【図３３】
2018180707.tif 000069
【図３４】
2018180707.tif 000070
【図３５】
2018180707.tif 000071
【図３６】
2018180707.tif 000072