説明

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

【課題】粒子径分布を有する粉粒体のDEM計算のメモリ使用量を抑制する。
【解決手段】粒子群の位置・速度情報を含む粒子情報を保持する粒子情報保持部11と、粒子の位置に応じた順序で特定する粒子番号を各粒子に付与する粒子番号変更部14と、着目粒子と接触している可能性がある他の粒子との接触候補ペアを選択する接触候補リスト作成部16と、接触候補ペアの粒子間の接触力を粒子情報に基づき算出して接触力テーブルに格納する接触判定部18と、粒子ごとに、当該粒子より粒子径の大きい粒子との接触力を接触力参照表54を用いて接触力テーブルから抽出し、粒子径の小さい粒子との接触力を、積算接触候補数s_jgi[i]を用いて接触力テーブルの格納位置を特定して抽出し、接触力を総和演算する接触力計算部19と、粒子ごとの接触力に基づいて粒子情報を更新する粒子情報更新部20と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、粒子シミュレーション装置及び粒子シミュレーション方法に関する。
【背景技術】
【0002】
土木工学の研究分野から端を発したDEM(Discrete Element Method:離散要素法)は、その後粉体工学へ応用され、昨今では、粒子性物質のみならず連続体として扱いが困難な非常に多種多様の問題に対する数値解析手法として益々需要は広がってきた。一方、離散的な粒子運動を数値的に追跡する手法には、MD(Molecular Dynamics)、LGA(Lattice Gas Automaton)、SPH(Smoothed Particle Hydrodynamics)などDEM以外にも数多く開発されてきている。しかし、数ある数値粒子解析手法の中で、DEMの応用範囲が広い理由は、粒子の大きさや形状という個々の粒子の幾何情報を考慮しながら粒子間相互作用力を求めニュートンの運動方程式を解くという計算を非常に高速に行えることである。勿論、DEM以外にもDDA(Discontinuous Deformation Analysis)なども、大きさと形状を考慮することが可能な手法であるが、もともと計算負荷が高いので、実用的にあまり多数の粒子の扱うことができない。
【0003】
ところで、砂や小麦粉のように我々が目にする実際の粒状体や粉体(以下、両者をまとめて「粉粒体」と呼ぶ)は、篩い分けによる粒度調整など特別な処理を施さない限り、一般的には様々な大きさの粒子が混在した状態で存在している(以下、これを「粒子径分布」がある状態と呼ぶ)。実はこの粒子径分布は、粉粒体の均質性や変形や流動といった力学的な性質を支配する大きな要因であり、粉粒体を扱う産業では粒径分離効率や粒度偏析による粉体層の不均質化および混合効率、輸送・充填の制御にはいつも問題となる。したがって、粒子径分布が粒子群全体の振る舞いに与える影響を正しく理解することは、粉粒体を扱うためには必要不可欠である。
【0004】
DEMは、前述したように粒子の大きさを考慮できる手法であるから、粒子径分布がもたらすマイクロメカニックスをDEMで調べたくなる気持ちはごく自然である。しかし、粒子径が1/nになると粒子1個の体積が(1/n)になり、もとのサイズの粒子1個分の体積を充填するためにn個の粒子が必要となる(厳密には空隙が生じるため、n個よりは少なくなるがオーダーは変わらない)ため、実は、計算機のメモリ量や計算時間の制約上、あまり大きな粒子径分布は扱えない。例えば自然土には数センチの砂利から数ミクロンの粘土粒子まで粒子径は約5桁程度に渡って分布している。すると、全てのサイズで同程度の体積を占めている場合、最大粒径の粒子数を1個にしても、全体では(10)個オーダーの粒子数となってしまう。
【0005】
また、DEMで粒子径分布を扱う場合には、上述の粒子数の問題に加えて、粒子径の違いによる接触点数のアンバランスも問題となる。例えば、最大粒子と最小粒子の粒径比をr:1とした時、最大粒子の表面を最小粒子が埋め尽くす場合と、最小粒子の表面を最大粒子が埋め尽くす場合を考えると、表面を覆う粒子の個数はそれぞれ4(r+1)/1および4(r+1)/rとなる。すなわち、接触点数のアンバランスは最大でr:1のオーダーになる。個々の粒子の接触点数のアンバランスは、粒子ごとの接触力の計算回数と接触の総和計算量のアンバランスにつながり、並列計算には大きな障壁となる。つまり、DEMでは、均一粒径の場合と違って粒径比が大きくなると、単純に粒径の幾何学的な情報だけからでも粒子数が増加し接触点数のアンバランスが生じることが見込まれ、結果としてかなり計算負荷が高くなることが分かる。このことに加えて、実際のDEMのプログラム内部の処理においても、粒子径分布が存在すると、接触判定の対象となる接触候補の絞り込み検索と接触候補ペアを格納するための処理が、均一粒径の場合と比較して計算負荷が著しく高くなってしまう。
【0006】
この粒子径分布がある問題に対して、接触候補ペアの抽出と格納に関連する処理を高速化するためのDEMプログラミングの手法は幾つか提案されてきている(例えば特許文献1)。
【0007】
一方、最近ではCPUと比べて価格に対する演算性能の比が格段に大きいGPU(Graphics Processing Unit)を用いた数値シミュレーションの高速化が盛んに行われている。これに伴い、粒子系シミュレーションについても、高価なスーパーコンピュータを用いたベクトル化処理よりも、ベクトル演算と同等の超並列演算が可能で安価なGPUに対する高速化アルゴリズムが提案されてきている(例えば特許文献2)。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2007−286514号公報
【特許文献2】特開2009−69930号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかし、特許文献1など従来のDEM高速化手法は、まずセルに粒子を格納してからセルサイズやセル探索範囲を最適化する手法であって、並列化やベクトル化による大規模高速化をことさら意識したものではない。具体的な例を挙げると、粒子番号のループで粒子をセルに格納する処理をベクトル化のようなSIMD(Single Instruction Multiple Data)型並列処理で行うと、2つ以上の粒子が同一セルに格納されるときにはメモリ書き込み競合が生じるために非常に都合が悪い。このメモリ書き込み競合問題は、単一粒径成分の場合でも一つのセルに複数の粒子が入ってしまう場合に発生するが、粒子径分布がある場合は一つのセルに入る粒子数自体に大きな分布ができるので、並列化やベクトル化によるプログラムの高速化の際には、さらに厄介な大きな問題となる。
【0010】
また、特許文献2などのGPU高速化アルゴリズムでは、接触候補粒子ペアの検出処理においては、CPUベースのプログラムと同様にセルに粒子を格納してからセルを探索する方法が用いられている。しかし上述したように、GPUでも複数粒子が同一セルに格納される場合には、やはりメモリ書き込み競合が生じるため、この問題を回避するために、幾つかの対策が提案されている。一つは、粒子の格納と確認操作を複数回繰り返す方法で、他方は、コンパイラ付属の排他処理関数(Atomic関数)を用いる方法である。また、粒子間接触力の計算ルーチンにおいてもメモリ書き込み競合を防ぐために、粒子i‐j間の接触力計算を粒子iと粒子jそれぞれに対して同じ計算を二度行うことで問題を回避する工夫がなされている。
【0011】
しかし、前述のように、粒子径分布があると、セルによって格納される粒子数に大きな偏りが生じやすく、また大粒子に対する接触粒子数は小粒子に対するそれと比べて非常に多いために、ロードバランスを大きく損ないやすい。例えば、これらの方法を用いた三次元DEMで二成分系粒子群に対するGPU計算を行うと、二成分の粒子径比が1:4になるだけで単一成分の場合と比べて計算時間は3倍近くにもなることが報告されている。
【0012】
そして、粒子径分布を考慮した粉粒体のDEMシミュレーションを行う場合、粒子径を均一とした同じ粒子数の場合に比べて、接触力を考慮すべき近傍粒子の数が急激に増大するので、DEM計算を実現するために確保しなければならないメモリ使用量が増大するという問題があった。
【0013】
GPU演算は、CPU演算のようにメモリをハードウェア的に増設することができないため、あくまでグラフィックカードに搭載された限られたメモリ容量内でしか処理できない。勿論、GPUメモリの不足分を転送通信によってCPUメモリに頼る方法も考えられるが、GPUメモリとCPUメモリ間の転送速度は非常に遅いため、せっかくのGPUの高い計算効率が全く生かされず推奨できない。このように、GPUをDEM計算に使用する場合、現状のGPUのメモリ容量が最大でも4GB程度であるので、このメモリ使用量の問題が、GPUを粒子シミュレーションに適用することの制約となっている。そして、この問題は、GPUだけでなく、GPUと同様の共有メモリ型のSIMD(Single Instruction Multiple Data)型並列処理を行うハードウェア(例えばベクトルプロセッサ)(以下、「共有メモリ型並列計算機」という)にも該当する問題である。
【0014】
本発明は、上記課題を解決するためになされたものであり、粒子径分布を有する粉粒体のDEM(離散要素法)計算を共有メモリ型並列計算機により実行する際に、メモリ使用量を抑制することができる粒子シミュレーション装置及び粒子シミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【0015】
上記課題を解決するため、本発明に係る粒子シミュレーション装置は、作業空間内で粒子径分布を有する粒子群について、他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、粒子群の各粒子ごとの位置情報及び速度情報を含む粒子情報を入力する入力手段と、粒子情報を保持する粒子情報保持手段と、粒子のそれぞれについて、位置情報に応じた順序で特定する特定情報を付与する付与手段と、粒子の中から前記特定情報の昇順で着目粒子を順次選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との接触候補ペアを選択する接触候補選択手段と、選択候補選択手段により選択された接触候補ペアのそれぞれについて、該接触候補ペアの2つの粒子の間の接触力を、これらの粒子の位置情報及び速度情報に基づき算出し、算出した接触力の情報をこの接触力に対応する接触候補ペアの順番に応じて接触力テーブルに格納する接触力算出手段と、粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より大きい粒子との接触力を前記接触力テーブルから参照するための参照情報を含む接触力参照表を作成する接触力参照表作成手段と、粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より小さい粒子の数を示す接触候補数の積算値である積算接触候補数を算出する積算接触候補数算出手段と、粒子のそれぞれについて、当該粒子より粒子径の大きい粒子との接触力を接触力参照表の参照情報を用いて接触力テーブルから抽出し、当該粒子より粒子径の小さい粒子との接触力を、積算接触候補数を用いて接触力テーブルの格納位置を特定して抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算する接触力総和演算手段と、接触力総和演算手段により計算された粒子ごとの接触力に基づいて、粒子の新たな位置情報及び速度情報を算出する算出手段と、算出手段により算出された新たな位置情報及び速度情報を用いて、粒子情報保持手段に保持される粒子情報を更新する粒子情報更新手段と、を備えることを特徴とする。
【0016】
同様に、上記課題を解決するため、本発明に係る粒子シミュレーション方法は、作業空間内で粒子径分布を有する粒子群について、他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置における粒子シミュレーション方法であって、粒子群の各粒子ごとの位置情報及び速度情報を含む粒子情報を入力し、この粒子情報を粒子情報保持手段に保持する入力ステップと、粒子のそれぞれについて、位置情報に応じた順序で特定する特定情報を付与する付与ステップと、粒子の中から特定情報の昇順で着目粒子を順次選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との接触候補ペアを選択する接触候補選択ステップと、接触候補選択ステップにおいて選択された接触候補ペアのそれぞれについて、該接触候補ペアの2つの粒子の間の接触力を、これらの粒子の位置情報及び速度情報に基づき算出し、算出した接触力の情報をこの接触力に対応する接触候補ペアの順番に応じて接触力テーブルに格納する接触力算出ステップと、粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より大きい粒子との接触力を接触力テーブルから参照するための参照情報を含む接触力参照表を作成する接触力参照表作成ステップと、粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より小さい粒子の数を示す接触候補数の積算値である積算接触候補数を算出する積算接触候補数算出ステップと、粒子のそれぞれについて、当該粒子より粒子径の大きい粒子との接触力を接触力参照表の参照情報を用いて接触力テーブルから抽出し、当該粒子より粒子径の小さい粒子との接触力を、積算接触候補数を用いて接触力テーブルの格納位置を特定して抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算する接触力総和演算ステップと、接触力総和演算ステップにおいて計算された粒子ごとの接触力に基づいて、粒子の新たな位置情報及び速度情報を算出する算出ステップと、算出ステップにおいて算出された新たな位置情報及び速度情報を用いて、粒子情報保持手段に保持される粒子情報を更新する粒子情報更新ステップと、を含むことを特徴とする。
【0017】
このような粒子シミュレーション装置及び粒子シミュレーション方法によれば、作業空間内の粒子のそれぞれについて、当該粒子の近傍に位置する、この粒子と接触する可能性の高い他の粒子のうち当該粒子の粒子径より小さい粒子については、粒子の数を示す積算接触候補数のみを保持しておき、この積算接触候補数を利用して接触力テーブルの格納位置を特定して当該粒子と他の粒子との接触力を抽出する。これにより、接触力参照表には、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より小さい粒子に関する情報を含める必要がなく、当該粒子の粒子径より大きい粒子に関する情報のみを保持すればよくなる。粒子径分布を有する粒子群をシミュレーション対象とする場合、自分より粒子径の小さい粒子まで接触を考慮すると、同時に接触可能な粒子の数が増大するため、予め接触力参照表のために確保すべきメモリ領域を多くしなければならない。これに対し、本発明の上記構成により、自分より粒子径の大きい粒子との接触のみを考慮すればよく、接触を考慮する粒子数を減らすことができ、接触力参照表を作成するために予め割り当てるメモリ領域を少なくすることが可能となり、この結果、メモリ使用量を抑制することができる。このようにメモリ使用量が抑制されることにより、GPUなどの共有メモリ型並列計算機を利用して粒子シミュレーションを実行することが可能となる。
【0018】
また、粒子シミュレーション装置では、作業空間が複数のセルに分割され、各セルにはセル番号が付されており、粒子情報には、位置情報に基づき特定される、当該粒子が配置されるセルのセル番号が含まれており、付与手段が、粒子のそれぞれについて、セル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した特定情報を付与することが好適である。
【0019】
同様に、粒子シミュレーション方法では、作業空間が複数のセルに分割され、各セルにはセル番号が付されており、粒子情報には、位置情報に基づき特定される、当該粒子が配置されるセルのセル番号が含まれており、付与ステップが、前記粒子のそれぞれについて、セル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した特定情報を付与することが好適である。
【0020】
この構成により、各粒子にセル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した特定情報が付与されるので、各粒子がセル番号順、さらには同一セル内では粒子径順にソーティングされる。このため、接触力参照表を作成する際に、特定情報に基づき粒子径が小さい粒子を容易に認識することができ、粒子径が小さい粒子については接触力参照表にいれるか否かの判定を行う必要がなくなる。この結果、接触力参照表の作成において計算効率を向上させることができる。
【0021】
また、粒子シミュレーション装置では、接触候補選択手段が、粒子郡の中から特定情報の昇順で着目粒子を選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との組と、この組に昇順で付される接触候補番号とからなる接触候補ペア情報を、作業空間内の全粒子について含む接触候補リストを作成し、接触力算出手段が、接触候補リストに含まれる接触候補ペア情報のそれぞれについて、該接触候補ペア情報に関する2つの粒子の間の接触力を、当該粒子の前記位置情報及び速度情報に基づき算出し、算出した接触力と接触候補番号とを関連付けた接触力情報を接触力テーブルに格納し、接触力参照表作成手段が、粒子のそれぞれについて、当該粒子と接触している可能性のある、当該粒子より粒子径の大きい他の粒子との接触力を前記接触力テーブルから参照するための参照情報として、該他の粒子及び当該粒子に関する接触候補番号を、該他の粒子及び当該粒子と関連付けて保持する接触力参照表を作成し、積算接触候補数算出手段が、粒子のそれぞれについて、当該粒子と接触している可能性のある、当該粒子より粒子径の小さい他の粒子の数を示す接触候補数を前記特定情報順で積算した値である積算接触候補数s_jgi[i](iは当該粒子の特定情報を示す)を算出し、接触力総和演算手段が、粒子のそれぞれについて、接触力参照表の参照情報を用いて接触力を接触力テーブルから抽出し、また、積算接触候補数s_jgi[i]を用いて接触候補番号がs_jgi[i-1]〜s_jgi[i]‐1の接触力を接触力テーブルから抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算することが好適である。
【発明の効果】
【0022】
本発明に係る粒子シミュレーション装置及び粒子シミュレーション方法によれば、粒子径分布を有する粉粒体のDEM(離散要素法)計算を共有メモリ型並列計算機により実行する際に、メモリ使用量を抑制することができる。
【図面の簡単な説明】
【0023】
【図1】本発明の一実施形態に係る粒子シミュレーション装置の機能ブロック図である。
【図2】本実施形態で粒子モデルに適用するVoigtモデルを示す概略図である。
【図3】本実施形態における作業領域を示す図である。
【図4】粒子番号変更の流れを示す図である。
【図5】作業領域における粒子番号を変更する処理と、各セルに粒子番号の最大値及び最小値を記憶する処理を示す図である。
【図6】近傍粒子表の構成の一例を示す図である。
【図7】接触候補リストの構成の一例を示す図である。
【図8】現在の接触候補リストのペア粒子について1ステップ前にペアであったか調べる処理を示す図である。
【図9】接触力参照表の構成の一例を示す図である。
【図10】接触力参照表及び積算接触候補数と、接触力ボックスとの対応関係を示す図である。
【図11】本実施形態の粒子シミュレーション装置において実行される処理を示すフローチャートである。
【図12】粒子モデルの最大粒子径と最小粒子径との比を変化させた場合の本実施形態及び比較例のメモリ使用量を示し図である。
【発明を実施するための形態】
【0024】
以下、図面を参照しながら本発明の実施形態を詳細に説明する。なお、図面の説明において同一又は同等の要素には同一の符号を付し、重複する説明を省略する。
【0025】
図1は、本発明の一実施形態に係る粒子シミュレーション装置10の機能ブロック図である。図1に示すように、粒子シミュレーション装置10は、粒子情報保持部(入力手段、粒子情報保持手段)11、粒子情報取得部12、接触候補リスト更新判定部13、粒子番号変更部(付与手段)14、近傍粒子表作成部15、接触候補リスト作成部(接触候補粒子選択手段、積算接触候補数算出手段)16、接触力参照表作成部(接触力参照表作成手段)17、接触判定部(接触力算出手段)18、接触力計算部(接触力総和演算手段)19、粒子情報更新部(算出手段、粒子情報更新手段)20を備えている。
【0026】
粒子シミュレーション装置10は、物理的には、GPU(Graphics Processing Unit)、主記憶装置であるRAM(Random AccessMemory)及びROM(ReadOnly Memory)、ハードディスク装置等の補助記憶装置、入力デバイスである入力キー等の入力装置、ディスプレイ等の出力装置、ネットワークカード等のデータ送受信デバイスである通信モジュールなどを有するコンピュータとして構成されている。図1を参照して以下に説明する粒子シミュレーション装置10の各機能は、GPU、RAM等のハードウェア上に所定のコンピュータソフトウェアを読み込ませることにより、GPUの制御のもとで入力装置、出力装置、通信モジュールを動作させるとともに、RAMや補助記憶装置におけるデータの読み出し及び書き込みを行うことで実現される。
【0027】
ここで、まず本実施形態で適用する粒子モデルについて説明する。本実施形態の粒子シミュレーション装置10が対象とするのは、粒子径分布を有する粉粒体群のDEMシミュレーションである。つまり、様々な大きさの粒子径をもつ粒子が混在した状態の粒子モデルが適用される。
【0028】
そして、このような粒子モデルにおいて、各粒子間に発生する粒子間接触力の法線方向および接線方向成分F,Fは、図2に示すVoigtモデル71を用いて以下の式により表される。
【数1】



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



ここでm,mは、それぞれ粒子i,jの質量を表す。添字qは、法線方向成分の場合はq=nとなり、接線方向成分の場合にはq=tとなる。
【0029】
したがって、DEMで扱う並進および重心を中心とする回転の運動方程式は以下の式で表される。
【数3】



ここで、uとωは粒子の速度および角速度、mとIは粒子の質量および慣性モーメント、Rは粒子中心から接触点へ向かう位置ベクトルであり、添字pは、粒子iの場合はp=iとなり、粒子jの場合はp=jとなる。また、(5)式の右辺第二項は転がり摩擦力を表し、μは転がり摩擦係数、bは接触面幅である。(1)、(2)式のVoigtモデル71は、後述する接触判定部18で粒子間接触力を算出するのに用いられ、また(4)、(5)式の運動方程式は、粒子情報更新部20で粒子の座標を算出するのに用いられる。
【0030】
また、本実施形態において粒子が運動する領域である作業領域51は、図3に示すように、一辺の大きさがcsizeの立方体セルで区分される。セルサイズcsizeは、パラメータφ (0≦φ≦ 1) を用いて以下の式で与える。
csize=2.0{(1.0−φ)rmax+φrmin)}(1.0+α) (6)
ここで、rmaxは作業領域に配置される粒子モデルの最大粒子径であり、rminは最小粒子径であり、αは更新頻度を調整するパラメータであり例えばα=0.2である。また、作業領域51内の各セルにはセル番号cell_idが付されている。セル番号は、図3に示すように一次元であり、例えば次式のように表される。
cell_id=i.x+id.x×i.y+id.x×id.y×i.z (7)
i.m={0, 1, 2,…, id.m-1} (m=x, y, z)
ここでcell_idはセル番号であり、i.mはm方向のセル位置であり、id.mはm方向のセル数である。つまり、粒子シミュレーション装置10は、シミュレーション条件として粒子の最大粒子径rmax、最小粒子径rmin、パラメータφ,αが設定されると、作業領域51のセルサイズcsizeを自動的に算出して設定し、さらに画定したセルにセル番号を割り当てることができる。
【0031】
粒子情報保持部11は、作業空間51内の複数の粒子のそれぞれについて粒子情報を保持している。粒子情報は、座標(位置情報)、並進速度(速度情報)、回転速度(速度情報)、粒子半径、質量、粒子番号、セル番号を含む。座標とは、図3に示す三次元の作業空間51における三次元座標(pos.x,pos.y,pos.z)である。粒子番号は各粒子を識別するための番号である。セル番号は当該粒子が所属するセルのセル番号である。なお、シミュレーションを開始する際には、粒子情報保持部11は、シミュレーションに適用する粒子径分布に応じて各粒子の粒子半径、質量を設定し、座標、速度、粒子番号を各粒子にランダムに割り当てる。セル番号には、粒子ごとにランダムに割り当てられた座標に基づき特定される、この粒子が属するセルの番号を付与する。そして、このように生成した各情報を初期状態の粒子情報として入力し保持する。また、シミュレーションの実行中には、後述する粒子情報更新部20により粒子情報の各情報が更新されると、粒子情報保持部11は、保持している粒子情報を、粒子情報更新部20により更新された新しいものに置き換える。
【0032】
粒子情報取得部12は、粒子情報保持部11から粒子情報を取得する。粒子情報取得部12は、粒子シミュレーションの開始時に粒子情報保持部11から予め設定されている初期状態の粒子情報を取得し、シミュレーション動作中には、粒子情報保持部11が更新される度に新たな粒子情報を粒子情報保持部11から取得する。粒子情報取得部12は、取得した粒子情報を接触候補リスト更新判定部13に送信する。
【0033】
接触候補リスト更新判定部13は、後述する接触候補リスト53を更新するか否かを判定する。更新判定は、例えば、粒子半径をrとして、粒子の積算移動距離がrαよりも大きい粒子が存在したときに更新する。ここでαは更新頻度を調整するパラメータであり、例えばα=0.2である。また、粒子の積算移動距離は、例えば、粒子情報取得部12が新しい粒子情報を粒子情報保持部11から取得する度に、1ステップ前の粒子情報との座標データの差分からこの直近の1ステップにおける粒子の移動距離を算出し、これを粒子ごとに積算して求める。接触候補リスト更新判定部13は、1ステップ前の粒子情報と、パラメータαと、粒子の積算移動距離とを記憶しており、粒子情報取得部12から新たな粒子情報を受信すると、積算移動距離を更新し、この更新された積算移動距離がrαより大きい粒子の有無を判定する。そして、積算移動距離が所定値以上の粒子が有る場合に、接触候補リストを更新するものと判定し、新たな粒子情報を粒子番号変更部14に送信する。なお、粒子移動距離の積算値は、接触候補リスト53の更新が行われるたびに初期化される。また、更新された積算移動距離がrαより大きい粒子が無い場合には、接触候補リストを更新しないものと判定し、粒子番号変更部14には粒子情報を送信せず、接触判定部18に新たな粒子情報を送信する。
【0034】
粒子番号変更部14は、作業領域51内の各粒子のそれぞれについて、セル番号に応じた順序で特定し(すなわち位置情報に応じた順序で特定し)、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した粒子情報(特定情報)を付与する。言い換えると、粒子番号変更部14は、作業領域51内の各粒子が所属するセル及びその粒子径に基づき、各粒子の粒子番号を変更して、粒子番号をソーティングする。
【0035】
粒子番号変更部14は、接触候補リスト更新判定部13から粒子情報を受信すると、図4に示すように、各粒子の粒子番号に、この粒子が所属するセルのセル番号と、この粒子の粒子径とを関連付けて1組の情報セットとし、これらの情報セットを粒子番号順に記憶する(図4(a))。次に、これらの情報セットをセル番号が昇順になるように並べ換え(図4(b))、セル番号順に粒子番号を付け直す(図4(c))。続いて、同一のセル番号の粒子群ごとに粒子径を比較し、これらの粒子群の中で粒子径の大きい順に並べ換え(図4(d))、粒子径順に粒子番号を付け直す(図4(e))。
【0036】
この粒子番号を変更する処理により、例えば図5(a)に示すように作業空間51に配置された粒子の粒子番号が、図5(b)に示すように、セル番号及び粒子径に沿った粒子番号に変更される。粒子番号変更部14は、粒子番号の変更が反映された粒子情報を近傍粒子表作成部15に送信する。
【0037】
近傍粒子表作成部15は、作業空間51内の個々の粒子について、この粒子の近傍に位置する近傍粒子の情報を含む近傍粒子表52を作成する。近傍粒子表作成部15は、着目粒子の所属するセル、およびこのセルに隣接するセルや隣接セルのさらに外側に隣接する近傍セルに存在する粒子のうち、自身より粒子径が大きい粒子、或いは粒子径が同じ場合は初期配置時の粒子番号が自身より大きい粒子で、粒子間距離がある値以下の粒子を「近傍粒子」とする。以下に詳細を説明する。
【0038】
近傍粒子表作成部15は、近傍粒子表52を作成するためのメモリ領域を予め確保している。確保するメモリ領域は、各粒子と接触する可能性がある近傍粒子の個数を考慮して、各粒子の近傍粒子表ごとに同一の大きさである。
【0039】
近傍粒子表作成部15は、粒子番号変更部14から粒子情報を受信すると、同じセル番号をもつ粒子の中で、セル内の粒子の番号のうち、最小値Pnum_in_cellminと最大値Pnum_in_cellmaxをセルに記憶させる(図5(c))。図5(c)では、各セルの左上に最大粒子番号、右下に最小粒子番号が記憶されている。つまり、セルcell_idごとに、このセルに含まれる粒子の番号の最小値Pnum_in_cellmin[cell_id]及び最大値Pnum_in_cellmax[cell_id]の情報を格納する配列のみを保持しておく。これにより、各セル番号cell_idのセルには、Pnum_in_cellmin[cell_id]番からPnum_in_cellmax[cell_id]番までの粒子が粒子径の大きい順に所属していることがわかる。
【0040】
番号cell_idのセルに隣接するセルの番号nei_cell_idは次式で表される。
nei_cell_id[n]= cell_id + con[n] (8)
ここで、conはid.xとid.yによって決まる定数である。セル番号で粒子番号をソートしてあるため、各隣接セルにはPnum_in_cellmin[nei_cell_id]からPnum_in_cellmax[nei_cell_id]までの番号の粒子が連続して存在することがわかる。
【0041】
次に、近傍粒子表作成部15は、各粒子ごとに、図6に示すような近傍粒子を格納する箱(配列)nei_pn[i][box_id]を用意し、粒子iの周囲の探索範囲(定義は後述する)に含まれる粒子のうち
(a)粒子iとの粒子間距離がdis_limよりも小さく、
(b)粒子iの径よりも大きく、
(c)粒子iの径と同じ場合は、初期配置時の粒子番号(i=p_id)が粒子iよりも大きい
という条件を満たす粒子を番号(box_id)が小さい方の箱から詰めて格納させる。ここで、dis_lim = (r+ r)(1.0+α)であり、r,rは近傍粒子ペアi,jの粒子半径である。αは接触候補の更新回数を調整するパラメータであり、例えばα=0.2である。r,rは粒子番号変更部14から受信した粒子情報に含まれ、αは近傍粒子表作成部15が予め保持している値であり、近傍粒子表作成部15は、これらのデータを用いてdis_limを算出する。
【0042】
上記条件(a)〜(c)を満たす粒子を、粒子iに対する「近傍粒子」と呼ぶ。図6に示す一連の箱の集合を、作業空間51内の全ての粒子iについて用意したものを、本実施形態では近傍粒子表52という。近傍粒子表52は、粒子i及びこの粒子iの近傍粒子の数box_idに関する二次元配列nei_pn[i][box_id]である。
【0043】
この方法によって、着目粒子iについて、この粒子i以上の粒子径を持った粒子jのみが近傍粒子表52に記憶されるため、近傍粒子表52に必要なメモリ使用量の増加を抑制することができる。
【0044】
ここで、近傍粒子表作成部15は、粒子iの近傍粒子を決定するために、粒子iから(rmax+ri)(1.0+α)の距離にある粒子を探索する必要がある。粒子iが属するセルに隣接する26個のセルのほかに、粒子モデルの最大粒子の半径rmaxに応じてさらに外側のセルまで探索範囲を広げることとなる。
【0045】
近傍粒子表作成部15が探索する近傍セルの範囲は、上記(6)式で算出されたセルサイズcsizeと、作業領域内の最大粒子の粒子径を示す最大粒子半径rmaxと、着目粒子半径rから次式によって求められる。
nei_cell=2・ceil{2.0(rmax+ri)(1.0+α)/csize}−1 (9)
ceilは小数点以下を切り上げる関数であり、近傍粒子表作成部15に予め保持されている。nei_cellは粒子iが所属するセルからx、y、z方向それぞれに対して+−方向に探索するセル数を表す。
【0046】
これにより、セルサイズが小さくなるにつれて探索するセル数が急激に増えて計算負荷が増加する懸念が生じる。しかし、隣接する26個のセルより外側のセルに対しては、粒子径でソートした粒子の並び順を利用して近傍粒子の探索を効率化することができる。つまり、各セルにはPnum_in_cellmin [cell id]番からPnum_in_cellmax [cell id]番までの粒子が粒子径の大きい順に所属しており、各セル内の粒子が近傍粒子であるか否かを調べる際も粒子径の大きい順に調べて行くことになる。この時、粒子iが所属するセルとその近傍セルの位置関係から上記の(a)の条件を満たさない粒子径が求まるのでPnum_in_cellmax [cell id]番までの全ての粒子間距離を調べる必要はなく、(a)の条件を満たさない粒子径の粒子番号になったら探索を中止することができる。ここで、粒子iに対して(a)の条件を満たさない粒子径rj とは以下の式を満足するもののことである。
2 ceil{2.0(rj + ri )(1.0 + α)/csize}−1 < dis cell (10)
dis cell は粒子iの所属するセルから粒子jの所属するセルまでのセル数を表し、x、y、z方向のセル数で最小のものを表す。
【0047】
さらに、近傍粒子表作成部15は、粒子iに対する近傍粒子数n_jli[i]と,上記条件(a)を満たすが(b)及び(c)を満たしていない粒子数n_jgi[i]を、それぞれ一次元配列に記憶させておく。
【0048】
図6の例では、例えば4番の粒子(i=4)に対してセルを検索した結果5,6,7,8番の粒子が(a)の条件を満たし,そのうちの近傍粒子が7,8番で、5,6番の粒子は(b),(c)の条件を満たさない場合、
nei_pn[4][0]=7
nei_pn[4][1]=8
n_jgi[4]=2
n_jli[4]=2
となる。
【0049】
このように、近傍粒子表作成部15は、粒子番号変更部14から粒子情報を受信すると、着目粒子iごとに、探索範囲nei_cellのセルを画定し、この探索範囲内に含まれる他の粒子のうち上記(a)〜(c)の条件を満たす粒子の粒子番号を近傍粒子表52の配列nei_pn[i][box_id]に格納する。さらに、近傍粒子数を配列n_jli[i]に格納し、上記条件(a)を満たすが(b)及び(c)を満たしていない粒子数、すなわち探索範囲に存在するものの粒子径が着目粒子より小さく、近傍粒子表52に格納されなかった粒子の数を配列n_jgi[i]に格納する。そして、これらnei_pn[i][box_id] 、n_jli[i]、n_jgi[i]の情報を、粒子情報と共に接触候補リスト作成部16に送信する。
【0050】
本実施形態では、近傍粒子表52には、着目粒子の粒子径以上の粒子のみを近傍粒子として保持している。複数の粒子径をもつ粒子群からなる多成分系では大粒子に対して接触候補になる小粒子の数が膨大になる可能性が有る。つまり、着目粒子より粒子径の小さい粒子とは同時に接触可能な数が非常に多くなる。このため、着目粒子より粒子径の小さい粒子まで近傍粒子に含むとすると、予め近傍粒子表のために用意する配列の数も最大値を考慮して大きくせざるを得ない。その場合、近傍粒子表52の配列に必要なメモリ量が膨大になり、GPUのグローバルメモリを食い潰す危険が有る。本実施形態では、自分より大きい粒子しか近傍粒子表52に格納しないので、近傍粒子表52のために用意される配列のメモリ使用量を抑制することができる。
【0051】
接触候補リスト作成部16は、作業空間51の全粒子の中から粒子番号(特定情報)の昇順で着目粒子を順次選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との接触候補ペアを選択する。言い換えると、接触候補リスト作成部16は、作業空間51の全粒子について、接触している可能性がある粒子ペアからなる接触候補リスト53を作成する。接触候補リスト53とは、具体的には、接触している可能性がある2つの粒子i,jの粒子番号を格納する一組の一次元配列list_i[Lnum]、list_j[Lnum]である。ここでLnumは接触粒子ペアごとに付される接触候補番号である。
【0052】
接触候補リスト作成部16は、近傍粒子表作成部15から情報(近傍粒子表52nei_pn[i][box_id] 、近傍粒子数n_jli[i] 、n_jgi[i]、及び粒子情報)を受信すると、まず、図7に示すように、n_jgiのプレフィックス和s_jgiを次式から求める。
【数4】



【0053】
このプレフィックス和s_jgi[i]は、粒子iの近傍粒子表52に格納されなかった粒子数、すなわち粒子iの周囲の所定の探索範囲(上記(9)式で画定される近傍のセル)に存在する粒子のうち粒子iの粒子径より小さい粒子の数n_jgi[i](接触候補数)の、粒子番号iまでの積算値をあらわす一次元配列であって、本実施形態では「積算接触候補数」とよぶ。言い換えると、積算接触候補数s_jgi[i]は、接触候補数n_jgi[i]を粒子番号i順で積算した値である。
【0054】
接触候補リスト作成部16は、次に、粒子番号の昇順で着目粒子iを順次選択し、各粒子iに対して、上記(9)式で画定された粒子iの周囲の探索範囲のセルを再度探索して、粒子iの周囲の探索範囲に含まれる粒子のうち
a)粒子iとの粒子間距離がdis_limよりも小さく
b)粒子iの径よりも小さく、
c)粒子iの径と同じ場合は、初期配置時の粒子番号が粒子iよりも小さい
という条件を満たす粒子jを抽出する。そして、これらの粒子i,jのペアに接触候補番号Lnumを昇順で付与し、それぞれの粒子の粒子番号を1次元配列list_i,list_jに格納して、接触候補リスト53を作成する。
【0055】
この条件a)〜c)を満たすこととは、上述の近傍粒子表に格納する近傍粒子を抽出する条件(a)を満たし(b),(c)を満たさないのと同等である。つまり近傍粒子表52に格納されない粒子ペア(例えばi=4の着目粒子の場合にはi=5,6の粒子とのペア)が接触候補ペアである。
【0056】
例えば、図7の例では、接触候補リスト53の内容は、以下の表1のようになる。
【表1】



つまり、接触候補リスト53は、作業空間51の全粒子について、接触している可能性がある粒子ペアlist_i,list_jに番号Lnumを付加した接触候補ペア情報を含むものである。
【0057】
接線方向の接触力を求める時に必要となるバネの伸縮量は積算値で与えられるため、前ステップで接触していて現ステップでも接触している場合は接触候補ペアリストを更新する時に接線方向バネの伸縮量を引き継ぐ必要が有る。そこで、次に、1ステップ前の接触候補ペアBlist_i,Blist_jを探索し、現在の接触候補ペアlist_i, list_jが1ステップ前にもペアであったか調べる。ペアであったら、図2に示した粒子モデルにおける法線ベクトルと接線方向のバネによる力(バネの伸縮量)を新しい候補リスト番号の配列に格納する。
【0058】
ここで、1ステップ前及び現在の各パラメータ及び配列の表記は以下のとおりである。
【表2】



【0059】
粒子番号i=list_i[Lnum], j=list_j[Lnum]の接触候補ペアが有るとき、このペア粒子の1ステップ前の粒子番号はBi=Bpn[i],Bj=Bpn[j]である。Bs_jgi[Bi−1]〜Bs_jgi[Bi]−1の範囲の接触候補Blist_j[BLnum]を調べBjと一致するか調べる。一致したときはそのリスト番号BLnumを用いて1ステップ前の法線ベクトルと接線方向の接触力BSpring[BLnum]を現在のリスト番号配列Spring[Lnum]に代入する。
【0060】
この処理について、図8を参照して、現在の接触候補リスト番号Lnum = 2におけるi=4,j=6番のペア粒子について1ステップ前にペアであったか調べる処理を説明する。
【0061】
まず、i=4,j=6の1ステップ前の粒子番号はBpn[]関数を使ってBi=2=Bpn[4],Bj=3=Bpn[6]と求まる。ここでBiとBjとの関係は、iとjの関係と同様に、接触候補リスト53の条件a)〜c)を必ず満たしている。なぜなら、条件a)〜c)はソートによって変化しない粒子径と初期配置時の粒子番号を使用しているためである。したがってBiに対する接触候補の粒子番号はリスト番号BLnumがBs_jgi[Bi−1]〜Bs_jgi[Bi]−1(この例では1〜1)の範囲のBlist_j[BLnum]に格納されている。そこで、このBLnumの範囲でBlist_j[BLnum] がBjと一致するか調べると、BLnum = 1のときにBlist_j[1]= 3でありBj = 3と一致する。
【0062】
したがって,現在のリスト番号Lnum=2の候補ペアは1ステップ前もペアであった事がわかり、そのリスト番号はBLnum=1である。そしてBLnum=1の法線ベクトルと接線方向の接触力の値をLnum=2の配列に代入する(Spring[2]=BSpring [1])ことで、1ステップ前の接触状態を引き継ぐ事ができる。
【0063】
このように、接触候補リスト作成部16は、近傍粒子表作成部15から各種情報報(近傍粒子表52nei_pn[i][box_id] 、近傍粒子数n_jli[i] 、n_jgi[i]、及び粒子情報)を受信すると、着目粒子iごとに、上記探索範囲内に含まれる他の粒子のうち上記a)〜c)の条件を満たす粒子jとのペアに番号Lnumを付与し、これらの粒子ペアi,jの粒子番号をそれぞれ接触候補リスト53の配列list_i[Lnum],list_j[Lnum]に格納する。また、着目粒子iの周辺セルに存在し、粒子iの粒子径より小さい粒子の数n_jgi[i]の積算値である積算接触候補数s_jgi[i]を算出する。さらに、現在の接触候補ペアlist_i[Lnum],list_j[Lnum]のうち、1ステップ前も接触候補だったペアを抽出し、これらのペアの1ステップ前の接触力をBSpring[BLnum]から引き継ぎ、Spring[Lnum]に格納する。そして、導出した接触候補リスト53list_i[Lnum],list_j[Lnum]と、近傍粒子表52nei_pn[i][box_id]とを接触力参照表作成部17に送信し、接触候補リスト53list_i[Lnum],list_j[Lnum]、積算接触候補数s_jgi[i]、1ステップ前から引き継いだ接触候補ペアの接触力Spring[Lnum]の情報を、粒子情報と共に接触判定部18に送信する。
【0064】
接触力参照表作成部17は、box_idから対応する候補リスト番号Lnumを算出する関数Ref[i][box_id]を作成する。本実施形態では、この関数をあらわす二次元配列Ref[i][box_id]を接触力参照表54と呼ぶ。接触力参照表54は、図9に示すように、接触候補リスト53のi粒子がj粒子から受ける接触力Fij[Lnum]を任意の一粒子i(図9ではi=4)ごとに参照先(Lnum)(参照情報)をまとめたものである。特に本実施形態では、接触力参照表54には、着目粒子iに関する近傍粒子表52に格納されている近傍粒子、すなわち着目粒子iより粒子径の大きい粒子との接触力の参照先(Lnum)のみが格納されている。ここで、接触力の参照先(Lnum)とは、後述する粒子間接触力の並進成分及び回転成分を保持する2種類の一次元配列Fijt[Lnum],Fijr[Lnum]及び後述する(13)式で用いるβ[Lnum]からなる接触力Fij[Lnum]から構成される接触力ボックスから、該当する接触力を取得するために用いる接触候補ペアリスト番号(接触候補番号)Lnumである。
【0065】
接触力参照表作成部17は、接触力参照表54を作成するためのメモリ領域を予め確保している。確保するメモリ領域は、各粒子と接触する可能性がある近傍粒子の個数を考慮して、各粒子の接触力参照表54ごとに同一の大きさである。
【0066】
接触力参照表作成部17は、具体的には、接触候補リスト作成部16より接触候補リスト53list_i[Lnum],list_j[Lnum]及び近傍粒子表52nei_pn[i][box_id]を受信すると、接触候補リスト53のLnum番目の粒子ペアである粒子i(=list_i[Lnum])及び粒子j(=list_j[Lnum])について、粒子jの近傍粒子表52を探索して粒子iが記憶されている近傍粒子表番号k(=box_id)を取得する。上述したように、接触候補ペアの粒子jは、粒子iより粒子径が小さいので、粒子iは粒子jの近傍粒子として粒子jの近傍粒子表52に記憶されているからである。そして、粒子jに関する接触力参照表54のk番目の配列Ref[j][k]に、粒子i,jの接触候補リスト番号Lnumを記憶させる。
【0067】
なお、上述の接触候補リスト作成部16による接触候補リスト53の作成処理、及び接触力参照表作成部17による接触力参照表54の作成処理は、以下のアルゴリズムで実施することができる。以下のアルゴリズム中の「接触候補ペア条件==true」とは、接触候補リスト53の条件a)〜c)を満たすことを意味するものである。
【数5】



【0068】
本実施形態では、接触力参照表54には、着目粒子の粒子径以上の粒子のみを保持している。このため、上述した近傍粒子表52と同じ理由により、接触力参照表54のために用意される配列のメモリ使用量を抑制することができる。
【0069】
接触力参照表作成部17は、導出した接触力参照表54Ref[i][box_id]を接触力計算部19に送信する。
【0070】
接触判定部18は、接触候補リスト53を参照して、全てのペア粒子について2つの粒子間の接触判定をすると共に、接触していると判定した場合には粒子間の接触力Fijr、Fijtを算出する。
【0071】
具体的には、接触判定部18は、接触候補リスト作成部16から接触候補リスト53list_i[Lnum],list_j[Lnum]、積算接触候補数s_jgi[i]、1ステップ前から引き継いだ接触候補ペアの接触力Spring[Lnum]、及び粒子情報を受信するか、または、接触候補リスト更新部13から粒子情報を受信すると、接触候補リスト53を走査して接触候補ペアの粒子i,jの接触判定を行う。接触判定は、例えば、粒子iと粒子jとの粒子間距離を計算し、粒子間距離が両粒子の粒子径の和r+r以下となる場合に両粒子が接触しているものと判定する。
【0072】
接触判定において、両粒子が接触していると判定した場合には、上述したVoigtモデルの(1),(2)式を用いて接触力Fn,Ftを計算する。なお、上記(2)式において現時点のバネによる接線方向接触力はKtxt=spring[]+ΔFtとして計算する。spring[]は、上述のように1ステップ前のバネによる接線方向接触力であり、ΔFtは、1ステップ前から現時点までに増加(もしくは減少)したバネによる接線方向接触力である。ΔFtは粒子間の相対速度に1ステップの時間Δtと接線方向成分のバネの弾性係数Ktを乗じて算出される。法線方向成分及び接線方向成分のバネ72の弾性係数Kn,Ktと、粒子間の反発係数eは、シミュレーション前に設定される所与の値であり、ダッシュポット73の粘性減衰係数μn,μtは、所与のKn,Kt,eと、粒子情報に含まれる質量mi,mjを用いて(3)式から導出する。粒子間の相対変位xn,xt及び相対速度vn,vtは、粒子情報に含まれる粒子座標(位置情報)、並進・回転速度(速度情報)に基づき算出する。Fn,Ftは、このように取得した各変数及びパラメータを用いて、(1)式及び(2)式に示す演算処理を行って算出する。そして、算出したFn,Ftを用いて、接触力の並進成分Fn +Ft と回転成分Ri ×Ft を計算し、これらの成分を、接触候補ペアリスト番号(接触候補番号)Lnumを要素としてもつ配列Fijt[Lnum],Fijr[Lnum](上述の接触力ボックスに含まれる配列)に記憶する。
【0073】
また、接触判定において、接触していないと判定された場合には、接触力は0なので、接触候補ペアリスト番号Lnumを要素としてもつ配列Fijt[Lnum],Fijr[Lnum](上述の接触力ボックス)には0を格納する。
【0074】
この接触判定部18による接触力算出処理は、以下のアルゴリズムで表現することができる。
【数6】



【0075】
このように、接触判定部18は、接触候補リスト53が作成/更新される毎に、接触候補ペアリスト番号Lnumに対応付けるように接触力ボックスを作成/更新する。また、接触候補リストが更新されない場合でも、粒子情報が更新された場合には、既存の接触候補リストを用いて、接触力ボックスを作成/更新する。
【0076】
接触判定および接触力は接触候補ペアリスト番号をスレッド化して計算する。GPUのグローバルメモリはアクセスパターンがスレッドの順である場合に最も良いアクセス効率が得られる。しかし、ペア粒子の番号はリスト番号に対してランダムであるため、粒子情報が格納されているグローバルメモリをランダムにアクセスしメモリアクセス速度が大きく低下する。一方、テクスチャメモリはキャッシュ機能が有るため、ランダムアクセスによるメモリアクセス速度の低下を抑えることができる。そこで、粒子情報を格納しているグローバルメモリ領域をテクスチャメモリから参照できるように設定した。さらに粒子には所属するセル番号順になるように番号を付けているために接触候補ペア同士の粒子番号が近く、加えて接触候補ペアリストは粒子番号iが小さい順にリスト内に並ぶように作られている。そのため、接触候補ペアリスト番号でスレッド化することでキャッシュヒット率が高くなり、粒子間の接触判定および接触力計算のルーチンが高速化される。
【0077】
接触判定部18は、作成/更新した接触力ボックスの情報を、積算接触候補数s_jgi[i]及び粒子情報と共に接触力計算部19に送信する。
【0078】
接触力計算部19は、接触力参照表54と積算接触候補数s_jgiを用いて各粒子iに働く全接触力の並進成分Ftall[i]、及び回転成分Frall[i]を計算する。接触力参照表54を接触力参照表作成部17から受信し、積算接触候補数を接触判定部18から受信すると、まず、着目粒子iごとに、接触力参照表54及び積算接触候補数s_jgiを用いて、この着目粒子と接触している粒子との接触力を、接触力ボックスから抽出する。具体的には、着目粒子iより粒子径が大きい粒子については、接触力参照表54に保持されるボックス番号(Lnum)(参照情報)に基づき、このボックス番号に対応する接触力Fij[Lnum]を接触力ボックスから抽出する。着目粒子iより粒子径が小さい粒子については、積算接触候補数s_jgi[]を用いて、接触力テーブルの格納位置を特定して接触力を抽出する。より詳細には、s_jgi[i-1]〜s_jgi[i]−1番のボックス番号(接触候補番号)に対応する接触力Fij[s_jgi[i-1]]〜Fij[s_jgi[i]−1]を接触力ボックスから抽出する。ここで接触力ボックスに格納されている接触力Fij[]とは、具体的には並進成分Fijt[Lnum]、回転成分Fijr[Lnum]、及び後述する(13)式で用いるβ[Lnum]の3つの1次元配列を一組として保持するものである。
【0079】
この接触力を接触力ボックスから抽出する処理を図10を参照して具体的に説明する。図10は、これまでの図6,9と同様に、着目粒子i=4の例である。接触力参照表54には、着目粒子(i=4)より粒子径が大きい粒子(i=7,8)との接触力の参照先情報が含まれている。i=4の着目粒子とi=7の粒子との接触力を格納する接触力ボックスのボックス番号(=接触候補リスト番号)Lnumは4であり、i=8の粒子との接触力を格納する接触力ボックスのボックス番号Lnumは7である。接触力計算部19は、接触力参照表54に含まれるこのボックス番号を用いて、接触力ボックスから、i=7の粒子とのとの接触力Fij[4],i=8の粒子との接触力Fij[7]を抽出する。
【0080】
また、図10に示すように、着目粒子i=4の積算接触候補数s_jgi[i]は、s_jgi[4]=3であり、着目粒子の粒子番号より1つ前の粒子(図10ではi=3)の積算接触候補数s_jgi[i-1]は、s_jgi[3]=3である。したがって、着目粒子i=4より粒子径が小さい粒子(この例ではi=5,6)については、s_jgi[i-1]〜s_jgi[i]−1番、すなわち1番及び2番のボックス番号に接触力Fij[1],Fij[2]を接触力ボックスから抽出する。
【0081】
次に、着目粒子iごとに、接触力ボックスから抽出した接触力Fij[](=Fijt[]、Fijr[]、β[])を用いて、粒子iに働く全接触力の並進成分Ftall[i]、及び回転成分Frall[i]を計算する。
【0082】
i番の粒子に働く全接触力(並進成分)Ftall[i]は、接触候補リスト番号がs_jgi[i-1]〜s_jgi[i]−1番の接触力はそのままの符号で足し合わせる。さらに、接触力参照表54(Ref)を用いて参照表番号0〜n_jli−1番の表から参照される接触力は逆符号にして足し合わせる。そして次式のように表される。
【数7】



【0083】
i番の粒子に働く全接触力(回転成分)Frall[i]も同様に足し合わせる。接触候補リスト番号がs_jgi[i-1]〜s_jgi[i]−1番の接触力はそのまま参照し、接触力参照表54(Ref)を用いて参照表番号0〜n_jli−1番の表から参照される接触力は逆符号にしてからβを掛けてから足し合わせ、次式のように表される。ここで、βはj粒子の中心から接触点までの距離をi粒子の中心から接触点までの距離で割った値である。
【数8】



【0084】
ここで、s_jgi[i-1]〜s_jgi[i]−1 番の接触力は粒子iが粒子jから受ける接触力であるのに対して、0〜n_jli−1番の接触力参照表54で参照される接触力は粒子iが粒子jに与える接触力である。そのため, 0〜n_jli−1番の接触力参照表54に対して、接触力の並進成分については符号を反対にしてから足し合わせ、接触力の回転成分についてはβ[box id]を掛けてから足し合わせる。この様に、粒子iが粒子jから受ける力を接触力参照表54Ref[i][box id]を使わずにs_jgi[i]を用いて直接、接触力の入った配列Fijt[],Fijr[]を参照することで、接触力参照表54のメモリ使用量を増加させずに、大粒子に対して膨大な数の接触候補ペアとなる小粒子から受ける接触力を足し合わせることが可能になった。
【0085】
コンピュータを用いた演算においては、具体的には粒子番号iをスレッド化し、box_idでループを回してFtall,Frallを求める。ここでFijへのメモリアクセスはランダムアクセスになるのでテクスチャメモリを使用する。上述のようにテクスチャメモリはキャッシュヒット率が高いので、グローバルメモリを直接アクセスするよりは高速に処理できる。なお接触力参照表54に関しては配列Ref[A][B]のBの要素サイズを16の倍数になるように配列宣言することで連続アクセスが可能となる。
【0086】
接触力計算部19は、上述のように算出した、各粒子iに働く全接触力の並進成分Ftall[i]、及び回転成分Frall[i]を、粒子情報と共に粒子情報更新部20に送信する。
【0087】
粒子情報更新部20は、接触力計算部19から各粒子iに働く全接触力の並進成分Ftall[i]、及び回転成分Frall[i]と、粒子情報とを受信すると、各粒子の位置、速度、接触力計算部19から受信した接触力に基づき、粒子の座標(位置情報)と、並進速度及び回転速度(速度情報)を算出し、これらの算出した座標、並進速度及び回転速度を用いて、粒子情報保持部11に保持されている粒子情報を更新する。具体的には、並進の運動方程式(上記(4)式)をleap-flog法を用いて解くことで新しい時刻の並進速度ならびに粒子座標を求める。さらに、回転の運動方程式(上記(5)式)も同様にleap-flog 法を用いて解き、ここで得られる回転速度を予測値とする。この予測される回転速度に対して転がり摩擦力を計算し、接触力による回転力と転がり摩擦力を考慮した回転の運動方程式を解くことにより新しい時刻の回転速度を得る。
【0088】
粒子情報更新部20は、算出した各粒子の位置座標、並進速度、回転速度を用いて、粒子情報の座標、並進速度、回転速度を更新し、更新した粒子情報を粒子情報保持部11に送信して粒子情報保持部11の粒子情報を最新のものに更新する。
【0089】
次に、図11を参照して、粒子シミュレーション装置10において実行される処理について説明すると共に、本実施形態に係る粒子シミュレーション方法について説明する。図11は本実施形態の粒子シミュレーション装置10において実行される処理を示すフローチャートである。粒子情報保持部11に入力され保持されている粒子情報が、粒子情報取得部12により粒子情報保持部11から取得される(S101:入力ステップ)。接触候補リスト更新判定部13により、接触候補リストの更新が必要か否かが判定される(S102)。更新判定は、例えば、粒子半径をrとして、粒子の積算移動距離がrαよりも大きい粒子が存在したときに更新する。ここでαは更新頻度を調整するパラメータであり、例えばα=0.2である。更新が必要と判定された場合にはステップS103に移行し、更新が不要と判定された場合にはステップS108に移行する。
【0090】
次に、粒子番号変更部14により粒子番号が変更される(S103:付与ステップ)。粒子番号変更部14は、粒子を所属するセル番号順に並べ、その順に粒子番号を付け直し、さらに、同じセル番号の粒子について粒子径順に並べ直し、その順に粒子番号を付け直す。続いて、近傍粒子表作成部15により、作業空間51内の個々の粒子について、この粒子の近傍に位置する近傍粒子の情報を含む近傍粒子表52が作成される(S104)。近傍粒子表52に近傍粒子として格納する条件は、上述の条件(a)〜(c)である。
【0091】
次に、接触候補リスト作成部16により、近傍粒子表52の条件(a)を満たすが(b)及び(c)を満たしていない粒子数n_jgi[i] のプレフィックス和である積算接触候補数s_jgi[i]が算出され(S105:積算接触候補数算出ステップ)、次いで、作業空間51の全粒子について、接触している可能性がある粒子ペアの情報を含む接触候補リスト53が作成される(S106:接触候補選択ステップ)。接触候補リスト53に格納する条件は、上述の条件a)〜c)である。接触力参照表作成部17により、接触力参照表54が作成される(S107:接触力参照表作成ステップ)。
【0092】
次に、接触判定部18により、接触候補リスト53を参照して、2つの粒子間の接触判定が行われ(S108)、接触していると判定された場合には粒子間の接触力Fijr、Fijtが(1),(2)式を用いて算出され、接触力ボックスの配列に格納される(S109:接触力算出ステップ)。また、粒子が接触していないと判定された場合には接触力Fijr、Fijtを0として、接触力ボックスの配列に格納される。
【0093】
接触力計算部19により、接触力参照表54及び積算接触候補数s_jgi[i]を参照して、着目粒子と接触する他の粒子が選択され、接触力ボックスから対応する配列Fijr、Fijtから接触力が取得される。そして(12),(13)式を用いて接触力が総和演算されて、各粒子に働く接触力Fr、Ftが計算される(S110:接触力総和演算ステップ)。粒子情報更新部20により、ステップS109において算出された接触力、現在の粒子情報に基づいて、各粒子の座標(位置情報)と、並進速度及び回転速度(速度情報)とが算出され、これらの算出した座標、並進速度及び回転速度を用いて、粒子情報保持部11に保持されている粒子情報が更新される(S111:粒子情報更新ステップ)。
【0094】
そして、粒子シミュレーションが終了したか否かが判定される(S112)。終了判定は、例えば所定時間が経過した場合にシミュレーションが終了したものと判定される。粒子シミュレーションが終了していないと判定された場合にはステップS101に戻り、次のステップに入る。粒子シミュレーションが終了したと判定された場合には処理を終了する。
【0095】
次に、図12を参照して、本実施形態の粒子シミュレーション装置10によるメモリ使用量について説明する。図12には、粒子モデルの最大粒子径と最小粒子径との比を変化させた場合の本実施形態(実線)及び比較例(破線)のメモリ使用量を示している。なお、粒子モデルの粒子数は1,000,000個とし、最大粒子径の粒子(最大粒子)と最小粒子径の粒子(最小粒子)とが混在する二成分系とした。比較例は、近傍粒子表52及び接触力参照表54に着目粒子iの粒子径より小さい粒子の情報も格納する点が本実施形態と異なるものである。図12の横軸は、「最大粒子径/最小粒子径」を表し、縦軸は「メモリ資料量(MB)」を表している。
【0096】
比較例の場合、近傍粒子表52nei_pn[i][box_id]及び接触力参照表54Ref[i][box_id]に必要なメモリ使用量は、1データに4バイト必要として、粒子数×最大接触候補粒子数×4byteとなる。ここで、最大接触候補粒子数は、近傍粒子表52及び接触力参照表54に格納する近傍粒子の最大個数であって、最大粒子の表面を最小粒子が埋め尽くす状態を考えればよく、この場合、
最大接触候補粒子数=4π(rmax+rmin)/πrmin (14)
となる。ここで、rmaxは最大粒子の粒子径であり、rminは最小粒子の粒子径である。つまり、比較例の場合、図12に示すように、最小粒子径に対して最大粒子径が大きくなるほど、つまり最大粒子径/最小粒子径が大きくなるほど、最大接触候補粒子数が増大し、この結果、メモリ使用量が増大する。例えば、粒子径比1:10の条件(最大粒子径/最小粒子径=10)では、一粒子当たりの接触候補粒子数は最大で500個程度に増加するため、必要なメモリ量で2GBにもなる。
【0097】
一方、本実施形態の場合、着目粒子より粒子径の小さい粒子は近傍粒子として考慮されず、近傍粒子表52及び接触力参照表54に格納されないので、最大接触候補粒子数を算出する上記(14)式は成り立たず、本実施形態の最大接触候補粒子数は、最大と最小の粒子径に依存しない。本実施形態では、最大接触候補粒子数は、上述した近傍粒子の判定条件(a)において粒子間距離の閾値であるdis_lim = (r+ r)(1.0+α)に含まれるパラメータαのみに依存し、粒子径分布には依存せず一定となる。α=0.2の場合は、最大接触候補粒子数は如何なる粒子径分布条件においても16も有れば十分であるので、ここでは最大接触候補粒子数を16としてメモリ使用量を計算した。その結果、図12に示すように、本実施形態のメモリ使用量は、粒子数×最大接触候補粒子数×4byte =1000000×16×4=64MBの一定値となった。
【0098】
本実施形態に係る粒子シミュレーション装置10及び粒子シミュレーション方法によれば、作業空間51内の粒子のそれぞれについて、当該粒子iの近傍に位置する、この粒子iと接触する可能性の高い他の粒子のうち当該粒子iの粒子径より小さい粒子については、粒子の数を示す積算接触候補数s_jgi[i]のみを保持しておく。そして、接触判定部18が、この積算接触候補数s_jgi[i]を利用して接触力テーブルの格納位置を特定して当該粒子と他の粒子との接触力を抽出する。これにより、接触力参照表54には、当該粒子iの近傍に位置する他の粒子のうち当該粒子iの粒子径より小さい粒子に関する情報を含める必要がなく、当該粒子の粒子径より大きい粒子に関する情報のみを保持すればよくなる。粒子径分布を有する粒子群をシミュレーション対象とする場合、自分より粒子径の小さい粒子まで接触を考慮すると、同時に接触可能な粒子の数が増大するため、予め接触力参照表54のために確保すべきメモリ領域を多くしなければならない。これに対し、上記構成により、自分より粒子径の大きい粒子との接触のみを考慮すればよく、接触を考慮する粒子数を減らすことができ、接触力参照表54を作成するために予め割り当てるメモリ領域を少なくすることが可能となり、この結果、メモリ使用量を抑制することができる。このようにメモリ使用量が抑制されることにより、GPUなどの共有メモリ型並列計算機を利用して粒子シミュレーションを実行することが可能となる。
【0099】
また、粒子番号変更部14が、作業空間51内の全粒子について、セル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した粒子番号を付与し、各粒子をセル番号順、さらには同一セル内では粒子径順にソーティングする。このため、接触力参照表を作成する際に、粒子番号に基づき粒子径が小さい粒子を容易に認識することができ、粒子径が小さい粒子については接触力参照表にいれるか否かの判定を行う必要がなくなる。この結果、接触力参照表の作成において計算効率を向上させることができる。
【0100】
以上、本発明について好適な実施形態を挙げて説明したが、本発明は上記実施形態に限定されるものではない。例えば、上記実施形態では、粒子番号変更部14は、(1)粒子を所属するセル番号順に並べ、さらに、(2)同じセル番号の粒子について粒子径順に並べ直す、というソーティングを行っているが、(1)粒子を所属するセル番号順に並べる処理のみを行うよう構成してもよい。
【0101】
また、上記実施形態では、本発明の適用対象としてGPUを挙げたが、GPUと同様の共有メモリ型のSIMD(Single Instruction Multiple Data)型並列処理を行うハードウェア(例えばベクトルプロセッサ)、すなわち共有メモリ型並列計算機にも適用可能である。
【符号の説明】
【0102】
10…粒子シミュレーション装置、11…粒子情報保持部(入力手段、粒子情報保持手段)、12…粒子情報取得部、13…接触候補リスト更新判定部、14…粒子番号変更部(付与手段)、15…近傍粒子表作成部、16…接触候補リスト作成部(接触候補選択手段、積算接触候補数算出手段)、17…接触力参照表作成部(接触力参照表作成手段)、18…接触判定部(接触力算出手段)、19…接触力計算部(接触力総和演算手段)、20…粒子情報更新部(算出手段、粒子情報更新手段)、51…作業領域、52…近傍粒子表、53…接触候補リスト、54…接触力参照表。

【特許請求の範囲】
【請求項1】
作業空間内で粒子径分布を有する粒子群について、他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置であって、
前記粒子群の各粒子ごとの位置情報及び速度情報を含む粒子情報を入力する入力手段と、
前記粒子情報を保持する粒子情報保持手段と、
前記粒子のそれぞれについて、前記位置情報に応じた順序で特定する特定情報を付与する付与手段と、
前記粒子の中から前記特定情報の昇順で着目粒子を順次選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との接触候補ペアを選択する接触候補選択手段と、
前記選択候補選択手段により選択された接触候補ペアのそれぞれについて、該接触候補ペアの2つの粒子の間の接触力を、これらの粒子の前記位置情報及び前記速度情報に基づき算出し、算出した接触力の情報をこの接触力に対応する接触候補ペアの順番に応じて接触力テーブルに格納する接触力算出手段と、
前記粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より大きい粒子との接触力を前記接触力テーブルから参照するための参照情報を含む接触力参照表を作成する接触力参照表作成手段と、
前記粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より小さい粒子の数を示す接触候補数の積算値である積算接触候補数を算出する積算接触候補数算出手段と、
前記粒子のそれぞれについて、当該粒子より粒子径の大きい粒子との接触力を前記接触力参照表の参照情報を用いて前記接触力テーブルから抽出し、当該粒子より粒子径の小さい粒子との接触力を、前記積算接触候補数を用いて前記接触力テーブルの格納位置を特定して抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算する接触力総和演算手段と、
前記接触力総和演算手段により計算された粒子ごとの接触力に基づいて、前記粒子の新たな位置情報及び速度情報を算出する算出手段と、
前記算出手段により算出された新たな位置情報及び速度情報を用いて、前記粒子情報保持手段に保持される粒子情報を更新する粒子情報更新手段と、
を備えることを特徴とする粒子シミュレーション装置。
【請求項2】
前記作業空間が複数のセルに分割され、各セルにはセル番号が付されており、
前記粒子情報には、前記位置情報に基づき特定される、当該粒子が配置されるセルのセル番号が含まれており、
前記付与手段が、前記粒子のそれぞれについて、前記セル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した特定情報を付与することを特徴とする、請求項1に記載の粒子シミュレーション装置。
【請求項3】
前記接触候補選択手段が、前記粒子郡の中から前記特定情報の昇順で着目粒子を選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との組と、この組に昇順で付される接触候補番号とからなる接触候補ペア情報を、前記作業空間内の全粒子について含む接触候補リストを作成し、
前記接触力算出手段が、前記接触候補リストに含まれる前記接触候補ペア情報のそれぞれについて、該接触候補ペア情報に関する2つの粒子の間の接触力を、当該粒子の前記位置情報及び前記速度情報に基づき算出し、算出した接触力と前記接触候補番号とを関連付けた接触力情報を接触力テーブルに格納し、
前記接触力参照表作成手段が、前記粒子のそれぞれについて、当該粒子と接触している可能性のある、当該粒子より粒子径の大きい他の粒子との接触力を前記接触力テーブルから参照するための参照情報として、該他の粒子及び当該粒子に関する前記接触候補番号を、該他の粒子及び当該粒子と関連付けて保持する接触力参照表を作成し、
前記積算接触候補数算出手段が、前記粒子のそれぞれについて、当該粒子と接触している可能性のある、当該粒子より粒子径の小さい他の粒子の数を示す接触候補数を前記特定情報順で積算した値である積算接触候補数s_jgi[i](iは当該粒子の特定情報を示す)を算出し、
前記接触力総和演算手段が、前記粒子のそれぞれについて、前記接触力参照表の前記参照情報を用いて接触力を前記接触力テーブルから抽出し、また、前記積算接触候補数s_jgi[i]を用いて前記接触候補番号がs_jgi[i-1]〜s_jgi[i]‐1の接触力を前記接触力テーブルから抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算する、
ことを特徴とする請求項2に記載の粒子シミュレーション装置。
【請求項4】
作業空間内で粒子径分布を有する粒子群について、他の粒子との接触力に基づく位置・速度を算出し、粒子の挙動をシミュレーションする粒子シミュレーション装置における粒子シミュレーション方法であって、
前記粒子群の各粒子ごとの位置情報及び速度情報を含む粒子情報を入力し、この粒子情報を粒子情報保持手段に保持する入力ステップと、
前記粒子のそれぞれについて、前記位置情報に応じた順序で特定する特定情報を付与する付与ステップと、
前記粒子の中から前記特定情報の昇順で着目粒子を順次選択し、該着目粒子と接触している可能性のある、当該着目粒子より粒子径の小さい他の粒子との接触候補ペアを選択する接触候補選択ステップと、
前記接触候補選択ステップにおいて選択された接触候補ペアのそれぞれについて、該接触候補ペアの2つの粒子の間の接触力を、これらの粒子の前記位置情報及び前記速度情報に基づき算出し、算出した接触力の情報をこの接触力に対応する接触候補ペアの順番に応じて接触力テーブルに格納する接触力算出ステップと、
前記粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より大きい粒子との接触力を前記接触力テーブルから参照するための参照情報を含む接触力参照表を作成する接触力参照表作成ステップと、
前記粒子のそれぞれについて、当該粒子の近傍に位置する他の粒子のうち当該粒子の粒子径より小さい粒子の数を示す接触候補数の積算値である積算接触候補数を算出する積算接触候補数算出ステップと、
前記粒子のそれぞれについて、当該粒子より粒子径の大きい粒子との接触力を前記接触力参照表の参照情報を用いて前記接触力テーブルから抽出し、当該粒子より粒子径の小さい粒子との接触力を、前記積算接触候補数を用いて前記接触力テーブルの格納位置を特定して抽出し、これらの抽出した接触力を用いて粒子ごとの接触力を総和演算する接触力総和演算ステップと、
前記接触力総和演算ステップにおいて計算された粒子ごとの接触力に基づいて、前記粒子の新たな位置情報及び速度情報を算出する算出ステップと、
前記算出ステップにおいて算出された新たな位置情報及び速度情報を用いて、前記粒子情報保持手段に保持される粒子情報を更新する粒子情報更新ステップと、
を含むことを特徴とする粒子シミュレーション方法。
【請求項5】
前記作業空間が複数のセルに分割され、各セルにはセル番号が付されており、
前記粒子情報には、前記位置情報に基づき特定される、当該粒子が配置されるセルのセル番号が含まれており、
前記付与ステップが、前記粒子のそれぞれについて、前記セル番号に応じた順序で特定し、さらに同一のセルに配置される粒子間で、粒子径に応じた順序で特定した特定情報を付与することを特徴とする、請求項4に記載の粒子シミュレーション方法。

【図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


【公開番号】特開2011−145943(P2011−145943A)
【公開日】平成23年7月28日(2011.7.28)
【国際特許分類】
【出願番号】特願2010−7142(P2010−7142)
【出願日】平成22年1月15日(2010.1.15)
【出願人】(504194878)独立行政法人海洋研究開発機構 (110)