【実施例1】
【0019】
図1は、実施例1に係るシミュレーション装置のブロック図である。
図1に示すように、本実施例に係るシミュレーション装置は、ユーザインタフェース1、2次元伝播計算処理部2、3次元SPH計算処理部3及び結果記憶部4を有している。
【0020】
ユーザインタフェース1は、シミュレーション装置を使用する操作者からの数値の入力、操作者へのシミュレーション結果の出力を行なうインタフェース装置であり、具体的にはキーボード等の入力装置及び表示装置等の出力装置である。
【0021】
操作者は、ユーザインタフェース1を用いて、例えば、
図2に示すように領域100及び領域101を設定する。
図2は、2次元伝播計算及び3次元粒子法計算を行う領域を示す図である。領域101は、後述する2次元伝播計算を行う領域である。領域101が、「第1領域」の一例にあたる。領域100は、後述する3次元粒子法計算を行う領域である。領域100が、「第2領域」の一例にあたる。このように、2次元平面の各点における連続体の流量及び水位を算出する2次元伝播計算は、大きな領域に対して行い、3次元SPH計算は、沿岸部などの3次元的に入り組んだ構造を含む小さな領域に対して行う。ここで、領域100と領域101との境界はある程度水深がある場所であることが好ましい。これは、水深が浅くなると、海水の流れが海底や沿岸の影響を受け易くなるため2次元伝播計算の精度が落ちるからである。2次元伝播計算の計算結果を3次元粒子法計算に用いるためには、2次元伝播計算の精度が、3次元SPH計算で計算を行った場合の精度と同程度であることが好ましい。そこで、ある程度の深さがある地点を境界として設定することが好ましい。具体的には、例えば、30m〜50mの水深を有する地点を境界として設定することが好ましい。
【0022】
さらに、操作者は、初期データの入力を行う。本実施例では、
図2の領域101を平面視した2次元平面を所定の格子に分割する。2次元伝播計算では、この分割した格子における海水の動きを解析する。そして、初期データとは、領域101を表す座標をxy座標として、分割した各格子における、水位η、x方向の流量M(以下では、単に「流量M」という場合がある。)及びy方向の流量N(以下では、単に「流量N」という場合がある。)の初期値である。ここで、水位ηとは、静水面からの水位上昇量である。また、流量とは、速度と全水深との積であり、x方向の流量Mは、M=v
x×D(v
xはx方向の速度、Dは全水深であり、D=水位η+静水深hである。)として表される。また、y方向の流量Nは、N=v
y×D(v
yはy方向の速度である。)として表される。全水深と流量から速度を得ることができ、また、逆に全水深と速度から流量を得ることもできるので、流量と速度のどちらも本質的には同等の情報を含んでいるとみなせる。二次元伝播計算では流量の方が扱いやすいため、流量を用いるが、三次元粒子法計算では速度の方が扱いやすいため、流量の情報を必要に応じて速度に変換することになる。速度v
xと速度v
yとを合成した速度が各格子における流速になる。
【0023】
そして、2次元伝播計算処理部2は、入力された水位η、流量M及び流量Nの初期値を用いて、次のステップの各格子における水位η、流量M及び流量Nを算出する。さらに、2次元伝播計算処理部2は、順々に各ステップの各格子における水位η、流量M及び流量Nを算出していく。2次元伝播計算処理部2は、予め設定された最終の状態になる最終ステップまでの各ステップの各格子における水位η、流量M及び流量Nの算出を繰り返す。この予め設定された最終状態になったときのステップが、「第1の所定ステップ」にあたる。本実施例では、津波が陸上の最深部まで達し引き始めた時点を最終状態とする。
【0024】
そして、2次元伝播計算処理部2は、算出したステップ毎の各格子における水位η、流量M及び流量Nのデータを3次元SPH計算処理部3へ出力する。
【0025】
3次元SPH計算処理部3は、ステップ毎の各格子における水位η、流量M及び流量Nのデータの入力を2次元伝播計算処理部2から受ける。
【0026】
そして、3次元SPH計算処理部3は、受信したステップ毎の各格子における水位η、流量M及び流量Nのデータのうち、3次元粒子法計算を開始する条件を満たすデータを有する最も時刻の早いステップを特定する。3次元SPH計算処理部3は、例えば、
図2の領域100の境界における水位ηが50cmを超えた時点を、3次元粒子法計算を開始する条件として記憶している。
【0027】
そして、3次元SPH計算処理部3は、特定した3次元粒子法計算を開始するステップにおける各格子における水位ηを用いて領域100のその時点での水深に合わせて粒子を配置する。ここで、水深とは水位ηで表される頂点から海底までの距離である。また、粒子は、どのような大きさにすることもできるが、直径が10cm〜1mであることが好ましい。直径が小さいほど精度の良い解析ができるが計算量が増え、直径が大きいほど計算量が減るが解析の精度が落ちる。そのため、粒子の大きさは、使用できる計算資源と供給される精度に応じて決定することが好ましい。粒子は、流体をモデル化したものであり、粒子を表現するために要求されるデータは、例えば、中心座標、速度、影響半径、密度、質量、粘性度などである。このうち、3次元SPH計算処理部3は、影響半径、質量、粘性度などを予め記憶している。
【0028】
さらに、3次元SPH計算処理部3は、3次元粒子法計算を開始するステップの各格子における流量M及び流量Nから各粒子の速度の初期値である速度v
0を求める。ここで、「v」は粒子の速度を表すベクトルである。また、3次元SPH計算処理部3は、各格子から各粒子の位置座標の初期値である位置r
0を求める。ここで、「r」は粒子の位置を表す位置ベクトルである。さらに、3次元SPH計算処理部3は、圧力及び密度の初期値である圧力P
0及び密度ρ
0として海水の一般的な圧力及び密度をそれぞれ用いる。
【0029】
そして、3次元SPH計算処理部3は、速度v
0、位置r
0、圧力P
0及び密度ρ
0を用いて、次のステップの各粒子の速度v、位置r、圧力P及び密度ρを求める。このとき、3次元SPH計算処理部3は、
図2の領域100における境界から一定の距離Δxの範囲を境界領域として記憶している。そして、3次元SPH計算処理部3は、各ステップにおける速度v、位置r、圧力P及び密度ρを算出する場合に、境界領域における粒子の速度vなどの境界条件を、受信したステップ毎の各格子における流量M及び流量Nから求める。ここで、3次元粒子法計算を行うステップは、2次元伝播計算を行うステップよりも細かい。そこで、3次元SPH計算処理部3は、境界条件として用いる流量M及び流量Nを補間しながら境界条件を求めていく。
【0030】
このように、3次元SPH計算処理部3は、予め設定された最終の状態になるまでの各ステップの各粒子における速度v、位置r、圧力P及び密度ρの算出を繰り返す。この予め設定された最終状態になったときのステップが、「第2の所定ステップ」にあたる。本実施例では、領域100において津波が陸上の最深部まで達し引き始めた時点を最終状態とする。
【0031】
そして、3次元SPH計算処理部3は、算出したステップ毎の各粒子における速度v、位置r、圧力P及び密度ρのデータを結果記憶部4へ出力する。
【0032】
結果記憶部4は、3次元SPH計算処理部3から受信した解析結果であるステップ毎の各粒子における速度v、位置r、圧力P及び密度ρをメモリやハードディスク等に格納する。
【0033】
次に、
図3を参照して本実施例に係る解析処理の流れについて説明する。
図3は、実施例1に係るシミュレーション装置による解析処理のフローチャートである。
【0034】
2次元伝播計算処理部2は、ユーザインタフェース1を用いて入力された入力データである各格子における、水位η、x方向の流量M及びy方向の流量Nの初期値を取得する(ステップS1)。
【0035】
2次元伝播計算処理部2は、水位η、x方向の流量M及びy方向の流量Nの初期値を用いて、各ステップにおける2次元伝播計算を最終ステップまで実行する(ステップS2)。
【0036】
3次元SPH計算処理部3は、ステップ毎の各格子における、水位η、x方向の流量M及びy方向の流量Nの入力を2次元伝播計算処理部2から受ける。次に、3次元SPH計算処理部3は、3次元粒子法計算を開始するステップを特定する。そして、3次元SPH計算処理部3は、特定したステップにおける2次元伝播計算の水位η、x方向の流量M及びy方向の流量Nのデータから3次元粒子法計算の初期条件を生成する(ステップS3)。
【0037】
3次元SPH計算処理部3は、現ステップの速度v、位置r、圧力P及び密度ρを用いて、1ステップ後の3次元粒子法計算を実行し、次のステップの速度v、位置r、圧力P及び密度ρを算出する(ステップS4)。
【0038】
3次元SPH計算処理部3は、3次元粒子法計算の終了条件を満たすか否かを判定する(ステップS5)。終了条件を満たしていない場合(ステップS5:否定)、3次元SPH計算処理部3は、2次元伝播計算処理部2から受信した各格子における、2次元伝播計算の水位η、x方向の流量M及びy方向の流量Nから次のステップの境界条件を生成する(ステップS6)。その後、3次元SPH計算処理部3は、ステップS4に戻る。
【0039】
これに対して、終了条件を満たしている場合(ステップS5:肯定)、3次元SPH計算処理部3は、解析結果を結果記憶部4に格納し、解析処理を終了する。
【0040】
以上に説明したように、本実施例に係るシミュレーション装置は、連続体の広い移動に対するシミュレーションにおいて、広い範囲では2次元伝播計算を行い、港湾部や都市部といった3次元の形状の影響が大きい領域では3次元粒子法計算を行う。これにより、津波のように大量の流体の移動が伴う事象においても、破綻無く計算を行うことができ、計算量を抑えながら、精度の良いシミュレーションを行うことができる。
【実施例2】
【0041】
次に、実施例2について説明する。本実施例に係るシミュレーション装置は、全体的な処理は実施例1と同様であるが、処理方法を具体的にしたものである。そこで、以下では、2次元伝播計算及び3次元粒子法計算の処理について主に説明する。また、以下で特に説明の無い限りは、
図1と同じ符号を有する各部は同じ機能を有しているものとする。
【0042】
図4は、実施例2に係る2次元伝播計算処理部のブロック図である。
図4に示すように、2次元伝播計算処理部2は、制御部21、水位算出部22及び流量算出部23を有している。
【0043】
制御部21は、領域101を平面視した2次元平面を分割した格子を予め記憶している。さらに、制御部21は、領域101の点を表す座標をxy座標としたときの、分割した各格子における、水位η、x方向の流量M及びy方向の速度Yの初期値である水位η
0、流量M
0及び流量N
0の入力をユーザインタフェース1から受ける。
【0044】
制御部21は、各格子における水位η
0、流量M
0及び流量N
0を水位算出部22及び流量算出部23に出力する。その後、制御部21は、ステップ1での各格子における水位ηの入力を水位算出部22から受ける。また、制御部21は、ステップ1での各格子における流量M及び流量Nの入力を流量算出部23から受ける。以下では、初期値である水位η
0、流量M
0及び流量N
0で表される初期状態をステップ0とし、その後の各ステップをステップ1,2,3,・・・とする。そして、各ステップをまとめて、ステップk(k=0,1,2,・・・)と表す。
【0045】
その後、制御部21は、受信したステップk(kは自然数)での水位η、流量M及び流量Nを水位算出部22及び流量算出部23に出力し、ステップk+1での水位η、流量M及び流量Nの入力を水位算出部22及び流量算出部23から受けることを繰り返す。
【0046】
また、制御部21は、最終状態の条件の入力をユーザインタフェース1から受ける。本実施例では、制御部21が、最終状態の条件として、津波が陸上の最深部まで達し引き始めた時点という条件の入力を受ける。そして、制御部21は、ステップkまでの計算結果を受信して、ステップ1〜kまでの各格子における水位η、流量M及び流量Nを用いて、最終状態の条件を満たしているか否かを判定する。最終状態の条件を満たしている場合、制御部21は、現ステップであるステップkを最終ステップとする。その場合、制御部21は、受信したステップkでの各格子における水位η、流量M及び流量Nの水位算出部22及び流量算出部23への出力を停止する。
【0047】
その後、制御部21は、ステップ1〜kの各ステップでの各格子における水位η、流量M及び流量Nを3次元SPH計算処理部3へ出力する。また、制御部21は、各格子の位置の情報を3次元SPH計算処理部3へ出力する。
【0048】
水位算出部22は、次に示す式(1)で表される連続方程式を記憶している。
【0049】
【数1】
【0050】
水位算出部22は、ステップk+1では、ステップkの各格子における水位η、流量M及び流量Nの入力を制御部21から受ける。ここで、x方向の流量Mは、M=v
x×D(v
xはx方向の速度の関数、Dは全水深であり、水位η+静水深hである。)として表される。また、y方向の流量Nは、M=v
y×D(v
yはy方向の速度の関数である。)として表される。
【0051】
そこで、水位算出部22は、ステップk+1の計算において、ステップkにおける流量M及び流量Nを式(1)に代入して、ステップkにおける水位の時間微分である∂η/∂tを求める。
【0052】
さらに、水位算出部22は、次に示す式(2)で表される時間積分の式を記憶している。ここで、Δtは、各ステップ間の時間を表している。
【0053】
【数2】
【0054】
水位算出部22は、ステップk+1の計算においては、ステップkにおける水位の時間微分である∂η/∂tを式(2)に代入し、ステップkの各格子における水位ηをステップnにおける水位の時間微分である∂η/∂tに基づいて時間積分する。これにより、水位算出部22は、ステップk+1における水位ηを算出する。
【0055】
そして、水位算出部22は、算出したステップkにおける水位ηを制御部21へ出力する。
【0056】
流量算出部23は、次に示す式(3)及び(4)で表される運動方程式を記憶している。なお、gは重力加速度、Dは全水深(D=h+η、ただし、hは静水深)、nは海底摩擦を表す粗度係数である。
【0057】
【数3】
【0058】
【数4】
【0059】
流量算出部23は、ステップk+1では、ステップkの各格子における水位η、流量M及び流量Nの入力を制御部21から受ける。
【0060】
流量算出部23は、ステップk+1の計算においては、ステップkにおける水位η、流量M及び流量Nを式(3)に代入して、ステップkにおけるx方向の速度の時間微分である∂M/∂tを求める。
【0061】
また、流量算出部23は、ステップk+1の計算においては、ステップkにおける水位η、流量M及び流量Nを式(4)に代入して、ステップkにおけるy方向の速度の時間微分である∂N/∂tを求める。
【0062】
さらに、水位算出部22は、次に示す式(5)及び(6)で表される時間積分の式を記憶している。ここで、Δtは、各ステップ間の時間を表している。
【0063】
【数5】
【0064】
【数6】
【0065】
流量算出部23は、ステップk+1の計算においては、ステップkにおけるx方向の速度の時間微分である∂M/∂tを式(5)に代入し、ステップkの各格子における流量Mをステップkにおけるx方向の速度の時間微分である∂M/∂tに基づいて時間積分する。これにより、流量算出部23は、ステップk+1における流量Mを算出する。
【0066】
また、流量算出部23は、ステップk+1の計算においては、ステップkにおけるy方向の速度の時間微分である∂N/∂tを式(6)に代入し、ステップkの各格子における流量Nをステップkにおけるy方向の速度の時間微分である∂N/∂tに基づいて時間積分する。これにより、流量算出部23は、ステップk+1における流量Nを算出する。
【0067】
そして、流量算出部23は、算出したステップk+1における流量M及び流量Nを制御部21へ出力する。
【0068】
次に、
図5を参照して本実施例に係る3次元SPH計算処理部について説明する。
図5は、実施例2に係る3次元SPH計算処理部のブロック図である。
図5に示すように、3次元SPH計算処理部3は、制御部31、速度算出部32、密度算出部33、圧力算出部34、位置算出部35及び粒子生成部36を有している。ここで、3次元粒子計算におけるステップは、2次元伝播計算におけるステップよりも細かい。そこで、以下では、3次元粒子計算におけるステップを2次元伝播計算におけるステップと区別するためステップ#nと記載する。
【0069】
制御部31は、例えば、
図2の領域100の境界における水位ηが50cmを超えた時点を、3次元粒子法計算を開始する条件として記憶している。また、制御部31は、粒子と粒子の運動の境界条件を設定するための固定境界要素を予め記憶している。固定境界要素は、海底面、地面及び建造物の表面などを微小部分に分割した面要素をモデル化したものである。固定境界要素は、例えば、微小な円盤の集合として境界全体をモデル化して、各境界要素に中心座標、面要素の法線ベクトル、面要素の面積などを含んでも良い。また、固定境界要素として、ポリゴンの集合として境界全体を表現して、各境界要素に複数の頂点の位置座標を持たせても良い。
【0070】
制御部31は、2次元伝播計算の計算結果であるステップ毎の各格子における水位η、流量M及び流量Nの入力を2次元伝播計算処理部2から受ける。また、制御部31は、各格子の位置の情報の入力を2次元伝播計算処理部2から受ける。
【0071】
そして、制御部31は、各格子の位置の情報及びステップ毎の各格子における水位ηの中から、境界における水位ηが50cmを超えた時点のステップをステップ#0として特定する。
【0072】
そして、制御部31は、ステップ#0での各格子における水位η、流量M及び流量Nを抽出する。
【0073】
ここで、3次元粒子法計算は連続体の動作をより詳細に解析するために、2次元伝播計算で用いられた格子よりも細かい精度で計算を行う。そこで、制御部31は、3次元粒子法計算で用いる点を決めるための格子をより細かく分割する数量を予め記憶している。そして、制御部31は、ステップ#0での各格子における水位ηの内挿を行い、3次元粒子法計算で用いる位置座標における水位ηを求める。次に、制御部31は、3次元粒子法計算で用いる各位置座標における水位ηに静水深hを加算して、各位置座標における全水深Dを求める。また、制御部31は、3次元粒子法計算で用いる位置座標におけるステップ#0での流量M及び流量Nを内挿により求める。そして、制御部31は、各位置座標でのステップ#0での流量M及び流量Nを全水深で除算し、各位置座標での速度の初期値v
0を求める。
【0074】
そして、制御部31は、各位置座標における全水深Dを用いて、各位置座標に予め決められたサイズの粒子を配置する。例えば、粒子の直径が1mと決められており、ある位置座標における全水深が50mの場合、制御部31は、その位置座標に50個の粒子を積み重ねて配置する。これにより、各位置座標における粒子の位置の初期値が決定する。
【0075】
さらに、制御部31は、各位置座標に配置した各粒子の速度の初期値として、算出したその位置座標における速度v
0を割り当てる。
図6は、初期値の設定を模式的に表した図である。
図6は、
図2に示す領域100の断面の一部を模式的に現している。
図6の縦軸は水深を表し、横軸は静水面と平行な特定の方向を表している。
図6に示すように、制御部31は、各位置座標において粒子200を水深方向に積み上げて配置する。そして、制御部31は、矢印201で示されるように、矢印201の大きさに応じた速度を各粒子に割り当てる。
図6では、例えば、横軸が増える方向を沖に向かう方向とすると、横軸が減る方向に向かう矢印201は、粒子が陸に向かっていることを表している。そして、矢印201が大きいほど粒子の速度が速いことを表している。
【0076】
各粒子の位置及び速度の初期値の設定が終わると、制御部31は、各粒子の影響範囲内にある他の粒子のリストを作成する。以下では、各粒子の影響範囲内にある他の粒子を「近傍粒子」と呼ぶ。また、近傍粒子のリストを「近傍粒子リスト」と呼ぶ。
【0077】
図7は、影響範囲及び近傍粒子について説明するための図である。ここで、
図7を参照して、各粒子の影響範囲及び近傍粒子について説明する。ここでは、着目粒子と他の粒子との距離が2h
SPH以内の場合に、相互に影響を与え合うものとして説明する。ここで、影響とは、例えば、粒子が移動する場合に、他の粒子へ力を加えるなどのことを言う。
【0078】
ここでは、
図7の粒子301を例に説明する。粒子301の影響範囲302は、粒子301を中心として半径2h
SPHの円の中に含まれる範囲である。この半径2h
SPHは、粒子301の影響半径である。そして、影響範囲302の中に含まれる他の粒子が、粒子301の近傍粒子である。
図7では、例えば、粒子303のように、斜線で表されている粒子が近傍粒子である。すなわち、粒子301が影響を与えることになる他の粒子は、斜線で表される近傍粒子ということになる。逆に、斜線で表される近傍粒子からのみ、粒子301は影響を受けることになる。ここで、近傍粒子が数十個程度含まれるように半径2h
SPHを設定すれば、着目した粒子と他の粒子間の相互作用を解析するには十分であることが経験的に知られている。
【0079】
また、粒子301の位置を表す位置ベクトルをr
aとし、粒子303の位置を表す位置ベクトルをr
bとすると、粒子301と粒子303との間の距離は|r
a−r
b|となる。すなわち、|r
a−r
b|≦2hを満たす場合に、粒子303は粒子301の近傍粒子とされる。
【0080】
制御部31は、例えば
図7の粒子301に対する近傍リストを作る場合、まず、影響範囲302に含まれる粒子303のような斜線で表される各粒子を粒子301の近傍粒子として抽出する。例えば、制御部31は、着目粒子である粒子301の位置と他の粒子の位置から粒子301と各他の粒子との距離を求め、その距離が2h
SPH以下となる粒子を近傍粒子として抽出する。
【0081】
図5に戻って、制御部31は、近傍粒子の抽出を全ての粒子に対して行う。そして、制御部31は、各着目粒子と抽出した各着目粒子の近傍粒子とが対応する近傍粒子リストを作成する。そして、制御部31は、作成した近傍粒子リストを速度算出部32、密度算出部33、圧力算出部34、位置算出部35及び粒子生成部36へ出力する。
【0082】
その後、制御部31は、ステップ#nにおける各着目粒子の速度vの入力を速度算出部32から受ける。また、制御部31は、ステップ#nにおける各着目粒子の密度ρの入力を密度算出部33から受ける。また、制御部31は、ステップ#nにおける各着目粒子の圧力Pの入力を圧力算出部34から受ける。さらに、制御部2は、ステップ#nにおける各着目粒子の位置rの入力を位置算出部35から受ける。ここで、1ステップとは、Δt
SPH時間経過した後の状態である。例えば、ステップ#n+1における速度とは、ステップ#nにおける速度からΔt
SPH時間後の速度である。
【0083】
また、制御部31は、
図2の領域100における境界から一定の距離Δxの範囲を境界領域として記憶している。ここで、Δxは粒子の大きさから設定されることが好ましい。具体的には、粒子の大きさ程度の幅を持たせることが好ましい。例えば、粒子の直径が1mの場合、1mより少し大きい幅をΔxとすることが好ましい。そして、制御部31は、受信したステップ#nにおける着目粒子の位置rから、
図2の領域100における境界の外に着目粒子が出たか否かを判定する。そして、制御部31は、着目粒子が境界の外に出たと判定した場合、ステップ#n+1以降の計算においてその着目粒子を除外する。
図8は、粒子の流出を模式的に表した図である。
図8に示すように、粒子202が境界の外に出て粒子203となった場合、制御部31は、粒子203を計算から除外する。
【0084】
さらに、制御部31は、ステップ#nにおいて生成された粒子の位置rの入力を粒子生成部36から受ける。そして、制御部31は、ステップ#n+1以降の計算において受信した新たに生成された粒子を組み入れる。
【0085】
また、制御部31は、ステップ#nにおける境界領域内に存在する粒子の速度vを、2次元伝播計算処理部2から受信した流量M及び流量Nから求め、速度算出部32及び位置算出部35から受信したステップ#nにおける速度vと置き換える。また、制御部31は、ステップ#nにおける境界領域内に存在する粒子の密度ρ及び圧力Pは、海水の一般的な密度及び圧力に置き換える。このようにして、制御部31は、ステップ#nにおける境界条件を都度求め、境界領域内に存在する粒子に割り当てる。これは、本実施例での3次元粒子法計算においては境界外には粒子が存在しないため、境界領域に存在する粒子の動きは正確に求めることができない。そこで、2次元伝播計算によって求められた正確性の高い情報を基に境界領域に存在する粒子の動きを推定することで、計算の正確性を向上させるためである。
【0086】
ただし、上述したように2次元伝播計算と3次元粒子法計算ではステップの精度が異なる。すなわち、3次元粒子法計算の各ステップ#nに一致する、2次元伝播計算のステップkがあるとは限らない。そこで、制御部31は、3次元粒子法計算の各ステップ#nに一致するタイミングの水位η、流量M及び流量Nを算出する。ここで、
図9は、境界条件算出における補間を説明するための図である。
図9では、例えば、2次元伝播計算のステップkにおいて3次元粒子法計算が開始され、2次元伝播計算の次のステップであるステップk+1と3次元粒子法計算のステップ#nのタイミングが一致する場合を表している。この場合、2次元伝播計算のステップ間の時間はΔtであり、3次元粒子法計算のステップ間の時間はΔt
SPHである。この場合、ステップ#1では、対応401のように、制御部31は、ステップkにおける水位η、流量M及び流量Nを用いて、境界条件を算出することができる。また、ステップ#nでは、制御部31は、対応402のように、ステップk+1における水位η、流量M及び流量Nを用いて、境界条件を算出することができる。しかし、ステップ#2〜ステップ#n−1に対応する、2次元伝播計算のステップは存在しない。そこで、例えばステップ#2であれば、制御部31は、ステップk及びk+1における水位η、流量M及び水位Nを用いて、内挿を行いステップ#2に対応する内挿ステップ403における水位η、流量M及び水位Nを求める。そして、制御部31は、対応404のように、求めた内挿ステップ403における水位η、流量M及び流量Nを用いて、ステップ#2の境界条件を算出する。
【0087】
例えば、内挿ステップにおける水位は、次の式(7)のように求めることができる。ここでは、粒子法計算において境界条件を得たいステップの時刻をt
SPHとしている。そして、t
SPHに最も近い2次元伝播計算のステップであるステップn及びステップn+1の時刻をnΔt及び(n+1)Δtとしている。
【0088】
【数7】
【0089】
そして、制御部31は、ステップ#nにおける各着目粒子の密度ρ、圧力P及び位置rを、ステップ#n+1の計算に用いる各着目粒子の現ステップの密度、圧力及び位置として、速度算出部32へ出力する。
【0090】
また、制御部31は、ステップ#nにおける各着目粒子の密度ρをステップ#n+1の計算に用いる現ステップの密度として密度算出部33へ出力する。
【0091】
また、密度算出部33は、ステップ#n+1における各着目粒子の密度ρをステップ#n+1の圧力計算に用いるために圧力算出部34へ出力する。
【0092】
また、制御部31は、ステップ#nにおける各着目粒子の速度vを、ステップ#n+1の計算に用いる現ステップの速度として位置算出部35へ出力する。
【0093】
以上の動作をまとめると、制御部31は、ステップ#nからΔt
SPH時間経過した後のステップ#n+1における、各着目粒子の速度v、密度ρ、圧力P及び位置rの入力を受ける。次に、制御部31は、粒子の位置から消滅させる粒子を決定し、さらに粒子生成部36からの情報を用いて粒子を生成する。そして、制御部31は、粒子の消滅及び生成を行った後、2次元伝播計算により算出された水位η、流量M及び流量Nから境界領域にある粒子の速度v、密度ρ、圧力P及び位置rを求めて境界条件を設定する。その後、制御部31は、それらの情報を各部に出力し、ステップ#nからΔt
SPH時間経過した後のステップ#n+1における、各着目粒子の速度v、密度ρ、圧力P及び位置rの入力を受ける。このように、制御部31は、既にステップ#nにおける速度v、密度ρ、圧力P及び位置rを受信している場合には、次にステップ#n+1における各着目粒子の速度v、密度ρ、圧力P及び位置rを受信する。そして、制御部31は、指定されたシミュレーションの終了のタイミングまで、各ステップにおける各着目粒子の速度v、密度ρ、圧力P及び位置rを順次受信する。
【0094】
さらに、制御部31は、ステップ#nにおける各着目粒子の最新の速度v、密度ρ、圧力P及び
位置rの各情報の入力を受けると、受信したステップ#nにおける各情報を結果記憶部4へ記憶させる。
【0095】
そして、制御部31は、受信したステップ#nにおける各着目粒子の位置を用いてステップ#nにおける各着目粒子の近傍粒子を求め、近傍粒子リストを作成する。そして、制御部31は、作成した近傍粒子リストを速度算出部32、密度算出部33、圧力算出部34、位置算出部35及び粒子生成部36へ出力する。このように、制御部31は、ステップ毎の速度v、密度ρ、圧力P及び位置r、並びに近傍粒子リストを各部へ出力する。そして、制御部31は、現在のデータを用いて1ステップ後のデータを算出するよう、速度算出部32、密度算出部33、圧力算出部34、位置算出部35及び粒子生成部36に対して指示し、最終ステップまで繰り返させる。
【0096】
速度算出部32は、ステップ#n+1の計算に用いる各着目粒子の現ステップの密度、圧力及び位置として、ステップ#nにおける各着目粒子の密度ρ、圧力P及び位置rの入力を制御部31から受ける。
【0097】
速度算出部32は、次の式(8)で表される運動方程式を記憶している。
【0098】
【数8】
【0099】
ここで、式(8)における、変数及び係数の添え字は各粒子を表す。例えば、r
a,v
a,ρ
a,P
a,m
aがあった場合、それらは、粒子aの位置ベクトル、速度ベクトル、密度、圧力、質量を表している。Wは、粒子の分布から連続場を構成するために用いるカーネル関数である。カーネル関数としては、例えば、次の式(9)に示すような5次のスプライン関数などが用いられる。ただし、ここでq=r/h
SPHである。
【0100】
【数9】
【0101】
また、式(8)におけるΠ
abは粒子a,b間に働く人工粘性項である。例えば、次の式(10)に示されるような形式が採用される。
【0102】
【数10】
【0103】
ここで、式(10)におけるμは粘性係数であり、次の式(11)で表される。ただし、ここでη
SPHは分母が0になることを避けるためのパラメータであり、考えている空間スケールに対して十分小さい値を設定する。例えば、η
SPH=0.01h
SPH等でよい。
【0104】
【数11】
【0105】
そして、速度算出部32は、式(8)に受信したステップ#nにおける着目粒子a及び近傍粒子bの密度ρ、圧力P及び位置rを代入し、ステップ#nにおける加速度dv/dtを求める。
【0106】
さらに、速度算出部32は、境界からの反発力を次の式(12)を用いて求める。
【0107】
【数12】
【0108】
ここで、
図10を参照して、式(12)について説明する。
図10は、境界からの反発力を説明するための図である。ここでは、
図10における粒子500に加えられる境界からの反発力について説明する。
【0109】
図10に示すように、dは境界面501からの所定の距離である。そして、境界層502、境界面からdの幅の層を示している。また、sは粒子500の境界層502への侵入距離である。
【0110】
本実施例では、境界面501から幅dの境界層502を考え、境界層502内に粒子500が突入した場合に、粒子500に対して境界面501から粒子500の向きに反発加速度が加わるものとする。反発力f
nは、弾性ばねによるものと同じ形式でf
n=ksとして与える。ばね剛性係数kは、音速c
0の粒子が有する運動エネルギーmc
02/2と、粒子が境界層502へdの長さだけ進入したときの弾性歪エネルギーkd
2/2とが同程度となるように定める。すなわち、連続体の運動の解析を行なうシミュレーションにおいては、粒子500は音速を超えることはないと考えられるので、音速で粒子500が進入した場合に境界面501においてエネルギーがなくなるように設定しておけば、粒子500は境界面を突き抜けることはなくなる。このため、βを1程度のパラメータとする。このようにβを設定することで、式(12)が導かれる。
【0111】
式(12)で表される反発力を用いることで、境界壁からの粒子のすり抜けを防止し、導入する摩擦やfree slip条件の正確性を向上でき、さらに、境界で物理的に無意味なエネルギー消費の発生を抑えることができる。また、式(12)は簡単な式で表されているので、式(12)で表される反発力を用いた場合には、計算負荷を抑えることができる。
【0112】
ここで、本実施例では式(12)を用いたが、この反発力は他の式を用いてもよい。例えば、反発力が過大になる可能性を考慮して、粒子が境界面に近づいている場合には、弾性ばねを考慮し、逆に粒子が境界面から遠ざかる場合には、弾性ばねを考慮しないように反発力を設定してもよい。このような反発力は一方向弾性ばね法と呼ばれることがある。エネルギー保存の観点からは粒子と境界面の相対速度に関係なく弾性ばねを考慮する式(12)のような反発力が好ましいが、境界での不自然な反発を避けるために一方向弾性ばね法をもちいてもよい。
【0113】
そして、速度算出部32は、運動方程式である式(8)を用いて算出した加速度dv/dtと式(12)を用いて求めた反発力とを加えてステップ#nにおける加速度v´を算出する。ここでは、加速度v´は、加速度ベクトルを表す。
【0114】
さらに、速度算出部32は、次の時間積分の式(13)を記憶している。ここで、v
nはステップ#nにおける速度を表し、v
n´はステップ#nにおける加速度を表している。
【0115】
【数13】
【0116】
そして、速度算出部32は、求めたステップ#nの速度v及び加速度v´を式(13)に代入して、ステップ#nの速度vをステップ#nにおける加速度v´で時間積分する。これにより、速度算出部32は、ステップ#n+1の速度vを求める。
【0117】
速度算出部32は、算出したステップ#n+1の各粒子の速度vを制御部31へ出力する。また、速度算出部32は、算出したステップ#n+1の各粒子の速度vを密度算出部33へ出力する。さらに、速度算出部32は、算出したステップ#n+1の各粒子の速度vを位置算出部35へ出力する。
【0118】
密度算出部33は、ステップ#n+1の計算に用いる現ステップの密度として、ステップ#nにおける各着目粒子の密度ρの入力を制御部31から受ける。さらに、密度算出部33は、ステップ#n+1の各粒子の速度vの入力を速度算出部32から受ける。
【0119】
密度算出部33は、次の式(14)で表される連続方程式を記憶している。
【0120】
【数14】
【0121】
密度算出部33は、速度算出部32から入力されたステップ#n+1における各粒子の速度vを式(14)に代入し、ステップ#n+1における各粒子の密度時間微分dρ/dtを算出する。
【0122】
さらに、密度算出部33は、次の式(15)で表される時間積分の式を記憶している。
【0123】
【数15】
【0124】
密度算出部33は、算出したステップ#nにおける各粒子の密度及び各粒子の密度時間微分dρ
a/dtの値を式(15)に代入して、ステップ#nの密度ρをステップ#nにおける密度時間微分dρ/dtで時間積分する。これにより、密度算出部33は、ステップ#n+1の密度ρを求める。
【0125】
密度算出部33は、算出したステップ#n+1の密度ρを、制御部31及び圧力算出部34へ出力する。
【0126】
圧力算出部34は、ステップ#n+1の密度ρの入力を密度算出部33から受ける。
【0127】
圧力算出部34は、次の式(16)で表される状態方程式を記憶している。ここで、c
s及びρ
0は、それぞれ流体の音速と基準密度である。
【0128】
【数16】
【0129】
圧力算出部34は、密度算出部33から入力されたステップ#n+1の密度ρを式(16)に代入して、ステップ#n+1における圧力Pを算出する。
【0130】
圧力算出部34は、算出したステップ#n+1における圧力Pを制御部31へ出力する。
【0131】
位置算出部35は、ステップ#n+1における速度vの入力を速度算出部32から受ける。
【0132】
位置算出部35は、次の式(17)で表される時間積分の式を記憶している。
【0133】
【数17】
【0134】
位置算出部35は、速度算出部32から入力されたステップ#n+1における速度vを式(16)に代入して、ステップ#nの位置rをステップ#n+1における速度vで時間積分する。これにより、位置算出部35は、ステップ#n+1の位置rを求める。
【0135】
粒子生成部36は、境界面を1つの粒子に相当する所定の領域で分割した分割領域を記憶している。ここで、所定の領域は、密に配置されていればどのような形状でも良く、例えば、矩形でも円形でもよい。以下では、この所定の領域を「粒子生成子」と呼ぶ。粒子生成子は、境界において流入があった時に粒子を生成することで、粒子法計算を破たんなく実行させるために設定されるものである。粒子生成子は、領域100の境界面を微小部分に分割した面要素として、例えば、中心座標、面要素の法線ベクトル、面要素の面積、流入出体積、基準体積を持つ。ここで、基準体積とは、粒子一つに対応する体積である。そして、以下で説明する粒子生成子における流出入体積は、計算開始の時点では0に設定され、流入があれば増加し、流出があれば減少する。粒子生成子を通じて海水が流出している場合には流出入体積は負の値を取る。
【0136】
粒子生成部36は、ステップ#nにおける各粒子生成子の位置における2次元伝播計算により求められた速度の入力を制御部31から受ける。
【0137】
そして、粒子生成部36は、受信した速度から各粒子生成子の位置における海水の流速を表す流速ベクトルを求める。さらに、粒子生成部36は、粒子生成子が形成する所定の領域の法線方向を向いた大きさが面積に比例する面積ベクトルを生成する。粒子生成子の面積をSとし、法線ベクトルをuとした場合、面積ベクトルは、例えば、uSとして表すことができる。
【0138】
そして、粒子生成部36は、各粒子生成子における流速ベクトルと面積ベクトルとの内積を求め、ステップ#nにおける各粒子生成子における海水の流出入体積の増減分を算出する。
【0139】
そして、粒子生成部36は、各粒子生成子におけるステップ#nの海水の流出入体積に流出入体積の増減分を加算して、各粒子生成子における新しいステップ#nの海水の流出入体積を求める。例えば、古い流出入体積をV
oldとして、新しい流出入体積をV
newとした場合、粒子生成部36は、次の式(18)により新しい海水の流出入体積が算出できる。
【0140】
【数18】
【0141】
次に、粒子生成部36は、各粒子生成子におけるステップ#n+1の海水の流出入体積が1つの粒子の体積と等しい基準体積以上か否かを判定する。海水の流出入体積が基準体積以上となっている粒子生成子があれば、粒子生成部36は、その粒子生成子に対応する決められた位置への粒子の生成を決定する。ここで、粒子生成子に対応する決められた位置とは、例えば、粒子生成子に接するように粒子を配置する位置でも良いし、粒子生成子から法線方向に所定の距離離れた位置に粒子が配置される位置でも良い。そして、粒子生成部36は、粒子の生成を決定した粒子生成子におけるステップ#n+1の海水の流出入体積から基準体積を減算して、ステップ#n+1の海水の流出入体積とする。
【0142】
図11は、粒子の流入を模式的に表した図である。境界の外部にある粒子204の体積を有する海水が境界を越えて内部に流入した場合に、粒子生成部36は、流入した粒子204に対応する境界の内部の位置に新しく粒子205を生成することを決定する。
【0143】
また、ステップ#n+1の海水の流出入体積がマイナス方向の基準体積を下回った粒子生成子がある場合、粒子生成部36は、その粒子生成子におけるステップ#n+1の海水の流出入体積に基準体積を加算して、ステップ#n+1の海水の流出入体積とする。
【0144】
そして、粒子生成部36は、生成を決定した粒子の位置を制御部31に通知する。生成した粒子の位置とは、例えば、生成した粒子の中心の位置などでよい。
【0145】
粒子生成部36は、ステップが終了するまで、上記の粒子生成の処理を繰り返す。
【0146】
次に、
図12を参照して、本実施例に係る2次元伝播計算の処理について説明する。
図12は、実施例2に係る2次元伝播計算の処理のフローチャートである。
【0147】
制御部21は、ユーザインタフェース1からの入力により、領域101の分割した各格子における、水位、x方向の速度及びy方向の速度の初期値である水位η
0、流量M
0及び流量N
0を取得する(ステップS101)。また、制御部21は、各格子の中から解析対象とする格子を選択格子として一つ選択する。そして、制御部21は、選択格子における、水位η
0、流量M
0及び流量N
0を水位算出部22及び流量算出部23へ出力する。
【0148】
水位算出部22は、選択格子における水位の時間微分∂η/∂tを式(1)の連続方程式を用いて算出する(ステップS102)。
【0149】
また、流量算出部23は、選択格子における流量M及び流量Nの時間微分である∂M/∂t及び∂N/∂tを式(3)及び式(4)の運動方程式を用いて算出する(ステップS103)。
【0150】
制御部21は、全ての格子について計算が完了したか否かを判定する(ステップS104)。全ての格子について計算が完了していない場合(ステップS104:否定)、制御部21は、新たな選択格子を選択し、ステップS102へ戻る。
【0151】
これに対して、全ての格子について計算が完了している場合(ステップS104:肯定)、制御部21は、選択格子を一つ選択し、水位算出部22及び流量算出部23に次のステップの水位及び速度の算出を指示する。
【0152】
水位算出部22は、選択格子の水位ηを選択格子の水位の時間微分∂η/∂tを基に時間積分し(ステップS105)、次のステップの水位を求める。そして、水位算出部22は、算出した次のステップの水位ηを制御部21へ出力する。
【0153】
また、流量算出部23は、選択格子の流量M及び流量Nを選択格子の速度の時間微分∂M/∂t及び∂N/∂tを基に時間積分し(ステップS106)、次のステップの流量M及び流量Nを求める。そして、流量算出部23は、算出した次のステップの流量M及び流量Nを制御部21へ出力する。
【0154】
制御部21は、全ての格子について計算が完了したか否かを判定する(ステップS107)。全ての格子について計算が完了していない場合(ステップS107:否定)、制御部21は、新たな選択格子を選択し、ステップS105へ戻る。
【0155】
これに対して、全ての格子について計算が完了している場合(ステップS107:肯定)、制御部21は、解析段階を1ステップ進める(ステップS108)。
【0156】
そして、制御部21は、現在の解析段階における計算結果を3次元SPH計算処理部3へ出力する(ステップS109)。ここで、このフローでは、制御部21は、ステップ毎に計算が終わった時点で計算結果を出力しているが、これに限らず、例えば、全てのステップが完了してから全てのステップの計算結果をまとめて出力しても良い。
【0157】
制御部21は、最終状態の条件を満たしたか否かにより、全ステップが完了したか否かを判定する(ステップS110)。全ステップが完了していない場合(ステップS110:否定)、制御部21は、各格子の中から解析対象とする格子を選択格子として一つ選択する。そして、制御部21は、選択格子における、現ステップの水位η、流量M及び流量Nを水位算出部22及び流量算出部23へ出力し、次のステップの計算を指示し、ステップS102へ戻る。
【0158】
これに対して、全ステップが完了している場合(ステップS110:肯定)、制御部21は2次元伝播計算の処理を終了する。
【0159】
次に、
図13を参照して、本実施例に係る3次元SPH計算の処理について説明する。
図13は、実施例2に係る3次元SPH計算の処理のフローチャートである。
【0160】
制御部31は、ステップ毎の各格子における水位η、x方向の流量M及びy方向の流量Nのデータを2次元伝播計算処理部2から取得する(ステップS201)。そして、制御部31は、3次元粒子法計算の開始条件を満たしたステップを特定し、特定したステップの水位η、x方向の流量M及びy方向の流量Nを取得する。さらに、制御部31は、内挿により、3次元粒子法計算に用いる位置座標を内挿により求める。そして、制御部31は、求めた位置座標の全水深に応じて粒子を配置し、各粒子の速度、密度、圧力及び位置の初期値を設定する。
【0161】
また、制御部31は、粒子分布に基づいて近傍粒子リストを作成する(ステップS202)。そして、制御部31は、一つ着目粒子を選択し、着目粒子の密度ρ、圧力P及び位置rを速度算出部32へ出力する。また、制御部31は、着目粒子の密度ρを密度算出部33へ出力する。また、制御部31は、着目粒子の速度vを位置算出部35へ出力する。
【0162】
速度算出部32は、着目粒子の密度ρ、圧力P及び位置rの入力を制御部31から受ける。そして、速度算出部32は、式(8)の運動方程式に着目粒子の密度ρ、圧力P及び位置rを代入し着目粒子の加速度dv/dtを算出する(ステップS203)。
【0163】
さらに、速度算出部32は、着目粒子に対する境界からの反発力を式(12)を用いて算出する。着目粒子が境界近傍に存在しない場合は、反発力は0になる。そして、速度算出部32は、算出した反発力を加速度dv/dtに加算して(ステップS204)、加速度v´を算出する。
【0164】
速度算出部32は、式(13)を用いて、現ステップにおける着目粒子の速度vを現ステップにおける加速度v´で時間積分して、次のステップの速度vを算出する(ステップS205)。そして、速度算出部32は、算出した次のステップの着目粒子の速度vを制御部31へ出力する。
【0165】
制御部31は、着目粒子が境界領域に存在する場合、2次元伝播計算結果から着目粒子の速度vを算出し、速度算出部32から入力された速度vに変えて、算出した速度vを着目粒子の速度として設定する(ステップS206)。
【0166】
制御部31は、領域100内に存在する全ての粒子について速度の計算が完了したか否かを判定する(ステップS207)。全ての粒子について計算が完了していない場合(ステップS207:否定)、制御部31は、計算を行っていない粒子から着目粒子を選択し、ステップS203へ戻る。
【0167】
全ての粒子について計算が完了している場合(ステップS207:肯定)、制御部31は、着目粒子を1つ選択して、密度算出部33、圧力算出部34及び位置算出部35に対して計算実行を指示し、ステップS208へ進む。
【0168】
密度算出部33は、速度算出部32から受信した次のステップの着目粒子の速度vを着目粒子の密度時間微分を式(14)の連続方程式に代入して密度時間微分dρ/dtを算出する(ステップS208)。
【0169】
次に、密度算出部33は、制御部31から受信した現ステップの着目粒子の密度ρ及び算出した密度時間微分dρ/dtの値を式(15)に代入する。そして、密度算出部33は、現ステップにおける着目粒子の密度ρを密度時間微分dρ/dtで積分して、次のステップの密度ρを算出する(ステップS209)。密度算出部33は、算出した次のステップの密度ρを制御部31へ出力する。
【0170】
圧力算出部34は、密度算出部33から受信した次のステップの密度ρを、式(16)の状態方程式に代入して、次のステップの圧力Pを算出する(ステップS210)。圧力算出部34は、算出した次のステップの圧力Pを制御部31へ出力する。
【0171】
位置算出部35は、式(17)を用いて、現ステップの位置rを速度算出部32から受信した次のステップにおける速度vで時間積分し次のステップの位置rを求める(ステップS211)。位置算出部35は、算出した次のステップの位置rを制御部31へ出力する。
【0172】
制御部31は、次のステップの位置rを用いて領域境界を越えて流出した粒子を特定し、特定した粒子を領域100の中から消去する(ステップS212)。
【0173】
制御部31は、領域100内に存在する全ての粒子について密度、圧力及び位置の計算が完了したか否かを判定する(ステップS213)。全ての粒子について計算が完了していない場合(ステップS213:否定)、制御部31は、計算を行っていない粒子から着目粒子を選択し、ステップS208へ戻る。
【0174】
これに対して、全ての粒子について計算が完了している場合(ステップS213:肯定)、制御部31は、粒子生成を粒子生成部36に指示する。粒子生成部36は、各粒子生成子の位置における2次元伝播計算により求められた速度から、現在の海水の流出入体積を求め粒子の生成処理を行う(ステップS214)。この粒子の生成処理の流れについては次に詳細に説明する。そして、粒子生成部36は、生成を決定した粒子の位置を制御部31へ通知する。
【0175】
制御部31は、解析段階を1ステップ進める(ステップS215)。
【0176】
そして、制御部21は、現在の解析段階における計算結果を結果記憶部4へ出力する(ステップS216)。ここで、このフローチャートでは、制御部31は、ステップ毎に計算が終わった時点で計算結果を出力しているが、これに限らず、例えば、全てのステップが完了してから全てのステップの計算結果をまとめて出力しても良い。
【0177】
制御部31は、最終状態の条件を満たしたか否かにより、全ステップが完了したか否かを判定する(ステップS217)。全ステップが完了していない場合(ステップS217:否定)、制御部31は、ステップS202へ戻る。
【0178】
これに対して、全ステップが完了している場合(ステップS217:肯定)、制御部31は3次元SPH計算の処理を終了する。
【0179】
次に、
図14を参照して、本実施例に係る3次元SPH計算の処理について説明する。
図14は、実施例2に係る3次元SPH計算の処理のフローチャートである。
図14のフローチャートは、
図13のフローチャートにおけるステップS215にあたる。
【0180】
粒子生成部36は、粒子生成子を一つ選択する。そして、粒子生成部36は、選択した粒子生成子における現ステップの海水の流速を計算する(ステップS301)。
【0181】
次に、粒子生成部36は、海水の流速と粒子生成子の面積から、選択した粒子生成子における海水の流出入体積の増減を算出する(ステップS302)。
【0182】
次に、粒子生成部36は、現ステップの流出入体積Vに増減分を加算し、現ステップの新しい流出入体積Vを算出する(ステップS303)。
【0183】
次に、粒子生成部36は、新しい流出入体積Vが基準体積V
0以上か否かを判定する(ステップS304)。基準体積以上の場合(ステップS304:肯定)、粒子生成部36は、選択している粒子生成子に対応する位置に粒子の生成を決定する(ステップS305)。
【0184】
次に、粒子生成部36は、現ステップの新しい流出入体積Vから基準体積V
0を減算し、次のステップの流出入体積Vを算出する(ステップS306)。
【0185】
これに対して、新しい流出入体積Vが基準体積V
0以下の場合(ステップS304:否定)、粒子生成部36は、新しい流出入体積Vが基準体積V
0のマイナス値、すなわち−V
0より小さいか否かを判定する(ステップS307)。−V
0より小さい場合(ステップS307:肯定)、粒子生成部36は、現ステップの新しい流出入体積Vに基準体積V
0を加算し、次のステップの流出入体積Vを算出する(ステップS308)。これに対して、新しい流出入体積Vが−V
0以上の場合(ステップS307:否定)、粒子生成部36は、ステップS309へ進む。
【0186】
そして、粒子生成部36は、全粒子生成子について粒子の生成処理が終了したか否かを判定する(ステップS309)。粒子の生成処理が終了していない粒子生成子がある場合(ステップS309:否定)、粒子生成部36は、ステップS301へ戻る。
【0187】
これに対して、全粒子生成子について粒子の生成処理が終了した場合(ステップS309:肯定)、粒子生成部36は、粒子の生成処理を終了する。
【0188】
以上に説明したように、本実施例に係るシミュレーション装置は、連続体の広い移動に対するシミュレーションにおいて、広い範囲では2次元伝播計算を行い、港湾部や都市部といった3次元の形状の影響が大きい領域では3次元粒子方計算を行う。そして、本実施例に係るシミュレーション装置は、上述した各式などを用いて、2次元伝播計算及び3次元粒子法計算を行う。これにより、津波のように大量の流体の移動が伴う事象においても、破綻無く計算を行うことができ、計算量を抑えながら、精度の良いシミュレーションを行うことができる。
【0189】
また、本実施例に係るシミュレーション装置は、バッファ領域を用いた従来技術に比べて、境界領域の幅を粒子の影響半径と同程度に抑えることができ、計算量を確実に抑えることができる。
【0190】
さらに、粒子生成子を3次元空間内で向きを持つものとして設定できるので、2次元伝播計算と3次元粒子法計算の境界の形状を任意に設定でき、シミュレーションの条件の自由度を向上させることができる。