説明

粒子シミュレーション装置及び粒子シミュレーション方法

【課題】メモリへの書込みの競合を防ぐことができ、並列プロセッサを用いて離散要素法の演算効率を向上させる。
【解決手段】作業空間51内の複数の粒子が他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置10において、複数の粒子のそれぞれには粒子番号が付されており、作業空間51が複数のセルに分割され、各セルにはセル番号が付されており、複数の粒子のそれぞれについて、位置情報に基づいて各粒子が配置されるセルのセル番号を取得し、取得されたセル番号に基づいて、複数の粒子の粒子番号を付け替える粒子番号変更部14を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、粒子シミュレーション装置及び粒子シミュレーション方法に関する。
【背景技術】
【0002】
土砂崩れや地盤液状化などの自然災害予測や粉粒体現象の解析を高精度に行うためには、数値シミュレーションを用いて実験による観察が難しい微視的な知見を得ることが重要である。しかし多くの場合、固体粒子群は数えきれないほどの多数の粒子が多点で同時接触をしながら運動している。したがって、固体粒子群の運動を正確に予測するためには、物理に基づき、可能な限り多数の粒子を扱い、ときには長時間スケールを扱えるシミュレーションが必要となる。
【0003】
固体粒子群の運動を扱うシミュレーション手法として、Voigtモデルを用いて粘弾性体としての粒子運動を再現するDEM(DiscreteElement Method:離散要素法)が知られている(例えば特許文献1)。DEMは、多体衝突および摩擦や粒子の回転運動が扱えるため、高濃度で多数の粒子を扱う粉体産業や自然科学の分野で広く用いられてきた。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−172169号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、DEM で扱える粒子数は現実よりも遥かに少なく、実現象を正確に再現するためにDEM に対する高速化アルゴリズムの開発が求められている。
【0006】
これまでDEMは、接触相手粒子の探索方法の効率化や並列化およびベクトル化を行うことで高速化されてきた。しかし、DEMにとって並列化やベクトル化は容易ではない。並列化ではノード毎に粒子数が異なる上にノード間で情報交換すべき粒子が不定であるために並列化率が向上し難い。また、ベクトル化ではメモリへの書き込み競合を回避する処理が多く必要となるためにその処理で計算時間を浪費する。そのため、CPU(Central Processing Unit)がムーアの法則を破り桁違いに高性能化されない限り、DEMの飛躍的な高速化は期待できない。
【0007】
一方、最近ではCPUと比べて価格に対する演算性能の比が格段に大きいGPU(Graphics Processing Unit)を用いた高速化が盛んに行われている。しかし、粒子に働く力の全てを考慮している完全なDEMに対してGPU を用いて高速化した例は無く、さらにGPUは並列計算を行うため、メモリ書き込み競合を避けるべく計算量を増大させているためにGPUの性能を十分に生かせていない。
【0008】
本発明は、上記課題を解決するためになされたものであり、メモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる粒子シミュレーション装置及び粒子シミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記課題を解決するため、本発明に係る粒子シミュレーション装置は、作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、複数の粒子のそれぞれには粒子番号が付されており、作業空間が複数のセルに分割され、各セルにはセル番号が付されており、複数の粒子のそれぞれについて、位置情報に基づいて各粒子が配置されるセルのセル番号を取得するセル番号取得手段と、セル番号取得手段により取得されたセル番号に基づいて、複数の粒子の前記粒子番号を付け替える粒子番号変更手段と、粒子番号変更手段により付け替えられた粒子番号に基づき、複数の粒子の1つの粒子の近傍に位置する近傍粒子を選択する近傍粒子選択手段と、近傍粒子選択手段により選択された近傍粒子と前記1つの粒子との位置関係に基づいて、1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択手段と、選択候補粒子選択手段により選択された接触候補粒子との間で接触判定を行う接触判定手段と、接触判定手段により前記1つの粒子と接触していると判定された粒子との間の接触力を計算し、粒子ごとの接触力を総和演算する接触力演算手段と、接触力計算手段により計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新手段とを備えることを特徴とする。
【0010】
同様に、上記課題を解決するため、本発明に係る粒子シミュレーション方法は、作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション方法であって、複数の粒子のそれぞれには粒子番号が付されており、作業空間が複数のセルに分割され、各セルにはセル番号が付されており、複数の粒子のそれぞれについて、位置情報に基づいて各粒子が配置されるセルのセル番号を取得するセル番号取得ステップと、セル番号取得ステップにおいて取得されたセル番号に基づいて、複数の粒子の前記粒子番号を付け替える粒子番号変更ステップと、粒子番号変更ステップにおいて付け替えられた粒子番号に基づき、複数の粒子の1つの粒子の近傍に位置する近傍粒子を選択する近傍粒子選択ステップと、近傍粒子選択ステップにおいて選択された近傍粒子と前記1つの粒子との位置関係に基づいて、1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択ステップと、選択候補粒子選択ステップにおいて選択された接触候補粒子との間で接触判定を行う接触判定ステップと、接触判定ステップにおいて前記1つの粒子と接触していると判定された粒子との間の接触力を計算し、粒子ごとの接触力を総和演算する接触力演算ステップと、接触力計算ステップにおいて計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新ステップとを備えることを特徴とする。
【0011】
このような粒子シミュレーション装置及び粒子シミュレーション方法によれば、作業空間の複数の粒子をセルに割り当てるときに、各粒子が配置されるセルのセル番号が取得され、このセル番号に基づいて粒子の粒子番号が付け替えられるため、粒子をセルに割り当てる際にメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【0012】
上記課題を解決するため、本発明に係る粒子シミュレーション装置は、作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、複数の粒子のそれぞれの位置関係に基づいて、前記複数の粒子の1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択手段と、選択候補粒子選択手段により選択された接触候補粒子との間で接触判定を行う接触判定手段と、接触判定手段により前記1つの粒子と接触していると判定された粒子との間の接触力を計算する接触力計算手段と、接触力計算手段により計算された粒子間の接触力情報を配列に格納する接触力格納手段と、接触力格納手段により粒子間の接触力情報が格納された配列を参照して、粒子ごとの接触力を総和演算する総和演算手段と、総和演算手段により計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新手段と、を備えることを特徴とする。
【0013】
同様に、上記課題を解決するため、本発明に係る粒子シミュレーション方法は、作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション方法であって、複数の粒子のそれぞれの位置関係に基づいて、前記複数の粒子の1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択ステップと、選択候補粒子選択ステップにおいて選択された接触候補粒子との間で接触判定を行う接触判定ステップと、接触判定ステップにおいて前記1つの粒子と接触していると判定された粒子との間の接触力を計算する接触力計算ステップと、接触力計算ステップにおいて計算された粒子間の接触力情報を配列に格納する接触力格納ステップと、接触力格納ステップにおいて粒子間の接触力情報が格納された配列を参照して、粒子ごとの接触力を総和演算する総和演算ステップと、総和演算ステップにおいて計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新ステップと、を備えることを特徴とする。
【0014】
このような粒子シミュレーション装置及び粒子シミュレーション方法によれば、算出された粒子間の接触力情報が配列に格納され、この配列を参照して粒子ごとの接触力が総和演算で得られるため、接触力の総和演算時に発生するメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【発明の効果】
【0015】
本発明に係る粒子シミュレーション装置及び粒子シミュレーション方法によれば、メモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【図面の簡単な説明】
【0016】
【図1】本発明の第1実施形態に係る粒子シミュレーション装置の機能ブロック図である。
【図2】本実施形態で粒子モデルに適用するVoigtモデルを示す概略図である。
【図3】本実施形態における作業領域を示す図である。
【図4】粒子番号変更の流れを示す図である。
【図5】作業領域における粒子番号を変更する処理と、各セルに粒子番号の最大値及び最小値を記憶する処理を示す図である。
【図6】近傍粒子表の構成の一例を示す図である。
【図7】接触候補リストの構成の一例を示す図である。
【図8】現在の接触候補リストのペア粒子について1ステップ前にペアであったか調べる処理を示す図である。
【図9】接触力参照表の構成の一例を示す図である。
【図10】接触力参照表の構成の一例を示す図である。
【図11】本発明の第1実施形態の粒子シミュレーション装置において実行される処理を示すフローチャートである。
【図12】本発明の第2実施形態に係る粒子シミュレーション装置の機能ブロック図である。
【図13】近傍粒子表の構成の一例を示す図である。
【図14】本発明の第2実施形態の粒子シミュレーション装置において実行される処理を示すフローチャートである。
【図15】本発明の第3実施形態に係る粒子シミュレーション装置の機能ブロック図である。
【図16】粒子をセルに格納する流れを示す図である。
【図17】本発明の第3実施形態の粒子シミュレーション装置において実行される処理を示すフローチャートである。
【発明を実施するための形態】
【0017】
以下、図面を参照しながら本発明の実施形態を詳細に説明する。なお、図面の説明において同一又は同等の要素には同一の符号を付し、重複する説明を省略する。
【0018】
(第1実施形態)
図1は、本発明の第1実施形態に係る粒子シミュレーション装置10の機能ブロック図である。図1に示すように、粒子シミュレーション装置10は、粒子情報保持部11、粒子情報取得部12、接触候補リスト更新判定部13、粒子番号変更部(セル番号取得手段、粒子番号変更手段)14、近傍粒子表作成部(近傍粒子選択手段)15、接触候補リスト作成部(接触候補粒子選択手段)16、接触力参照表作成部17、接触判定部(接触判定手段、接触力演算手段、接触力計算手段、接触力格納手段)18、接触力計算部(接触力演算手段、総和演算手段)19、粒子情報更新部(粒子情報更新手段)20を備えている。
【0019】
粒子シミュレーション装置10は、物理的には、GPU(Graphics Processing Unit)、主記憶装置であるRAM及びROM、ハードディスク装置等の補助記憶装置、入力デバイスである入力キー等の入力装置、ディスプレイ等の出力装置、ネットワークカード等のデータ送受信デバイスである通信モジュールなどを有するコンピュータとして構成されている。図1において説明した粒子シミュレーション装置10の各機能は、GPU、RAM等のハードウェア上に所定のコンピュータソフトウェアを読み込ませることにより、GPUの制御のもとで入力装置、出力装置、通信モジュールを動作させるとともに、RAMや補助記憶装置におけるデータの読み出し及び書き込みを行うことで実現される。
【0020】
まず本実施形態で適用する粒子モデルについて説明する。粒子間接触力の法線方向および接線方向成分Fn,Ftは、図2に示すVoigtモデル71を用いて以下の式により表される。
【数1】


ここでxとvは相対変位および相対速度ベクトル、μtは滑り摩擦係数、minは絶対値が小さい方の値を表す関数、Kは線形バネ72における弾性係数、ηはダッシュポット73の粘性減衰係数であり、反発係数eと次式の関連がある。
【数2】

【0021】
したがって、DEMで扱う並進および重心を中心とする回転の運動方程式は以下の式で表される。
【数3】


ここで、uとωは粒子の速度および角速度、mとIは粒子の質量および慣性モーメント、Rは粒子中心から接触点へ向かう位置ベクトルである。また、(5)式の右辺第二項は転がり摩擦力を表し、μは転がり摩擦係数、bは接触面幅である。(1)、(2)式のVoigtモデル71は、後述する接触判定部18で粒子間接触力を算出するのに用いられ、また(4)、(5)式の運動方程式は、粒子情報更新部20で粒子の座標を算出するのに用いられる。
【0022】
また、本実施形態において粒子が運動する領域である作業領域51は、図3に示すように、一辺の大きさがDmax(1.0+α)の立方体セルで区分される。ここで、Dmaxは最大粒子径、αは更新頻度を調整するパラメータであり例えばα=0.2である。また、作業領域51内の各セルにはセル番号cell_idが付されている。セル番号の付け方は後述する。
【0023】
粒子情報保持部11は、作業空間51内の複数の粒子のそれぞれについて粒子情報を保持している。粒子情報は、座標、並進速度、回転速度、粒子半径を含む。座標とは、図3に示す三次元の作業空間51における三次元座標(pos.x,pos.y,pos.z)である。粒子情報は、後述する粒子情報更新部20により更新される。
【0024】
粒子情報取得部12は、粒子情報保持部11から粒子情報を取得する。粒子情報取得部12は、粒子シミュレーションの開始時に粒子情報保持部11から予め設定されている初期状態の粒子情報を取得し、シミュレーション動作中には、粒子情報保持部11が更新される度に新たな粒子情報を粒子情報保持部11から取得する。
【0025】
接触候補リスト更新判定部13は、後述する接触候補リスト53を更新するか否かを判定する。更新判定は、例えば、粒子半径をrとして、粒子の積算移動距離がrαよりも大きい粒子が存在したときに更新する。ここでαは更新頻度を調整するパラメータであり、例えばα=0.2である。また、粒子の積算移動距離は、例えば、粒子情報取得部12が新しい粒子情報を粒子情報保持部11から取得する度に、1ステップ前の粒子情報との座標データの差分からこの直近の1ステップにおける粒子の移動距離を算出し、これを粒子ごとに積算して求める。なお、粒子移動距離の積算値は、接触候補リスト53の更新が行われるたびに初期化される。
【0026】
粒子番号変更部14は、粒子を所属するセル番号順に並べ、その順に粒子番号を付け直す。セル番号は図3に示すように一次元であり、例えば次式のように表される。
cell_id=i.x+id.x×i.y+id.x×id.y×i.z (6)
i.m = int(pos.m/cellsize.m)
ここでcell_idはセル番号であり、i.mはm方向のセル位置であり、id.mはm方向のセル数である。また、pos.mはm軸方向の座標を表し、cellsize.mはm軸方向のセルサイズを表し、int()は実数を整数に変換する関数である。
【0027】
図4に示すように、粒子に自身が所属するセル番号を記憶させる(図4(a))。次に、セル番号が昇順になるように粒子を並べる(図4(b))。そして、セル番号順に粒子番号を付け直す(図4(c))。
【0028】
図4の流れを式で表すと以下のとおりである。
Pcell[p_id]=cell_id
B_pid[p_id]=p_id
Step1
Pcell={5,13,0,21,5,3,6} B_pid={0,1,2,3,4,5,6}
Step2
Pcell={0,3,5,5,6,13,21} B_pid={2,5,0,4,6,1,3}
Step3
old_p_id=B_pid[p_id] Val[p_id]=Val[old_p_id]
ここで、p_idは粒子番号であり、Valは粒子座標、並進速度、回転速度、半径である。Step1のPcellの中身を周知のソート手法(例えばバイトニックソート)を用いて昇順にし、それと同じようにB_pidの中身も移動させる。この時点でBの中身はソート前の粒子番号が記憶されている。Step3でB_pidを使い、ソート前の粒子情報をソート後の粒子情報に書き換える。
【0029】
この粒子番号を変更する処理により、例えば図5(a)に示すように作業空間51に配置された粒子の粒子番号が、図5(b)に示すように、セル番号に沿った粒子番号に変更される。
【0030】
近傍粒子表作成部15は、作業空間51内の個々の粒子について、この粒子の近傍に位置する近傍粒子の情報を含む近傍粒子表52を作成する。近傍粒子表作成部15は、着目粒子の所属するセルおよびその隣接セルに存在する粒子のうち、自身より大きな粒子番号の粒子で粒子間距離がある値以下の粒子を近傍粒子とする。以下に詳細を説明する。
【0031】
近傍粒子表作成部15は、セル内の粒子の番号のうち、最小値Pnum_in_cellminと最大値Pnum_in_cellmaxをセルに記憶させる(図5(c))。番号cell_idのセルに隣接するセルの番号nei_cell_idは次式で表される。
nei_cell_id[n]= cell_id + con[n] (n=0〜26) (7)
ここで、conはid.xとid.yによって決まる定数である。セル番号で粒子番号をソートしてあるため、各隣接セルにはPnum_in_cellmin[nei_cell_id]からPnum_in_cellmax[nei_cell_id]までの番号の粒子が連続して存在することがわかる。これらの粒子を近傍粒子と呼ぶ。
【0032】
各粒子ごとに、図6に示すような近傍粒子を格納する箱nei_pn[i][box_id]をn個用意し、近傍粒子のうち粒子中心間距離がdis_lim以下で、自身より大きい番号(i=p_id)の近傍粒子を番号(box_id)が小さい方の箱から入れて行き、一方、小さい番号(i)の近傍粒子は番号(box_id)が大きい方の箱から順に入れる。dis_lim = (ri + rj)(1.0+α)であり、ri,rjは近傍粒子ペアi,jの粒子半径、αは接触候補の更新回数を調整するパラメータである。図6に示す一連の箱の集合を、作業空間51内の全ての粒子iについて用意したものを、本実施形態では近傍粒子表52という。
【0033】
さらに、粒子番号iが自身より大きい粒子および小さい粒子の数n_jgi, n_jliをそれぞれ全粒子に対して求める。図6の例では、例えば5番の粒子(i=5)の近傍粒子の粒子番号が1,3,4,7,9番であったとすると、
nei_pn[5][0]=7
nei_pn[5][1]=9
nei_pn[5][n-3]=4
nei_pn[5][n-2]=3
nei_pn[5][n-1]=1
n_jgi[5]=2
n_jli[5]=3
となる。
【0034】
接触候補リスト作成部16は、まず、図7に示すように、n_jgiのプレフィックス和s_jgiを次式から求める。
【数4】

【0035】
そして、各粒子iに対して、box_id を 0 〜 n_jgi [i ] − 1まで変化させて、次式を用いて、候補リスト番号Lnumおよび接触候補相手の粒子番号jを求め、接触候補リスト53list_i,list_jを作る。
Lnum = s_jgi [i - 1] + box_id
j = nei_pn[i][box_id]
list_i[Lnum] = i
list_j[Lnum] = j
【0036】
例えば、図7の例では、接触候補リスト53の内容は、以下の表1のようになる。
【表1】



つまり、接触候補リスト53は、作業空間51の全粒子について、接触している可能性がある粒子ペアlist_i,list_jに番号Lnumを付加する。
【0037】
次に、1ステップ前の接触候補ペアBlist_i,Blist_jを探索し、現在の接触候補ペアlist_i, list_jが1ステップ前にもペアであったか調べる。ペアであったら、図2に示した粒子モデルにおける法線ベクトルと接線方向のバネによる力(バネの伸縮量)を新しい候補リスト番号の配列に格納する。
【0038】
粒子番号i=list_i[Lnum], j=list_j[Lnum]の接触候補ペアが有るとき、このペア粒子の1ステップ前の粒子番号はBi =Bpn[i], Bj = Bpn[j]である。Bj>BiのときはBs_jgi[Bi−1]〜Bs_jgi[Bi]−1の範囲の接触候補Blist_j[BLnum]を調べBjと一致するか調べる。一致したときはそのリスト番号BLnumを用いて1ステップ前の法線ベクトルと接線方向の接触力BSpring[BLnum]を現在のリスト番号配列Spring[Lnum]に代入する。逆にBi>Bjのとき、Bjに対して粒子番号が大きい粒子が接触候補として格納されているリスト番号BLnumの範囲はBs_jig[Bj−1]〜Bs_jgi[Bj]−1であるから、この範囲でBlist_j[BLnum]がBiと一致するか調べ、一致するときはSpring[Lnum]に−BSpring[BLnum]を代入する。
【0039】
この処理について、図8を参照して、現在の接触候補リスト番号Lnum = 6におけるi=5,j=9番のペア粒子について1ステップ前にペアであったか調べる処理を説明する。
【0040】
まず、i=5,j=9の1ステップ前の粒子番号はBpn[]関数を使ってBi =4=Bpn[5], Bj=0=Bpn[9]と求まる。ここでBi>Bjであるので、Bjに対する接触候補の粒子番号はリスト番号BLnumがBs_jgi[Bj - 1]〜Bs_jgi[Bj] - 1 = 0~0の範囲のBlist_j[bl]に格納されている。そこで、このBLnumの範囲でBlist_j[bl] がbiと一致するか調べると、BLnum = 0のときにBlist_j[0] = 4でありBi = 4と一致する。
【0041】
したがって、現在のリスト番号Lnum = 6の候補ペアは1ステップ前もペアであった事がわかり、そのリスト番号はBLnum = 0である。そしてBLnum =0の法線ベクトルと接線方向の接触力の逆符号の値をLnum = 6の配列に代入する(Spring [6]=−BSpring [0])ことで、1ステップ前の接触状態を引き継ぐ事ができる。
【0042】
BSpring [0]は4番の粒子から0番の粒子に対する法線ベクトルおよび接触力である。Spring[6]は9番の粒子から5番の粒子に対する法線ベクトルおよび接触力である。したがって、 Spring [6]=−BSpring [0]である。逆にBj > Biの条件であればSpring []=BSpring []となる
【0043】
接触力参照表作成部17は、box_idから対応する候補リスト番号Lnumを算出する関数Ref[i][box_id]を作る。本実施形態では、この関数Ref[i][box_id]を接触力参照表54とする。接触力参照表54は、図9に示すように、接触候補リスト53のi粒子がj粒子から受ける接触力Fc[Lnum]を任意の一粒子i(図9ではi=5)ごとに参照先(Lnum)をまとめたものである。
【0044】
例として5番と9番の接触候補ペア粒子について説明する(図10)。 i=5番の粒子はk=box_id=1の箱(nei_pn)を調べて接触候補粒子の番号がj=9でありその候補リスト番号がLnum=6であることを知っている。したがって、 Ref[5][1]=6すなわちRef[i][k]=Lnum である。
【0045】
一方、j=9番の粒子に対するRef関数は、9番の箱(nei_pn)の後ろの領域(N−n_jli−1<box_id<N)にi=5番の粒子が格納されているはずなので、その箱を調べてi=5番の粒子が入ってる箱番号kを求める。ここではk = N‐1であり、 Ref[9][3]=6すなわちRef[j][n_jgi[j]−k+N−1] =Lnumである。
【0046】
接触判定部18は、接触候補リスト53を参照して、2つの粒子間の接触判定をすると共に、接触していると判定した場合には粒子間の接触力Fijr、Fijtを算出する。接触候補リスト53を走査してi 粒子とj 粒子の粒子間距離を計算し、接触している場合は、上述したVoigtモデルを用いて接触力の並進成分Fn +Ft と回転成分Ri ×Ft を計算し、それぞれを接触候補ペアリスト番号Lnumを要素としてもつ配列Fijt[Lnum],Fijr[Lnum]に記憶する。
【0047】
接触判定および接触力は接触候補ペアリスト番号をスレッド化して計算する。GPU のグローバルメモリはアクセスパターンがスレッドの順である場合に最も良いアクセス効率が得られる。しかし、ペア粒子の番号はリスト番号に対してランダムであるため、粒子情報が格納されているグローバルメモリをランダムにアクセスしメモリアクセス速度が大きく低下する。一方、テクスチャメモリはキャッシュ機能が有るため、ランダムアクセスによるメモリアクセス速度の低下を抑えることができる。そこで、粒子情報を格納しているグローバルメモリ領域をテクスチャメモリから参照できるように設定した。さらに粒子には所属するセル番号順になるように番号を付けているために接触候補ペア同士の粒子番号が近く、加えて接触候補ペアリストは粒子番号i が小さい順にリスト内に並ぶように作られている。そのため、接触候補ペアリスト番号でスレッド化することでキャッシュヒット率が高くなり、粒子間の接触判定および接触力計算のルーチンが高速化される。
【0048】
接触力計算部19は、接触力参照表54を用いて各粒子に働く接触力Fr、Ftを計算する。
【0049】
i番の粒子に働く全接触力(並進成分)は接触力参照表54を用いて、0〜n_jgi−1番の箱(box_id)はそのまま接触力を参照し、n_jgi〜n_jgi+n_jli−1番の箱(box_id)は接触力を逆符号にして参照し、それらの総和で次式のように表わされる。なぜなら、0〜num_g−1番の箱はp_id番の粒子が受ける接触力を参照するのに対して、 n_jgi〜n_jgi+n_jli−1番の箱はi番の粒子が相手粒子に与える接触力を参照するため、i番の粒子が受ける力はその逆符号の値になる。
【数5】

【0050】
i番の粒子に働く全接触力(回転成分)は接触力参照表54を用いて、0〜n_jgi−1番の箱(box_id)はそのまま接触力を参照し、n_jgi〜n_jgi+n_jli−1番の箱(box_id)は接触力にβ を掛けてから足し合わせ、次式のように表される。ここで、β はj粒子 の中心から接触点までの距離をi粒子 の中心から接触点までの距離で割った値である。
【数6】

(10)
【0051】
コンピュータを用いた演算においては、具体的には粒子番号iをスレッド化し、box_idでループを回してFtall, Frallを求める。ここでFijへのメモリアクセスはランダムアクセスになるのでテクスチャメモリを使用する。上述のようにテクスチャメモリはキャッシュヒット率は高いので、グローバルメモリを直接アクセスするよりは高速に処理できる。なお接触力参照表54に関しては配列Ref[A][B]のBの要素サイズを16の倍数になるように配列宣言することで連続アクセスが可能となる。
【0052】
粒子情報更新部20は、接触力計算部19により算出された各粒子の接触力と、各粒子の位置、速度に応じて粒子情報を更新する。具体的には、並進の運動方程式をleap-flog法を用いて解くことで新しい時刻の並進速度ならびに粒子座標を求める。さらに、回転の運動方程式も同様にleap-flog 法を用いて解き、ここで得られる回転速度を予測値とする。この予測される回転速度に対して転がり摩擦力を計算し、接触力による回転力と転がり摩擦力を考慮した回転の運動方程式を解くことにより新しい時刻の回転速度を得る。
【0053】
次に、図11を参照して、粒子シミュレーション装置10において実行される処理について説明すると共に、本実施形態に係る粒子シミュレーション方法について説明する。図11は本実施形態の粒子シミュレーション装置10において実行される処理を示すフローチャートである。粒子情報取得部12により粒子情報が粒子情報保持部11から取得される(S101)。接触候補リスト更新判定部13により、接触候補リストの更新が必要か否かが判定される(S102)。更新判定は、例えば、粒子半径をrとして、粒子の積算移動距離がrαよりも大きい粒子が存在したときに更新する。ここでαは更新頻度を調整するパラメータであり、例えばα=0.2である。更新が必要と判定された場合にはステップS103に移行し、更新が不要と判定された場合にはステップS107に移行する。
【0054】
次に、粒子番号変更部14により粒子番号が変更される(S103:セル番号取得ステップ、粒子番号変更ステップ)。粒子番号変更部14は、粒子を所属するセル番号順に並べ、その順に粒子番号を付け直す。続いて、近傍粒子表作成部15により、作業空間51内の個々の粒子について、この粒子の近傍に位置する近傍粒子の情報を含む近傍粒子表52が作成される(S104:近傍粒子選択ステップ)。
【0055】
次に、接触候補リスト作成部16により、作業空間51の全粒子について、接触している可能性がある粒子ペアの情報を含む接触候補リスト53が作成される(S105:接触候補粒子選択ステップ)。接触力参照表作成部17により、接触力参照表54が作成される(S106)。
【0056】
次に、接触判定部18により、接触候補リスト53を参照して、2つの粒子間の接触判定が行われ(S107:接触判定ステップ)、接触していると判定された場合には粒子間の接触力Fijr、Fijtが算出され、配列に格納される(S108:接触力演算ステップ、接触力計算ステップ、接触力格納ステップ)。
【0057】
そして、接触力計算部19により、接触力参照表54を参照して、粒子と接触する他の粒子が選択され、(9),(10)式を用いて、対応する配列Fijr、Fijtから接触力が取得され総和演算されて、各粒子に働く接触力Fr、Ftが計算される(S109:接触力演算ステップ、総和演算ステップ)。粒子情報更新部20により、ステップS109において算出された接触力、現在の粒子情報に基づいて粒子情報が更新される(S110:粒子情報更新ステップ)。
【0058】
そして、粒子シミュレーションが終了したか否かが判定される(S111)。終了判定は、例えば所定時間が経過した場合にシミュレーションが終了したものと判定される。粒子シミュレーションが終了していないと判定された場合にはステップS101に戻り、次のステップに入る。粒子シミュレーションが終了したと判定された場合には処理を終了する。
【0059】
本実施形態に係る粒子シミュレーション装置10及び粒子シミュレーション方法によれば、作業空間51の複数の粒子をセルに割り当てるときに、粒子番号変更部14が、各粒子が配置されるセルのセル番号を取得し、このセル番号に基づいて粒子の粒子番号を付け替えるため、粒子をセルに割り当てる際にメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【0060】
また、接触判定部18が算出した粒子間の接触力情報を配列に格納し、接触力計算部19が、この配列を参照して粒子ごとの接触力を総和演算で得るため、接触力の総和演算時に発生するメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【0061】
(第2実施形態)
次に、本発明の第2実施形態について説明する。図12は、本発明の第2実施形態に係る粒子シミュレーション装置30の機能ブロック図である。図12に示すように、本実施形態に係る粒子シミュレーション装置30と第1実施形態に係る粒子シミュレーション装置10との相違点は、(1)接触力参照表作成部17を備えず、接触力参照表を作成しない点、(2)接触力計算部33が、接触力参照表ではなく接触候補リストを参照して各粒子の接触力を総和演算する点、(3)近傍粒子表作成部31が、粒子番号に関係なく近傍粒子表を作成する点である。図12に示す本実施形態の粒子シミュレーション装置30に含まれるほかの構成要素は、第1実施形態と同様の機能を有するものなので説明を省略する。
【0062】
近傍粒子表作成部31は、各粒子ごとに、図13に示すような近傍粒子を格納する箱nei_pn[i][box_id]をn個用意し、近傍粒子のうち粒子中心間距離がdis_lim以下の近傍粒子を番号が小さい方の箱から入れる。図13に示す一連の箱の集合を、作業空間51内の全ての粒子iについて用意したものを、本実施形態では近傍粒子表62という。本実施形態では、近傍粒子の粒子番号jの大小に関係なく図13では左詰で近傍粒子表62を作成する。さらに、箱に入れた粒子数n_jiをカウントする。
【0063】
図13の例では、例えば5番の粒子(i=5)の近傍粒子の粒子番号が1,3,4,7,9番であったとすると、
nei_pn[5][0]=7
nei_pn[5][1]=9
nei_pn[5][2]=4
nei_pn[5][3]=3
nei_pn[5][4]=1
n_ji[5]=5
となる。
【0064】
接触候補リスト作成部32は、まず、n_jiのプレフィックス和s_jiを次式から求める。
【数7】

【0065】
そして、各粒子iに対して、box_id を 0 〜 n_ji [i ]−1まで変化させて、次式を用いて、候補リスト番号Lnumおよび接触候補相手の粒子番号jを求め、接触候補リスト63list_i,list_jを作る。
Lnum = s_ji [i - 1] + box_id
j = nei_pn[i][box_id]
list_i[Lnum] = i
list_j[Lnum] = j
【0066】
接触力計算部33は、接触候補リスト63を用いて各粒子に働く接触力Fr、Ftを計算する。
【0067】
i番の粒子に働く全接触力(並進成分)は接触候補リストlist_jを用いて、0〜n_ji[i]−1番のリストを検索してj粒子を呼び出し、j粒子との接触力Fij[box_id]を計算しそのまま接触力を足し合わせる((12)式)。iに対してスレッド化し、作用反作用を使わないのでメモリ同時書き込みは起きない。
【数8】

【0068】
i番の粒子に働く全接触力(回転成分)についても並進成分と同様に、(13)式を用いて算出する。
【数9】

【0069】
図14は本実施形態の粒子シミュレーション装置30において実行される処理を示すフローチャートである。図14に示すように、本実施形態に係るフローチャートと、図11に示した第1実施形態に係るフローチャートとの相違点は、(1)接触力参照表作成ステップ(S106)を含まない点と、(2)接触力計算部33により、接触候補リスト63を参照して、粒子と接触する他の粒子が選択され、(12),(13)式を用いて、対応する配列Fijr、Fijtから接触力が取得され総和演算されて、各粒子に働く接触力Fr、Ftが計算される(S209)点である。
【0070】
本実施形態に係る粒子シミュレーション装置10及び粒子シミュレーション方法によれば、作業空間51の複数の粒子をセルに割り当てるときに、粒子番号変更部14が、各粒子が配置されるセルのセル番号を取得し、このセル番号に基づいて粒子の粒子番号を付け替えるため、粒子をセルに割り当てる際にメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【0071】
(第3実施形態)
次に、本発明の第3実施形態について説明する。図15は、本発明の第3実施形態に係る粒子シミュレーション装置40の機能ブロック図である。図15に示すように、本実施形態に係る粒子シミュレーション装置40と第1実施形態に係る粒子シミュレーション装置10との相違点は、粒子番号変更部14の代わりに粒子格納部41を備える点である。つまり、本実施形態では、粒子番号の変更は行われない。図15に示す本実施形態の粒子シミュレーション装置40に含まれるほかの構成要素は、第1実施形態と同様の機能を有するものなので説明を省略する。
【0072】
粒子格納部41は、作業空間51内の全ての粒子をいずれかのセルに格納する。各粒子は、自身が所属するセルのセル番号と、このセルに格納された順位とを記憶する。
【0073】
例えば、図16に示すように、一つのセルに最大で粒子が4個格納される場合を考える。まず、全粒子(i=1,5,6,8)をセルに格納しようとするが、一度には一粒子しかセルに格納することができない。この例の場合、まず5番粒子だけがセルに格納される。つぎに、再び全粒子をセルに入れようとする。この時、すでにセルに入っている粒子を調べて、その粒子以外をセルに入れようとする。図16の例の場合、5番以外の粒子(i=1,6,8)を格納しようとして8番の粒子だけが格納される。この操作を4回繰り返し、全粒子(i=1,5,6,8)をセルに格納する。
【0074】
図17は本実施形態の粒子シミュレーション装置40において実行される処理を示すフローチャートである。図17に示すように、本実施形態に係るフローチャートと、図11に示した第1実施形態に係るフローチャートとの相違点は、粒子番号変更ステップ(S103)の代わりに、粒子格納部41により、作業空間51内の全ての粒子がいずれかのセルに格納される(S303)点である。
【0075】
本実施形態に係る粒子シミュレーション装置10及び粒子シミュレーション方法によれば、接触判定部18が算出した粒子間の接触力情報を配列に格納し、接触力計算部19が、この配列を参照して粒子ごとの接触力を総和演算で得るため、接触力の総和演算時に発生するメモリへの書込みの競合を防ぐことができ、GPUなどの並列プロセッサを用いてDEM(離散要素法)の演算効率を向上させることができる。
【符号の説明】
【0076】
10,30,40…粒子シミュレーション装置、11…粒子情報保持部、12…粒子情報取得部、13…接触候補リスト更新判定部、14…粒子番号変更部(セル番号取得手段、粒子番号変更手段)、15,31…近傍粒子表作成部(近傍粒子選択手段)、16,32…接触候補リスト作成部(接触候補粒子選択手段)、17…接触力参照表作成部、18…接触判定部(接触判定手段、接触力演算手段、接触力計算手段、接触力格納手段)、19,33…接触力計算部(接触力演算手段、総和演算手段)、20…粒子情報更新部(粒子情報更新手段)、41…粒子格納部、51…作業領域、52,62…近傍粒子表、53,63…接触候補リスト、54…接触力参照表。


【特許請求の範囲】
【請求項1】
作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、
前記複数の粒子のそれぞれには粒子番号が付されており、前記作業空間が複数のセルに分割され、各セルにはセル番号が付されており、
前記複数の粒子のそれぞれについて、位置情報に基づいて各粒子が配置されるセルのセル番号を取得するセル番号取得手段と、
前記セル番号取得手段により取得されたセル番号に基づいて、前記複数の粒子の前記粒子番号を付け替える粒子番号変更手段と、
前記粒子番号変更手段により付け替えられた粒子番号に基づき、前記複数の粒子の1つの粒子の近傍に位置する近傍粒子を選択する近傍粒子選択手段と、
前記近傍粒子選択手段により選択された近傍粒子と前記1つの粒子との位置関係に基づいて、前記1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択手段と、
前記選択候補粒子選択手段により選択された接触候補粒子との間で接触判定を行う接触判定手段と、
前記接触判定手段により前記1つの粒子と接触していると判定された粒子との間の接触力を計算し、粒子ごとの接触力を総和演算する接触力演算手段と、
前記接触力計算手段により計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新手段と
を備えることを特徴とする粒子シミュレーション装置。
【請求項2】
作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、
前記複数の粒子のそれぞれの位置関係に基づいて、前記複数の粒子の1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択手段と、
前記選択候補粒子選択手段により選択された接触候補粒子との間で接触判定を行う接触判定手段と、
前記接触判定手段により前記1つの粒子と接触していると判定された粒子との間の接触力を計算する接触力計算手段と、
前記接触力計算手段により計算された粒子間の接触力情報を配列に格納する接触力格納手段と、
前記接触力格納手段により粒子間の接触力情報が格納された配列を参照して、粒子ごとの接触力を総和演算する総和演算手段と、
前記総和演算手段により計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新手段と、
を備えることを特徴とする粒子シミュレーション装置。
【請求項3】
作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション方法であって、
前記複数の粒子のそれぞれには粒子番号が付されており、前記作業空間が複数のセルに分割され、各セルにはセル番号が付されており、
前記複数の粒子のそれぞれについて、位置情報に基づいて各粒子が配置されるセルのセル番号を取得するセル番号取得ステップと、
前記セル番号取得ステップにおいて取得されたセル番号に基づいて、前記複数の粒子の前記粒子番号を付け替える粒子番号変更ステップと、
前記粒子番号変更ステップにおいて付け替えられた粒子番号に基づき、前記複数の粒子の1つの粒子の近傍に位置する近傍粒子を選択する近傍粒子選択ステップと、
前記近傍粒子選択ステップにおいて選択された近傍粒子と前記1つの粒子との位置関係に基づいて、前記1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択ステップと、
前記選択候補粒子選択ステップにおいて選択された接触候補粒子との間で接触判定を行う接触判定ステップと、
前記接触判定ステップにおいて前記1つの粒子と接触していると判定された粒子との間の接触力を計算し、粒子ごとの接触力を総和演算する接触力演算ステップと、
前記接触力計算ステップにおいて計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新ステップと
を備えることを特徴とする粒子シミュレーション方法。
【請求項4】
作業空間内の複数の粒子について他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション方法であって、
前記複数の粒子のそれぞれの位置関係に基づいて、前記複数の粒子の1つの粒子と接触している可能性の高い接触候補粒子を選択する接触候補粒子選択ステップと、
前記選択候補粒子選択ステップにおいて選択された接触候補粒子との間で接触判定を行う接触判定ステップと、
前記接触判定ステップにおいて前記1つの粒子と接触していると判定された粒子との間の接触力を計算する接触力計算ステップと、
前記接触力計算ステップにおいて計算された粒子間の接触力情報を配列に格納する接触力格納ステップと、
前記接触力格納ステップにおいて粒子間の接触力情報が格納された配列を参照して、粒子ごとの接触力を総和演算する総和演算ステップと、
前記総和演算ステップにおいて計算された粒子ごとの接触力に基づいて粒子の位置及び速度を含む粒子情報を更新する粒子情報更新ステップと、
を備えることを特徴とする粒子シミュレーション方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2010−238030(P2010−238030A)
【公開日】平成22年10月21日(2010.10.21)
【国際特許分類】
【出願番号】特願2009−86272(P2009−86272)
【出願日】平成21年3月31日(2009.3.31)
【出願人】(504194878)独立行政法人海洋研究開発機構 (110)