(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-14
(45)【発行日】2023-03-23
(54)【発明の名称】情報処理装置、粒子シミュレーション方法および粒子シミュレーションシステム
(51)【国際特許分類】
G16Z 99/00 20190101AFI20230315BHJP
【FI】
G16Z99/00
(21)【出願番号】P 2019123149
(22)【出願日】2019-07-01
【審査請求日】2022-03-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】畠中 耕平
(72)【発明者】
【氏名】諏訪 多聞
(72)【発明者】
【氏名】風間 正喜
【審査官】宮地 匡人
(56)【参考文献】
【文献】特開2015-230535(JP,A)
【文献】特開2011-145943(JP,A)
【文献】特開2015-114674(JP,A)
【文献】特表2015-530636(JP,A)
【文献】原田 隆宏,グラフィックスハードウェアを用いた個別要素法の高速化,日本計算工学会論文集,2007年,Vol.2007,Paper No.20070011
(58)【調査した分野】(Int.Cl.,DB名)
G16Z 99/00
JSTPlus(JDreamIII)
(57)【特許請求の範囲】
【請求項1】
第1の領域に属する第1の粒子に対して、第1の時刻において前記第1の粒子と接触している接触粒子と、前記第1の時刻までの接触中の間の接触粒子に対する前記第1の粒子の累積の変位量とを示す第1の接触データを記憶する記憶部と、
前記第1の時刻より後の第2の時刻において前記第1の領域に属する粒子の位置を示す第1の位置データを算出し、前記第2の時刻において前記第1の領域と隣接する第2の領域に属する粒子の位置を示す第2の位置データを他の情報処理装置から取得し、
前記第1の接触データと前記第1の位置データの算出結果とに基づいて、前記第1の時刻において前記第1の粒子と接触しており前記第1の領域に属し、前記第2の時刻において前記第1の領域に属する第2の粒子を検出し、
前記第1の位置データに基づいて、前記第2の時刻において前記第1の粒子と前記第2の粒子とが接触しているか判定し、接触している場合、前記第1の接触データから前記第2の時刻に対応する第2の接触データに、前記第2の粒子の前記変位量を複写し、
前記第1の位置データと前記第2の位置データとに基づいて、前記第2の粒子以外の前記第1の領域または前記第2の領域に属する粒子であって、前記第2の時刻において前記第1の粒子と接触している第3の粒子を検出し、
前記第1の接触データから前記第3の粒子を検索し、前記第3の粒子が前記第1の接触データに登録されている場合、前記第1の接触データから前記第2の接触データに前記第3の粒子の前記変位量を複写する処理部と、
を有する情報処理装置。
【請求項2】
前記第1の接触データでは、前記第1の時刻において各粒子に割り当てられた第1の識別情報を粒子の識別に使用し、前記第1の位置データでは、前記第2の時刻において各粒子に割り当てられた第2の識別情報を粒子の識別に使用し、
前記第1の位置データの算出では、前記第1の時刻において前記第1の領域に属しかつ前記第2の時刻において前記第1の領域に属する粒子に対して、前記第1の識別情報と前記第2の識別情報との間の対応関係を示す対応データを生成し、
前記第2の粒子の検出では、前記第1の接触データに含まれる前記第1の識別情報に対応する前記第2の識別情報を、前記対応データから検索する、
請求項1記載の情報処理装置。
【請求項3】
前記第1の接触データでは、各粒子に割り当てられており前記第1の時刻と前記第2の時刻との間で変化しない第3の識別情報を粒子の識別に更に使用し、前記第1の位置データおよび前記第2の位置データは、前記第3の識別情報を含んでおり、
前記第3の粒子の前記変位量の複写では、前記第3の識別情報を用いて前記第1の接触データから前記第3の粒子を検索する、
請求項2記載の情報処理装置。
【請求項4】
前記第1の接触データは、前記第1の領域に属する接触粒子に対応する第1の対象領域データと、前記第2の領域に属する接触粒子に対応する第1の隣接領域データとを含み、
前記第2の接触データは、前記第1の領域に属する接触粒子に対応する第2の対象領域データと、前記第2の領域に属する接触粒子に対応する第2の隣接領域データとを含み、
前記第2の粒子の検出では、前記第1の対象領域データと前記第1の位置データの算出結果とに基づいて、前記第2の粒子を検出し、
前記第2の粒子の前記変位量の複写では、前記第1の対象領域データから前記第2の対象領域データに前記第2の粒子の前記変位量を複写する、
請求項1記載の情報処理装置。
【請求項5】
前記第1の接触データは、前記第1の領域に属する接触粒子に対応する第1の対象領域データと、前記第2の領域に属する接触粒子に対応する第1の隣接領域データとを含み、
前記第2の接触データは、前記第1の領域に属する接触粒子に対応する第2の対象領域データと、前記第2の領域に属する接触粒子に対応する第2の隣接領域データとを含み、
前記第2の時刻において前記第3の粒子が前記第1の領域に属する場合、前記第3の粒子の前記変位量の複写では、前記第1の隣接領域データから前記第3の粒子を検索し、前記第3の粒子が前記第1の隣接領域データに登録されている場合、前記第1の隣接領域データから前記第2の対象領域データに前記第3の粒子の前記変位量を複写する、
請求項1記載の情報処理装置。
【請求項6】
前記第1の接触データは、前記第1の領域に属する接触粒子に対応する第1の対象領域データと、前記第2の領域に属する接触粒子に対応する第1の隣接領域データとを含み、
前記第2の接触データは、前記第1の領域に属する接触粒子に対応する第2の対象領域データと、前記第2の領域に属する接触粒子に対応する第2の隣接領域データとを含み、
前記第2の時刻において前記第3の粒子が前記第2の領域に属する場合、前記第3の粒子の前記変位量の複写では、前記第3の粒子が前記第1の対象領域データおよび前記第1の隣接領域データのうちの一方のデータに登録されている場合、前記一方のデータから前記第2の隣接領域データに前記第3の粒子の前記変位量を複写する、
請求項1記載の情報処理装置。
【請求項7】
前記変位量は、前記第1の時刻までの接触中の間に前記第1の粒子が前記接触粒子に対して接線方向に移動した相対的な移動量の累積値である、
請求項1記載の情報処理装置。
【請求項8】
コンピュータが、
第1の領域に属する第1の粒子に対して、第1の時刻において前記第1の粒子と接触している接触粒子と、前記第1の時刻までの接触中の間の接触粒子に対する前記第1の粒子の累積の変位量とを示す第1の接触データを取得し、
前記第1の時刻より後の第2の時刻において前記第1の領域に属する粒子の位置を示す第1の位置データを算出し、前記第2の時刻において前記第1の領域と隣接する第2の領域に属する粒子の位置を示す第2の位置データを他のコンピュータから受信し、
前記第1の接触データと前記第1の位置データの算出結果とに基づいて、前記第1の時刻において前記第1の粒子と接触しており前記第1の領域に属し、前記第2の時刻において前記第1の領域に属する第2の粒子を検出し、
前記第1の位置データに基づいて、前記第2の時刻において前記第1の粒子と前記第2の粒子とが接触しているか判定し、接触している場合、前記第1の接触データから前記第2の時刻に対応する第2の接触データに、前記第2の粒子の前記変位量を複写し、
前記第1の位置データと前記第2の位置データとに基づいて、前記第2の粒子以外の前記第1の領域または前記第2の領域に属する粒子であって、前記第2の時刻において前記第1の粒子と接触している第3の粒子を検出し、
前記第1の接触データから前記第3の粒子を検索し、前記第3の粒子が前記第1の接触データに登録されている場合、前記第1の接触データから前記第2の接触データに前記第3の粒子の前記変位量を複写する、
粒子シミュレーション方法。
【請求項9】
第1の領域に属する第1の粒子に対して、第1の時刻において前記第1の粒子と接触している接触粒子と、前記第1の時刻までの接触中の間の接触粒子に対する前記第1の粒子の累積の変位量とを示す第1の接触データを記憶する第1の情報処理装置と、
前記第1の時刻より後の第2の時刻において前記第1の領域と隣接する第2の領域に属する粒子の位置を示す第2の位置データを、前記第1の情報処理装置に送信する第2の情報処理装置と、
を有し、前記第1の情報処理装置は、
前記第2の時刻において前記第1の領域に属する粒子の位置を示す第1の位置データを算出し、
前記第1の接触データと前記第1の位置データの算出結果とに基づいて、前記第1の時刻において前記第1の粒子と接触しており前記第1の領域に属し、前記第2の時刻において前記第1の領域に属する第2の粒子を検出し、
前記第1の位置データに基づいて、前記第2の時刻において前記第1の粒子と前記第2の粒子とが接触しているか判定し、接触している場合、前記第1の接触データから前記第2の時刻に対応する第2の接触データに、前記第2の粒子の前記変位量を複写し、
前記第1の位置データと前記第2の位置データとに基づいて、前記第2の粒子以外の前記第1の領域または前記第2の領域に属する粒子であって、前記第2の時刻において前記第1の粒子と接触している第3の粒子を検出し、
前記第1の接触データから前記第3の粒子を検索し、前記第3の粒子が前記第1の接触データに登録されている場合、前記第1の接触データから前記第2の接触データに前記第3の粒子の前記変位量を複写する、
粒子シミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、粒子シミュレーション方法および粒子シミュレーションシステムに関する。
【背景技術】
【0002】
物体の挙動を解析するシミュレーション方法の1つに、離散要素法(DEM:Discrete Element Method)がある。離散要素法は、個別要素法(Distinct Element Method)と言うこともある。離散要素法は、解析対象の物体を円や球などの粒子の集合としてモデル化し、粒子間の接触および滑動を考慮して粒子の運動を追跡する。離散要素法は、土砂や薬品やプリンタトナーなどの粉体の挙動解析に利用されることがある。
【0003】
離散要素法は、ある粒子が接触している他の粒子を検出し、他の粒子から受ける接触力を算出し、接触力に応じて粒子の所定時間後の位置を算出する。シミュレーション上の時刻を所定時間刻みで進めて、接触している他の粒子の検出と接触力の算出と位置の更新を繰り返すことで、時間軸に沿った粒子の位置の変化をシミュレートできる。
【0004】
なお、解析対象領域を複数のセルに分割し、着目する粒子と接触しているか否か判定する相手粒子を、着目する粒子が属するセルと隣接する隣接セルに属する粒子に限定することで、離散要素法の計算量を削減する解析装置が提案されている。また、着目する粒子と所定時間内に接触する可能性がある粒子を示す近傍リストを生成し、各時刻に接触しているか否か判定する相手粒子を近傍リストの粒子に限定することで、離散要素法の計算量を削減するシミュレーションシステムが提案されている。また、粒子を複数のノードに割り振って離散要素法を並列実行するシミュレーションシステムが提案されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2010-72379号公報
【文献】国際公開第2012/034176号
【文献】国際公開第2014/094410号
【発明の概要】
【発明が解決しようとする課題】
【0006】
離散要素法では、ある粒子が他の粒子から受ける接触力を算出するにあたり、2つの粒子が接触している間の累積の変位量を使用することがある。例えば、接触力を法線方向と接線方向に分解して算出する場合に、接線方向の接触力が、接触開始から現時刻までの間に接線方向にずれた相対的な移動量の累積値に依存することがある。よって、シミュレーション上の時刻を進めるにあたって、継続して接触している粒子のペア毎に前時刻の変位量を現時刻に複写(コピー)する複写処理が発生する。
【0007】
ここで、ある粒子から見て前時刻で接触しておりかつ現時刻でも接触している他の粒子を特定し、特定した他の粒子の変位量を複写する複写処理は、計算量が大きい。例えば、複写処理の単純な方法として、各粒子の現時刻の位置に基づいて、ある粒子と現時刻で接触している他の粒子を抽出し、抽出した他の粒子を、前時刻で接触していた粒子を示す接触データの中から検索する方法が考えられる。この方法では、前時刻の接触データを何度も走査することになり、比較処理の計算量が大きくなる。
【0008】
そこで、複写処理の手順を変更して計算量を削減することが考えられる。しかし、粒子が配置され得る全体領域を分割して、複数のノードが異なる分割領域を担当する並列粒子シミュレーションでは、複写処理の手順の変更が容易ではないという問題がある。
【0009】
並列粒子シミュレーションの場合、ある分割領域に属する粒子が、隣接する他の分割領域に属する他の粒子と境界を挟んで接触することがある。そのため、複数のノードは、境界付近の粒子のデータを相互に通知し合うことになる。ただし、各ノードが粒子の移動を効率的に追跡できるのは当該ノードが担当する分割領域であり、隣接する他の分割領域については粒子の移動を効率的に追跡できるわけではない。そのため、担当する分割領域に相手粒子が属する場合と隣接する他の分割領域に相手粒子が属する場合とを区別せずに、統一的な方法で複写処理を行おうとすると、計算量の削減が難しい。
【0010】
1つの側面では、本発明は、粒子シミュレーションの計算量を削減できる情報処理装置、粒子シミュレーションシステムおよび粒子シミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。記憶部は、第1の領域に属する第1の粒子に対して、第1の時刻において第1の粒子と接触している接触粒子と、第1の時刻までの接触中の間の接触粒子に対する第1の粒子の累積の変位量とを示す第1の接触データを記憶する。処理部は、第1の時刻より後の第2の時刻において第1の領域に属する粒子の位置を示す第1の位置データを算出し、第2の時刻において第1の領域と隣接する第2の領域に属する粒子の位置を示す第2の位置データを他の情報処理装置から取得する。処理部は、第1の接触データと第1の位置データの算出結果とに基づいて、第1の時刻において第1の粒子と接触しており第1の領域に属し、第2の時刻において第1の領域に属する第2の粒子を検出する。処理部は、第1の位置データに基づいて、第2の時刻において第1の粒子と第2の粒子とが接触しているか判定し、接触している場合、第1の接触データから第2の時刻に対応する第2の接触データに、第2の粒子の変位量を複写する。処理部は、第1の位置データと第2の位置データとに基づいて、第2の粒子以外の第1の領域または第2の領域に属する粒子であって、第2の時刻において第1の粒子と接触している第3の粒子を検出する。処理部は、第1の接触データから第3の粒子を検索し、第3の粒子が第1の接触データに登録されている場合、第1の接触データから第2の接触データに第3の粒子の変位量を複写する。
【0012】
また、1つの態様では、コンピュータが実行する粒子シミュレーション方法が提供される。また、1つの態様では、粒子シミュレーションシステムが提供される。
【発明の効果】
【0013】
1つの側面では、粒子シミュレーションの計算量を削減できる。
【図面の簡単な説明】
【0014】
【
図1】第1の実施の形態の情報処理システムの例を説明する図である。
【
図2】第2の実施の形態の情報処理システムの例を示す図である。
【
図3】計算ノードのハードウェア例を示すブロック図である。
【
図4】離散要素法における粒子モデルの例を示す図である。
【
図5】シミュレーション対象領域の分割例を示す図である。
【
図9】計算ノードの機能例を示すブロック図である。
【
図11】粒子テーブルおよび粒子番号対応テーブルの例を示す図である。
【
図13】離散要素法の手順例を示すフローチャートである。
【
図14】接触粒子リスト生成の手順例を示すフローチャートである。
【
図15】接触粒子リスト生成の手順例を示すフローチャート(続き1)である。
【
図16】接触粒子リスト生成の手順例を示すフローチャート(続き2)である。
【発明を実施するための形態】
【0015】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0016】
図1は、第1の実施の形態の情報処理システムの例を説明する図である。
第1の実施の形態の情報処理システムは、離散要素法を用いて粉体の動きをシミュレートする粒子シミュレーションを行う。第1の実施の形態の情報処理システムは、情報処理装置10,10-1などの複数の情報処理装置を含む。第1の実施の形態の情報処理システムを、並列処理システム、シミュレーションシステム、シミュレータなどと言うこともできる。粒子シミュレーションの並列処理では、粒子が配置され得るシミュレーション上の空間が分割され、異なる情報処理装置に異なる領域が割り当てられる。情報処理装置10,10-1などの各情報処理装置は、割り当てられた領域(対象領域)に属する粒子の移動をシミュレートする。各情報処理装置を、コンピュータ、ノード、シミュレーション装置などと言うこともできる。複数の情報処理装置は、ネットワークに接続され、相互にデータを送信できる。後述するように、情報処理装置10は領域13を担当し、情報処理装置10-1は領域13-1を担当する。
【0017】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0018】
情報処理装置10は、離散要素法に従って、着目する粒子と現時刻で接触している接触粒子を判定し、着目する粒子が接触粒子から受ける接触力を算出し、接触力に基づいて着目する粒子の次時刻の位置を算出することを繰り返す。そこで、情報処理装置10は、シミュレーション上の各時刻において、接触粒子を示す接触データを生成する。
【0019】
接触力の算出では、着目する粒子と接触粒子とが接触している間における累積の変位量が使用される。変位量は、例えば、着目する粒子が接触粒子に対して接線方向に移動した相対的な移動量を、接触開始から累積したものである。そこで、情報処理装置10は、シミュレーション上の各時刻の変位量を接触データに記録しておく。このとき、接触が継続している接触粒子については、前時刻の接触データから現時刻の接触データに変位量を複写し、複写した変位量に現時刻の増分を加えることになる。
【0020】
記憶部11は、接触データ14(第1の接触データ)を記憶する。記憶部11は、後述する位置データ15(第1の位置データ)、位置データ15-1(第2の位置データ)および接触データ16(第2の接触データ)を更に記憶してもよい。
【0021】
接触データ14は、情報処理装置10が担当する領域13に属する粒子J1(第1の粒子)に対する接触データであって、シミュレーション上の時刻t1(第1の時刻)の接触データである。接触データ16は、時刻t1より後のシミュレーション上の時刻t2(第2の時刻)の粒子J1に対する接触データである。時刻t2は、例えば、時刻t1から所定の単位時間後の時刻である。接触データ14は、時刻t1において粒子J1と接触している接触粒子と、時刻t1までの接触中における接触粒子に対する粒子J1の変位量とを示す。接触データ16は、時刻t2において粒子J1と接触している接触粒子と、時刻t2までの接触中における接触粒子に対する粒子J1の変位量とを示す。例えば、接触データ14,16は、接触粒子の識別情報と変位量とを含む。複数の接触粒子が存在する場合、例えば、複数の識別情報と複数の変位量とが対応付けられて列挙される。
【0022】
位置データ15は、時刻t2において情報処理装置10が担当する領域13に属する粒子の位置を示す。位置データ15-1は、時刻t2において情報処理装置10-1が担当する領域13-1に属する粒子の位置を示す。領域13-1は領域13と隣接する。位置データ15-1は、領域13-1に属する粒子のうち、領域13と領域13-1の間の境界から所定の距離以内にある一部の粒子のみを示してもよい。位置データ15は情報処理装置10で生成され、位置データ15-1は情報処理装置10-1で生成される。
【0023】
処理部12は、シミュレーション上の時刻を時刻t1から時刻t2に進める。その際、処理部12は、位置データ15を生成する。例えば、処理部12は、接触データ14などの時刻t1の接触データに基づいて、領域13に属する各粒子が受ける接触力を算出し、算出した接触力と時刻t1における領域13の各粒子の位置を示す位置データとに基づいて、時刻t2における位置を算出する。また、処理部12は、情報処理装置10-1から受信された位置データ15-1を取得する。位置データ15-1は、位置データ15と同様の方法により情報処理装置10-1によって生成される。
【0024】
時刻を時刻t1から時刻t2に進めることで、粒子が領域13と領域13-1の境界を跨いで移動することもある。時刻t1において領域13に属する粒子は、時刻t2において領域13に留まっていることもあるし、時刻t2において領域13-1に移動していることもある。また、時刻t1において領域13-1に属する粒子は、時刻t2において領域13-1に留まっていることもあるし、時刻t2において領域13に移動していることもある。各粒子は、移動先の領域を担当する情報処理装置により管理される。
【0025】
次に、処理部12は、時刻t2の接触データ16を生成する。その際、処理部12は、接触データ14と位置データ15の算出結果とに基づいて、時刻t1において粒子J1と接触しかつ領域13に属し、時刻t2において領域13に属する第2の粒子を検出する。
【0026】
例えば、処理部12は、時刻t1と時刻t2とで各粒子に異なる識別情報を割り当てる。ただし、処理部12は、位置データ15を算出する際に、領域13に属する粒子については、時刻t1の識別情報と時刻t2の識別情報との間の対応関係を示す対応データを生成しておく。情報処理装置10が粒子の移動を追跡する領域は領域13のみであるため、対応データには、時刻t1と時刻t2の両方で領域13に属する粒子が登録される。対応データには、領域13から領域13-1に移動した粒子、領域13-1から領域13に移動した粒子、および、領域13-1に留まる粒子は登録されない。その場合、処理部12は、接触データ14に含まれる時刻t1の識別情報に対応する時刻t2の識別情報を対応データから検索することで、上記の条件を満たす第2の粒子を検出することができる。
【0027】
処理部12は、位置データ15に基づいて、時刻t2において粒子J1と上記の第2の粒子とが接触しているか判定する。接触している場合、処理部12は、接触データ14から接触データ16に第2の粒子の変位量を複写する。例えば、処理部12は、時刻t1において粒子J1と接触しかつ領域13に属し、時刻t2において領域13に属する粒子J2を検出する。時刻t2において粒子J1と粒子J2とは接触している。処理部12は、接触データ14から接触データ16に、粒子J2に対応する変位量D2を複写する。
【0028】
次に、処理部12は、位置データ15,15-1に基づいて、上記の第2の粒子以外の領域13,13-1に属する粒子であって、時刻t2において粒子J1と接触している第3の粒子を検出する。処理部12は、接触データ14から第3の粒子を検索する。接触データ14に上記の第3の粒子が登録されている場合、処理部12は、接触データ14から接触データ16に第3の粒子の変位量を複写する。
【0029】
例えば、処理部12は、時刻t2において粒子J1と接触している粒子J3-1,J3-2,J3-3を検出する。粒子J3-1は、時刻t1において領域13に属し、時刻t2において領域13-1に移動した粒子である。粒子J3-2は、時刻t1において領域13-1に属し、時刻t2において領域13に移動した粒子である。粒子J3-3は、時刻t1と時刻t2の両方において領域13-1に属する粒子である。処理部12は、接触データ14から粒子J3-1,J3-2,J3-3を検索する。粒子J3-1,J3-2,J3-3は、接触データ14に登録されている。そこで、処理部12は、接触データ14から接触データ16に、粒子J3-1,J3-2,J3-3に対応する変位量D3-1,D3-2,D3-3を複写する。なお、接触データ14,16では、領域13に属する接触粒子と領域13-1に属する接触粒子が区別して登録されてもよい。
【0030】
第1の実施の形態の情報処理システムによれば、粒子シミュレーションにおいて、時刻t2で粒子J1と接触している接触粒子とその変位量を示す接触データ16が生成される。よって、時刻t2に粒子J1が接触粒子から受ける接触力を効率的に算出することができ、時刻t2より後の時刻t3の粒子J1の位置を効率的に算出することができる。
【0031】
また、接触データ16を生成する際に、時刻t1の接触データ14を用いて、時刻t1で粒子J1と接触しかつ領域13に属し、時刻t2で領域13に留まっている第2の粒子が検出される。第2の粒子については、時刻t2において粒子J1と接触していることを確認した上で、時刻t1の接触データ14から時刻t2の接触データ16に変位量が複写される。これにより、領域13に留まっている粒子については接触データ14を繰り返し検索しなくてよく、比較処理の計算量を削減できる。よって、接触データ14から接触データ16への変位量の複写を効率化できる。
【0032】
更に、上記の第2の粒子以外に時刻t2において粒子J1と接触している第3の粒子が検出される。第3の粒子には、領域13から領域13-1に移動した粒子、領域13-1から領域13に移動した粒子、および、領域13-1に留まっている粒子が含まれる。第3の粒子については、接触データ14が検索され、接触データ14に登録されている場合、接触データ14から接触データ16に変位量が複写される。
【0033】
このように、領域13に留まる接触粒子とそれ以外の接触粒子とで、異なる複写手順が採用される。これは、情報処理装置10の対象領域である領域13に属する粒子については移動を効率的に追跡できるのに対し、隣接領域である領域13-1に属する粒子については移動を効率的に追跡することが難しいためである。第1の実施の形態では、領域13に留まる接触粒子とそれ以外の接触粒子とを分けることで、少なくとも前者について複写手順が効率化される。その結果、複写処理の計算量の削減が可能となる。
【0034】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
【0035】
第2の実施の形態の情報処理システムは、離散要素法を用いて多数の粒子の動きをシミュレートする並列処理システムである。離散要素法では、粒子間の接触を考慮して各粒子の位置および速度の変化を追跡する。離散要素法では、各粒子が初期位置に配置されたステップ1から開始して、シミュレーション上の時刻を微細時間だけ進めることでステップを1つずつ進め、各粒子の位置および速度を時間軸に沿って更新する。離散要素法で取り扱う粒子は、二次元の円でもよいし三次元の球でもよい。ただし、第2の実施の形態では説明を簡単にするため、粒子が二次元の円である場合を想定する。
【0036】
第2の実施の形態の情報処理システムは、計算ノード100,100-1,100-2,100-3などの複数の計算ノードおよび管理ノード200を含む。複数の計算ノードおよび管理ノード200は、ネットワーク30に接続されている。ネットワーク30は、例えば、LAN(Local Area Network)などのデータ通信ネットワークである。なお、計算ノード100は、第1の実施の形態の情報処理装置10に対応する。計算ノード100-1は、第1の実施の形態の情報処理装置10-1に対応する。
【0037】
複数の計算ノードは、各ステップにおける多数の粒子の位置および速度を分散して計算するサーバコンピュータである。粒子が配置され得るシミュレーション対象の全体領域が複数の分割領域に細分化され、1つの分割領域が1つのプロセスに割り当てられる。離散要素法に使用される各計算ノードは、1つの分割領域が割り当てられた1つのプロセスを実行する。よって、複数の計算ノードを用いて、複数の分割領域に対応する複数のプロセスが並列に実行される。第2の実施の形態では説明を簡単にするため、全体領域を4つの分割領域に細分化し、計算ノード100,100-1,100-2,100-3の4つの計算ノードを用いて4つのプロセスを並列に実行する場合を想定する。ただし、分割領域の個数を増やして、使用する計算ノードを増やすことも可能である。
【0038】
計算ノード100,100-1,100-2,100-3はそれぞれ、担当する分割領域の中に位置する粒子について、ステップを1つ進めて位置および速度を更新する。その結果、1つ前のステップでは担当する分割領域に位置していた粒子が、担当する分割領域の外に移動してしまうことがある。そこで、計算ノード100,100-1,100-2,100-3は、ステップ毎に通信を行い、分割領域の境界を跨がって移動した粒子の粒子データを交換する。また、担当する分割領域の粒子のうち、隣接する分割領域との境界付近に位置する粒子は、隣接する分割領域の粒子と接触している可能性がある。そこで、計算ノード100,100-1,100-2,100-3は、ステップ毎に通信を行い、境界付近の粒子の粒子データを複写して相互に通知する。なお、第2の実施の形態では、計算ノード100に着目して離散要素法の処理を説明する。
【0039】
管理ノード200は、複数の計算ノードを用いた離散要素法の並列処理を制御する。具体的には、管理ノード200は、各粒子の初期位置などの入力データをユーザから受け付ける。管理ノード200は、シミュレーション対象の全体領域を複数の分割領域に細分化し、各粒子の初期位置に応じて粒子データを複数の分割領域に分配し、複数の分割領域それぞれの入力データを生成する。管理ノード200は、計算ノード100,100-1,100-2,100-3それぞれに、複数の分割領域のうちの1つの分割領域を割り当て、割り当てた分割領域の入力データを送信する。
【0040】
全てのステップの実行が終了すると、管理ノード200は、計算ノード100,100-1,100-2,100-3から結果データを収集する。結果データは、各ステップにおける粒子の位置を含む。計算ノード100,100-1,100-2,100-3はそれぞれ、担当する分割領域に粒子が存在する間における当該粒子の位置を含む結果データを管理ノード200に送信することになる。管理ノード200は、結果データをHDDなどの不揮発性ストレージに保存してもよい。また、管理ノード200は、結果データを表示装置に表示してもよい。例えば、管理ノード200は、各粒子を点で表現し、各粒子の位置変化を点の移動で表現した動画像を表示してもよい。また、例えば、管理ノード200は、結果データを他の情報処理装置に送信してもよい。
【0041】
なお、計算ノード100,100-1,100-2,100-3および管理ノード200を、独立のコンピュータではなく、多数のプロセッサを有する並列処理装置の中の異なるプロセッサとしてもよい。また、管理ノード200の処理を、計算ノード100,100-1,100-2,100-3のうちの1つの計算ノードに実行させてもよい。
【0042】
図3は、計算ノードのハードウェア例を示すブロック図である。
計算ノード100は、CPU101、RAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。上記ユニットはバスに接続されている。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。他の計算ノードや管理ノード200も同様のハードウェアを有する。
【0043】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、計算ノード100は複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0044】
RAM102は、CPU101が実行するプログラムやCPU101が演算に使用するデータを一時的に記憶する揮発性の半導体メモリである。なお、計算ノード100は、RAM以外の種類のメモリを備えてもよく、複数のメモリを備えてもよい。
【0045】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。なお、計算ノード100は、フラッシュメモリやSSD(Solid State Drive)など他の種類のストレージを備えてもよく、複数のストレージを備えてもよい。
【0046】
画像インタフェース104は、CPU101からの命令に従って、計算ノード100に接続された表示装置111に画像を出力する。表示装置111として、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。また、計算ノード100に、プリンタなど表示装置111以外の出力デバイスが接続されてもよい。
【0047】
入力インタフェース105は、計算ノード100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。また、計算ノード100に複数種類の入力デバイスが接続されてもよい。
【0048】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体に複写する。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0049】
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介して他の計算ノードや管理ノード200と通信する。通信インタフェース107は、例えば、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースである。
【0050】
次に、離散要素法について説明する。
図4は、離散要素法における粒子モデルの例を示す図である。
離散要素法では、着目する粒子にかかる合力を算出し、着目する粒子の質量と合力から加速度を算出し、現在の速度と加速度から次の速度を算出し、現在の位置と次の速度から次の位置を算出する。着目する粒子にかかる合力は、重力などの外力と、着目する粒子と接触している1以上の他の粒子(接触粒子)から受ける接触力とを合成したものである。そのため、離散要素法では、粒子間の接触力を表現するモデルが使用される。
【0051】
ここでは、粒子41と粒子42とが接触している場合を考える。粒子41の位置は、粒子41の中心の座標で表現される。粒子42の位置は、粒子42の中心の座標で表現される。粒子41の半径と粒子42の半径は同じでもよいし異なってもよい。シミュレーションを簡単にするため、全ての粒子の半径が同じであると仮定することもできる。粒子41と粒子42との間では、強く衝突した場合に食い込みが発生することがある。そこで、粒子41の中心と粒子42の中心との間の距離が、粒子41の半径と粒子42の半径の合計以下である場合、粒子41と粒子42が接触していると判定される。
【0052】
粒子41が粒子42と接触している場合、粒子41が粒子42から受ける接触力は法線方向と接線方向に分解される。法線方向の接触力は、並列に配置されたダッシュポット43とばね45によりモデル化される。接線方向の接触力は、並列に配置されたダッシュポット44とばね46によりモデル化される。ダッシュポット43,44は、速度に比例する粘性抵抗力を、進行方向の逆方向に与える部品である。速度が大きいほど粘性抵抗力が大きくなり、速度が小さいほど粘性抵抗力が小さくなる。ばね45,46は、当初の長さからの変位量に比例する弾性抵抗力を、変位方向の逆方向に与える部品である。変位量が大きいほど弾性抵抗力が大きくなり、変位量が小さいほど弾性抵抗力が小さくなる。
【0053】
法線方向の接触力は、ダッシュポット43の粘性抵抗力とばね45の弾性抵抗力の和である。よって、ステップt(tは1以上の整数)における法線方向の接触力FN(t)は数式(1)のように定義される。kNはばね45の弾性係数であり、cNはダッシュポット43の粘性減衰係数である。弾性係数kNと粘性減衰係数cNは入力データとして与えられる。弾性係数kNと粘性減衰係数cNは、全ての粒子について同じでもよいし粒子によって異なってもよい。DN(t)はステップtの法線方向の変位量である。ΔDN(t)は、ステップtの粒子42に対する粒子41の相対速度のうち法線方向の成分である。
【0054】
【0055】
変位量DN(t)は、粒子41と粒子42の間の食い込み量に相当する。よって、変位量DN(t)は、粒子41の半径と粒子42の半径の和から、粒子41の中心と粒子42の中心の間の距離を差し引くことで算出することができる。相対速度ΔDN(t)は、粒子41の速度と粒子42の速度から算出することができる。
【0056】
接線方向の接触力は、ダッシュポット44の粘性抵抗力とばね46の弾性抵抗力の和である。よって、ステップtにおける接線方向の接触力FT(t)は数式(2)のように定義される。kTはばね46の弾性係数であり、cTはダッシュポット44の粘性減衰係数である。弾性係数kTと粘性減衰係数cTは入力データとして与えられる。弾性係数kTと粘性減衰係数cTは、全ての粒子について同じでもよいし粒子によって異なってもよい。DT(t)はステップtの接線方向の変位量である。ΔDT(t)は、ステップtの粒子42に対する粒子41の相対速度のうち接線方向の成分である。
【0057】
【0058】
変位量DT(t)は、粒子41と粒子42が接触を開始してから接触状態のまま接線方向にずれた累積の移動量である。粒子42に対する粒子41の相対速度はステップ毎に変化し得るため、変位量DT(t)は、粒子41と粒子42が接触を開始してから離れるまでの各ステップにおいて単位ステップ時間Δt(1ステップに相当する時間幅)の間の接線方向の移動量を算出し、それら接線方向の移動量を累積することで算出される。相対速度ΔDT(t)は、粒子41の速度と粒子42の速度から算出することができる。
【0059】
以上の法線方向の接触力と接線方向の接触力を合成することで、粒子41が粒子42から受ける接触力を算出することができる。粒子41が更に他の粒子と接触している場合、粒子41が他の粒子から受ける接触力も算出される。粒子41が1以上の接触粒子から受ける接触力と重力などの外力とを合成することで、粒子41にかかる合力が算出される。
【0060】
前述のように、法線方向の変位量DN(t)は、ステップtにおける粒子41,42の位置から算出することができる。法線方向の相対速度ΔDN(t)は、ステップtにおける粒子41,42の速度から算出することができる。接線方向の相対速度ΔDT(t)は、ステップtにおける粒子41,42の速度から算出することができる。よって、変位量DN(t)および相対速度ΔDN(t),ΔDT(t)は、ステップtの粒子41,42の状態から算出され、過去のステップの粒子41,42の状態に依存しない。
【0061】
これに対して、接線方向の変位量DT(t)は、ステップt-1における変位量DT(t-1)に、ステップt-1からステップtの間の接線方向の移動量を加算することで算出される。よって、変位量DT(t)は、ステップtにおける粒子41,42の状態に加えて、過去のステップの粒子41,42の状態に依存する。そこで、粒子41が粒子42と接触している間、接線方向の変位量を状態として保持することになる。このように、離散要素法では、着目する粒子について、着目する粒子と接触している粒子毎の接線方向の変位量を前ステップから現ステップに複写して使用することになる。
【0062】
図5は、シミュレーション対象領域の分割例を示す図である。
シミュレーション対象の全体領域は、例えば、分割領域51,52,53,54に分割される。分割領域51,52,53,54はそれぞれ正方形の領域である。分割領域51は全体領域の左上に相当し、分割領域52は全体領域の右上に相当し、分割領域53は全体領域の左下に相当し、分割領域54は全体領域の右下に相当する。よって、分割領域51は、右辺で分割領域52と接し、下辺で分割領域53と接し、右下点で分割領域54と接する。分割領域52は、左辺で分割領域51と接し、左下点で分割領域53と接し、下辺で分割領域54と接する。分割領域53は、上辺で分割領域51と接し、右上点で分割領域52と接し、右辺で分割領域54と接する。分割領域54は、左上点で分割領域51と接し、上辺で分割領域52と接し、左辺で分割領域53と接する。
【0063】
分割領域51は計算ノード100に割り当てられる。分割領域52は計算ノード100-1に割り当てられる。分割領域53は計算ノード100-2に割り当てられる。分割領域54は計算ノード100-3に割り当てられる。
【0064】
分割領域51は、他の分割領域と接する境界から所定の距離以内にある点の集合である境界領域51a,51b,51cを含む。境界領域51cは、下辺から所定の距離以内にありかつ右辺から所定の距離以内にある点の集合である。境界領域51aは、下辺から所定の距離以内にある点の集合のうち境界領域51cを除く部分である。境界領域51bは、右辺から所定の距離以内にある点の集合のうち境界領域51cを除く部分である。
【0065】
分割領域52は、他の分割領域と接する境界から所定の距離以内にある点の集合である境界領域52a,52b,52cを含む。境界領域52cは、下辺から所定の距離以内にありかつ左辺から所定の距離以内にある点の集合である。境界領域52aは、下辺から所定の距離以内にある点の集合のうち境界領域52cを除く部分である。境界領域52bは、左辺から所定の距離以内にある点の集合のうち境界領域52cを除く部分である。
【0066】
分割領域53は、他の分割領域と接する境界から所定の距離以内にある点の集合である境界領域53a,53b,53cを含む。境界領域53cは、上辺から所定の距離以内にありかつ右辺から所定の距離以内にある点の集合である。境界領域53aは、上辺から所定の距離以内にある点の集合のうち境界領域53cを除く部分である。境界領域53bは、右辺から所定の距離以内にある点の集合のうち境界領域53cを除く部分である。
【0067】
分割領域54は、他の分割領域と接する境界から所定の距離以内にある点の集合である境界領域54a,54b,54cを含む。境界領域54cは、上辺から所定の距離以内にありかつ左辺から所定の距離以内にある点の集合である。境界領域54aは、上辺から所定の距離以内にある点の集合のうち境界領域54cを除く部分である。境界領域54bは、左辺から所定の距離以内にある点の集合のうち境界領域54cを除く部分である。
【0068】
前述のように、2つの分割領域の境界を跨がって、一方の分割領域に属する粒子が他方の分割領域に属する粒子と接触する可能性がある。そこで、計算ノード100,100-1,100-2,100-3は、境界領域に属する粒子の粒子データを相互に通知する。
【0069】
具体的には、計算ノード100は、境界領域51b,51cの粒子データを計算ノード100-1に送信し、境界領域51a,51cの粒子データを計算ノード100-2に送信し、境界領域51cの粒子データを計算ノード100-3に送信する。計算ノード100-1は、境界領域52b,52cの粒子データを計算ノード100に送信し、境界領域52cの粒子データを計算ノード100-2に送信し、境界領域52a,52cの粒子データを計算ノード100-3に送信する。計算ノード100-2は、境界領域53a,53cの粒子データを計算ノード100に送信し、境界領域53cの粒子データを計算ノード100-1に送信し、境界領域53b,53cの粒子データを計算ノード100-3に送信する。計算ノード100-3は、境界領域54cの粒子データを計算ノード100に送信し、境界領域54a,54cの粒子データを計算ノード100-1に送信し、境界領域54b,54cの粒子データを計算ノード100-2に送信する。
【0070】
これにより、分割領域51を担当する計算ノード100は、分割領域51に属する粒子の粒子データに加えて、境界領域52b,52c,53a,53c,54cに属する粒子の粒子データをもつことになる。計算ノード100は、分割領域51に属する粒子それぞれについて、接触粒子を判定して位置および速度を計算する。計算ノード100から見て、分割領域51を「main領域」と言うことがあり、境界領域52b,52c,53a,53c,54cの集合を「skirt領域」と言うことがある。
【0071】
同様に、分割領域52を担当する計算ノード100-1は、分割領域52に属する粒子の粒子データに加えて、境界領域51b,51c,53c,54a,54cに属する粒子の粒子データをもつことになる。計算ノード100-1は、分割領域52に属する粒子それぞれについて、接触粒子を判定して位置および速度を計算する。計算ノード100-1から見て、分割領域52を「main領域」と言うことがあり、境界領域51b,51c,53c,54a,54cの集合を「skirt領域」と言うことがある。
【0072】
分割領域53を担当する計算ノード100-2は、分割領域53に属する粒子の粒子データに加えて、境界領域51a,51c,52c,54b,54cに属する粒子の粒子データをもつことになる。計算ノード100-2は、分割領域53に属する粒子それぞれについて、接触粒子を判定して位置および速度を計算する。計算ノード100-2から見て、分割領域53を「main領域」と言うことがあり、境界領域51a,51c,52c,54b,54cの集合を「skirt領域」と言うことがある。
【0073】
分割領域54を担当する計算ノード100-3は、分割領域54に属する粒子の粒子データに加えて、境界領域51c,52a,52c,53b,53cに属する粒子の粒子データをもつことになる。計算ノード100-3は、分割領域54に属する粒子それぞれについて、接触粒子を判定して位置および速度を計算する。計算ノード100-3から見て、分割領域54を「main領域」と言うことがあり、境界領域51c,52a,52c,53b,53cの集合を「skirt領域」と言うことがある。
【0074】
また、前述のように、ステップを1つ進めると、ある分割領域に属する粒子が他の分割領域に移動することがある。粒子が属する分割領域は、その粒子の中心の座標によって判断される。そこで、計算ノード100,100-1,100-2,100-3は、担当する分割領域の外に移動した粒子の粒子データを相互に交換する。
【0075】
具体的には、計算ノード100は、分割領域51の右辺から出た粒子の粒子データを計算ノード100-1に送信し、下辺から出た粒子の粒子データを計算ノード100-2に送信し、右下から出た粒子の粒子データを計算ノード100-3に送信する。計算ノード100-1は、分割領域52の左辺から出た粒子の粒子データを計算ノード100に送信し、左下から出た粒子の粒子データを計算ノード100-2に送信し、下辺から出た粒子の粒子データを計算ノード100-3に送信する。計算ノード100-2は、分割領域53の上辺から出た粒子の粒子データを計算ノード100に送信し、右上から出た粒子の粒子データを計算ノード100-1に送信し、右辺から出た粒子の粒子データを計算ノード100-3に送信する。計算ノード100-3は、分割領域54の左上から出た粒子の粒子データを計算ノード100に送信し、上辺から出た粒子の粒子データを計算ノード100-1に送信し、左辺から出た粒子の粒子データを計算ノード100-2に送信する。
【0076】
図6は、周辺粒子の移動例を示す第1の図である。
main領域61は、
図5の分割領域51に相当する。skirt領域62は、
図5の境界領域52b,52c,53a,53c,54cの集合に相当する。main領域61に属する1つの粒子に着目すると、着目する粒子の周辺に存在する周辺粒子は、main領域61に属するかskirt領域62に属するか、および、着目する粒子と接触しているか否かによって、4通りの状態に分けられる。そして、前ステップの状態と現ステップの状態の組み合わせによって、周辺粒子の移動は16パターンに分けられる。ここでは、16パターンのうちの4パターンについて図示している。
【0077】
粒子63は、main領域61の中の着目する粒子である。粒子63-1~63-4は、粒子63の周辺に存在する周辺粒子である。前ステップにおいて、粒子63-1,63-3は、main領域61に属しており粒子63と接触している。粒子63-2,63-4は、skirt領域62に属しており粒子63と接触している。現ステップでは、粒子63-1は、main領域61に属しており粒子63と接触している。粒子63-2は、skirt領域62からmain領域61に移動しており粒子63と接触している。粒子63-3は、main領域61からskirt領域62に移動しており粒子63と接触している。粒子63-4は、skirt領域62に属しており粒子63と接触している。
【0078】
このような粒子63-1~63-4は、前ステップおよび現ステップの両方で粒子63と接触している。よって、粒子63の合力を計算するにあたり、粒子63-1~63-4それぞれの接線方向の変位量を前ステップから現ステップに複写することになる。
【0079】
図7は、周辺粒子の移動例を示す第2の図である。
ここでは、前述の16パターンのうちの残りの12パターンについて図示している。粒子63-5~63-16は、粒子63の周辺に存在する周辺粒子である。
【0080】
前ステップにおいて、粒子63-5,63-11は、main領域61に属しており粒子63と接触している。粒子63-6,63-7,63-12,63-13は、main領域61に属しており粒子63と接触していない。粒子63-8,63-14は、skirt領域62に属しており粒子63と接触している。粒子63-9,63-10,63-15,63-16は、skirt領域62に属しており粒子63と接触していない。
【0081】
現ステップでは、粒子63-5は、main領域61に属しており粒子63から離れている。粒子63-6は、main領域61に属しており粒子63と接触している。粒子63-7は、main領域61に属しており粒子63と接触していない。粒子63-8は、skirt領域62からmain領域61に移動しており粒子63から離れている。
【0082】
粒子63-9は、skirt領域62からmain領域61に移動しており粒子63と接触している。粒子63-10は、skirt領域62からmain領域61に移動しており粒子63と接触していない。粒子63-11は、main領域61からskirt領域62に移動しており粒子63から離れている。粒子63-12は、main領域61からskirt領域62に移動しており粒子63と接触している。
【0083】
粒子63-13は、main領域61からskirt領域62に移動しており粒子63と接触していない。粒子63-14は、skirt領域62に属しており粒子63から離れている。粒子63-15は、skirt領域62に属しており粒子63と接触している。粒子63-16は、skirt領域62に属しており粒子63と接触していない。
【0084】
このような粒子63-5~63-16は、前ステップおよび現ステップの少なくとも一方で粒子63と接触していない。よって、粒子63の合力を計算するにあたり、粒子63-5~63-16の接線方向の変位量の複写は発生しない。
【0085】
図8は、接線方向の変位量の複写例を示す図である。
ここでは、接線方向の変位量を複写する比較的単純な方法を考える。
main領域内の1つの粒子に対して、前ステップの接触粒子リスト71と前ステップの変位量リスト72が生成されている。接触粒子リスト71は、前ステップにおいて当該粒子と接触している接触粒子の粒子番号を列挙したデータである。接触粒子は、main領域に属していることもあるしskirt領域に属していることもある。変位量リスト72は、接触粒子リスト71に登録された粒子番号と対応付けて、粒子番号が示す接触粒子の前ステップまでの接線方向の変位量を列挙したデータである。
【0086】
ステップを1つ進める、すなわち、シミュレーション上の時刻を単位ステップ時間だけ進めると、上記と同じ粒子に対して、現ステップの接触粒子リスト73と現ステップの変位量リスト74が生成される。接触粒子リスト73は、現ステップにおいて当該粒子と接触している接触粒子の粒子番号を列挙したデータである。変位量リスト74は、接触粒子リスト73に登録された粒子番号と対応付けて、粒子番号が示す接触粒子の現ステップまでの接線方向の変位量を列挙したデータである。
【0087】
現ステップにおいて接触粒子リスト73および変位量リスト74の生成が完了すると、前ステップの接触粒子リスト71および変位量リスト72は削除してよい。ただし、接触粒子リスト71と接触粒子リスト73に同じ接触粒子が登録されている場合、その接触粒子に対応する変位量が変位量リスト72から変位量リスト74に複写される。これにより、前ステップまでの変位量が現ステップの開始時点で複写されることになる。
【0088】
そして、複写された変位量に、前ステップから現ステップまでの間の接線方向の相対的な移動量(変位量の増分)を加えて、現ステップまでの変位量が算出される。接線方向の変位量の増分は、例えば、着目する粒子の現ステップの速度の接線方向の成分に単位ステップ時間を乗じたものから、接触粒子の現ステップの速度の接線方向の成分に単位ステップ時間を乗じたものを引くことで算出することができる。
【0089】
接線方向の変位量を複写する1つの方法として、以下の方法が考えられる。まず、前ステップの接触粒子リスト71とは関係なく、着目する粒子とmain領域またはskirt領域に属する各粒子との間で接触の有無を判定し、現ステップの接触粒子を検出する。これにより、現ステップの接触粒子リスト73が生成される。
【0090】
接触粒子リスト73が生成されると、接触粒子リスト73に登録された接触粒子毎に、接触粒子リスト71を走査して同じ接触粒子を接触粒子リスト71から検索する。同じ接触粒子が接触粒子リスト71から検出されると、接触粒子リスト71の当該接触粒子の位置に対応する変位量リスト72の位置から変位量を読み出す。そして、接触粒子リスト73の当該接触粒子の位置に対応する変位量リスト74の位置に変位量を複写する。一方、同じ接触粒子が接触粒子リスト71に存在しない場合、接触粒子リスト73の当該接触粒子の位置に対応する変位量リスト74の位置に変位量=0を書き込む。
【0091】
例えば、接触粒子リスト73の1番目の要素が接触粒子リスト71の1番目の要素と同じ接触粒子を示している場合、変位量リスト72の1番目の要素が変位量リスト74の1番目の要素として複写される。また、接触粒子リスト73の2番目の要素が接触粒子リスト71の3番目の要素と同じ接触粒子を示している場合、変位量リスト72の3番目の要素が変位量リスト74の2番目の要素として複写される。また、接触粒子リスト73の3番目および4番目の要素と同じ接触粒子を示す要素が接触粒子リスト71に存在しない場合、変位量リスト74の3番目および4番目の要素が変位量=0に設定される。
【0092】
上記の変位量の複写方法では、接触粒子リスト71,73に登録され得る接触粒子の平均個数をNとすると、接触粒子リスト71,73の間で粒子番号を比較する比較処理の計算量がO(N2)になる。ステップを1つ進める毎にmain領域に属する各粒子に対してこのような比較処理を行うことは負荷が高い。そこで、第2の実施の形態の計算ノード100,100-1,100-2,100-3は、比較処理の計算量が削減されるように、現ステップの接触粒子リスト73を生成するアルゴリズムを改善する。現ステップの接触粒子リスト73の生成方法の詳細は後述する。
【0093】
なお、接触粒子リスト71,73に含まれる粒子番号は、1つの計算ノードの中で一意なローカルの識別番号である。例えば、計算ノード100は、計算ノード100のmain領域に属する粒子およびskirt領域に属する粒子に対して、計算ノード100-1,100-2,100-3とは独立に粒子番号を付与する。分割領域間で粒子の出入りがあると、同じ粒子に対して前ステップと現ステップで異なる粒子番号が付与されることがある。ただし、計算ノード100は、main領域に留まっている粒子については、前ステップの粒子番号と現ステップの粒子番号の対応を把握している。また、第2の実施の形態では、粒子の識別番号として、粒子番号に加えてグローバルIDを併用する。グローバルIDは、全ての計算ノードを通じて一意なグローバルの識別番号である。
【0094】
次に、計算ノード100の機能について説明する。
図9は、計算ノードの機能例を示すブロック図である。
計算ノード100は、モデル記憶部121、中間データ記憶部122、結果データ記憶部123、データ入出力部124、ステップ実行部125およびプロセス間通信部126を有する。モデル記憶部121、中間データ記憶部122および結果データ記憶部123は、例えば、RAM102またはHDD103の記憶領域を用いて実現される。データ入出力部124、ステップ実行部125およびプロセス間通信部126は、例えば、CPU101が実行するプログラムを用いて実現される。計算ノード100-1,100-2,100-3も、計算ノード100と同様のモジュールを有する。
【0095】
モデル記憶部121は、計算ノード100が担当する分割領域についてのモデルを示す入力データを記憶する。入力データには、分割領域の大きさ、分割領域の座標、壁の位置などの領域データが含まれる。また、入力データには、分割領域に初期配置されている粒子の位置が含まれる。また、入力データには、重力、粒子の半径、接触モデルの弾性係数、接触モデルの粘性減衰係数などの物理パラメータが含まれる。また、入力データには、単位ステップ時間、最大ステップ数などの制御パラメータが含まれる。
【0096】
中間データ記憶部122は、シミュレーション途中で生成される中間データを記憶する。中間データには、main領域に属する粒子の位置や速度を示す粒子データと、skirt領域に属する粒子の位置や速度を示す粒子データが含まれる。また、中間データには、前ステップの粒子番号と現ステップの粒子番号の対応情報が含まれる。また、中間データには、main領域に属する粒子毎の接触粒子リストや変位量リストが含まれる。
【0097】
結果データ記憶部123は、計算ノード100が担当する分割領域のシミュレーション結果を示す結果データを記憶する。結果データには、ステップ毎に、当該ステップで分割領域の中に存在していた粒子およびその粒子の位置を示す情報が含まれる。各粒子の位置を時系列に追跡することで、粉体の動きを可視化することが可能となる。
【0098】
データ入出力部124は、並列処理を制御する管理ノード200と通信する。データ入出力部124は、計算ノード100が担当する分割領域の入力データを管理ノード200から受信し、入力データをモデル記憶部121に格納する。また、データ入出力部124は、ステップ数が最大ステップ数に到達すると、結果データ記憶部123から結果データを読み出して管理ノード200に送信する。管理ノード200では、複数の分割領域の結果データが集約され、全体領域における粉体の動きが可視化される。
【0099】
ステップ実行部125は、モデル記憶部121に記憶された入力データを用いて、担当する分割領域の中での粒子の動きを時間軸に沿って1ステップずつ計算する。ステップを1つ進めることは、シミュレーション上の時刻を所定の微細時間だけ進めることに相当する。1つのステップは、分割領域に属する粒子毎に、接触粒子を判定して接触粒子から受ける接触力を算出し、接触力と重力を合成した合力を算出し、現在の位置と速度と合力から次の時刻の位置と速度を算出することを含む。ステップ実行部125は、中間データ記憶部122に記憶された中間データを適宜更新する。また、ステップ実行部125は、各ステップにおける粒子の位置を結果データ記憶部123に書き込む。
【0100】
プロセス間通信部126は、計算ノード100のステップ実行部125で実行されるプロセスと計算ノード100-1,100-2,100-3で実行されるプロセスとの間のプロセス間通信を実現する。プロセス間通信部126は、中間データ記憶部122から一部の中間データを読み出して計算ノード100-1,100-2,100-3に送信する。また、プロセス間通信部126は、計算ノード100-1,100-2,100-3から中間データを受信して中間データ記憶部122に格納する。
【0101】
計算ノード100-1,100-2,100-3に送信する中間データには、計算ノード100が担当する分割領域の外に出た粒子の粒子データが含まれる。また、送信する中間データには、計算ノード100-1,100-2,100-3にとってskirt領域に相当する境界領域にある粒子の粒子データが含まれる。計算ノード100-1,100-2,100-3から受信する中間データには、計算ノード100が担当する分割領域の中に入った粒子の粒子データが含まれる。また、受信する中間データには、計算ノード100にとってskirt領域に相当する境界領域にある粒子の粒子データが含まれる。
【0102】
図10は、結果テーブルの例を示す図である。
結果テーブル131は、結果データ記憶部123に記憶される。結果テーブル131は、ステップ番号、グローバルIDおよび位置の項目を含む。ステップ番号の項目には、ステップを識別する1以上の整数が登録される。ステップ番号=1は、シミュレーション開始時の初期状態に相当する。グローバルIDの項目には、粒子を識別する識別番号であって、全ての粒子を通じて一意なグローバルの識別番号が登録される。位置の項目には、粒子の位置を示す座標が登録される。なお、入力データには、粒子の初期配置の情報として、ステップ番号=1に対応するグローバルIDと位置が含まれている。
【0103】
図11は、粒子テーブルおよび粒子番号対応テーブルの例を示す図である。
main粒子テーブル132は、中間データ記憶部122に記憶される。main粒子テーブル132は、main領域に属する粒子の最新の粒子データを示す。main粒子テーブル132は、グローバルID、位置および速度の項目を含む。グローバルIDの項目には、main領域に属する粒子に付与されたグローバルIDが登録される。位置の項目には、main領域に属する粒子の位置を示す座標が登録される。速度の項目には、main領域に属する粒子の速度ベクトルが登録される。シミュレーション対象領域が二次元である場合、座標や速度ベクトルは二次元ベクトルである。
【0104】
main粒子テーブル132のレコードの順番を示すインデックスが、main領域に属する粒子の粒子番号として使用される。例えば、main粒子テーブル132の1番目のレコードが示す粒子は、粒子番号=1をもつ。main領域の外に粒子が出た場合、その粒子に対応するレコードがmain粒子テーブル132から削除される。main領域の中に粒子が入った場合、その粒子に対応するレコードがmain粒子テーブル132に挿入される。よって、ステップを1つ進めると既存のレコードのインデックスが変わることがあり、結果として既存の粒子の粒子番号が変わることがある。
【0105】
なお、main粒子テーブル132を多次元配列として形成することもできる。また、main粒子テーブル132を、グローバルID配列と位置配列と速度配列の3つの一次元配列として形成することもできる。インデックスは配列の添え字に相当する。main粒子テーブル132を3つの一次元配列として形成した場合、同じインデックスが指すグローバルIDと位置と速度は、同じ粒子についての情報として対応付けられる。
【0106】
skirt粒子テーブル133は、中間データ記憶部122に記憶される。skirt粒子テーブル133は、skirt領域に属する粒子の最新の粒子データを示す。skirt粒子テーブル133は、グローバルID、位置および速度の項目を含む。グローバルIDの項目には、skirt領域に属する粒子に付与されたグローバルIDが登録される。位置の項目には、skirt領域に属する粒子の位置を示す座標が登録される。速度の項目には、skirt領域に属する粒子の速度ベクトルが登録される。
【0107】
skirt粒子テーブル133のレコードの順番を示すインデックスに、所定のプレフィックスを付加したものが、skirt領域に属する粒子の粒子番号として使用される。プレフィックスは、main領域に属する粒子の粒子番号と衝突しないように付与される。例えば、skirt粒子テーブル133の1番目のレコードが示す粒子は、粒子番号=900001をもつ。skirt粒子テーブル133の粒子データは、計算ノード100-1,100-2,100-3から受信したものである。
【0108】
なお、skirt粒子テーブル133を多次元配列として形成することもできる。また、skirt粒子テーブル133を、グローバルID配列と位置配列と速度配列の3つの一次元配列として形成することもできる。インデックスは配列の添え字に相当する。skirt粒子テーブル133を3つの一次元配列として形成した場合、同じインデックスが指すグローバルIDと位置と速度は、同じ粒子についての情報として対応付けられる。
【0109】
main粒子テーブル132の位置および速度は、計算ノード100によって更新され得る。また、main粒子テーブル132に登録されたレコードは、次のステップでも保持され得る。これに対して、skirt粒子テーブル133の位置および速度は、計算ノード100-1,100-2,100-3によって算出されるものであり、計算ノード100によって更新されない。また、skirt粒子テーブル133に登録されたレコードは、ステップ毎にリセットされ次のステップでは保持されない。計算ノード100は、ステップ毎に、計算ノード100-1,100-2,100-3から受信したskirt領域の粒子データを集約して、新規のskirt粒子テーブル133を生成すればよい。
【0110】
粒子番号対応テーブル134は、中間データ記憶部122に記憶される。粒子番号対応テーブル134は、前ステップにおいてmain領域に属しており現ステップでもmain領域に留まっている粒子について、前ステップの粒子番号(旧粒子番号)と現ステップの粒子番号を対応付ける。粒子番号対応テーブル134は、旧粒子番号の一次元配列である。粒子番号対応テーブル134のインデックスは、現ステップの粒子番号に対応する。
【0111】
1つのインデックスと当該インデックスが指す旧粒子番号は、同じ粒子についての現ステップの粒子番号と前ステップの粒子番号を表している。例えば、粒子番号対応テーブル134の1番目のレコードが旧粒子番号=3を示している場合、前ステップの粒子番号=3の粒子と現ステップの粒子番号=2の粒子が同一である。旧粒子番号から現ステップの粒子番号を高速に検索できるように粒子番号対応テーブル134を形成してもよい。
【0112】
なお、計算ノード100は、main領域の粒子の出入りをmain粒子テーブル132に反映させる際に粒子番号対応テーブル134を生成する。計算ノード100は、main粒子テーブル132のレコード削除やレコード挿入を行うことから、main領域に留まる粒子の粒子番号の変化を把握している。一方、計算ノード100は、skirt粒子テーブル133をステップ毎にリセットすることから、skirt領域に留まる粒子やmain領域とskirt領域の間で移動した粒子の粒子番号の変化は把握しない。
【0113】
図12は、接触粒子リストの例を示す図である。
第2の実施の形態では、計算ノード100は、main領域に属する粒子それぞれに対して、接触粒子リストとグローバルIDリストと変位量リストを生成する。現ステップの接触粒子リストとグローバルIDリストと変位量リストが完成するまで、一時的に前ステップの接触粒子リストとグローバルIDリストと変位量リストが併存する。また、第2の実施の形態では、計算ノード100は、相手粒子である接触粒子を、main領域に属する接触粒子とskirt領域に属する接触粒子に分類する。そして、計算ノード100は、接触粒子リストとグローバルIDリストと変位量リストをそれぞれ、main領域に関するリストとskirt領域に関するリストに分割する。
【0114】
具体的には、中間データ記憶部122は、前ステップについて、main接触粒子リスト141、グローバルIDリスト142、変位量リスト143、skirt接触粒子リスト144、グローバルIDリスト145および変位量リスト146を記憶する。また、中間データ記憶部122は、現ステップについて、main接触粒子リスト151、グローバルIDリスト152、変位量リスト153、skirt接触粒子リスト154、グローバルIDリスト155および変位量リスト156を記憶する。
【0115】
main接触粒子リスト141は、前ステップにおいて着目する粒子と接触している接触粒子のうち、main領域に属する接触粒子の粒子番号を列挙したデータである。グローバルIDリスト142は、main接触粒子リスト141に登録された接触粒子のグローバルIDを列挙したデータである。変位量リスト143は、着目する粒子とmain接触粒子リスト141に登録された接触粒子との間の前ステップまでの接線方向の変位量を列挙したデータである。main接触粒子リスト141とグローバルIDリスト142と変位量リスト143の長さは同じである。main接触粒子リスト141のn番目(nは1以上の整数)の粒子番号と、グローバルIDリスト142のn番目のグローバルIDと、変位量リスト143のn番目の変位量は、同一の接触粒子の情報である。
【0116】
skirt接触粒子リスト144は、前ステップにおいて着目する粒子と接触している接触粒子のうち、skirt領域に属する接触粒子の粒子番号を列挙したデータである。グローバルIDリスト145は、skirt接触粒子リスト144に登録された接触粒子のグローバルIDを列挙したデータである。変位量リスト146は、着目する粒子とskirt接触粒子リスト144に登録された接触粒子との間の前ステップまでの接線方向の変位量を列挙したデータである。skirt接触粒子リスト144とグローバルIDリスト145と変位量リスト146の長さは同じである。skirt接触粒子リスト144のn番目の粒子番号と、グローバルIDリスト145のn番目のグローバルIDと、変位量リスト146のn番目の変位量は、同一の接触粒子の情報である。
【0117】
main接触粒子リスト151は、現ステップにおいて着目する粒子と接触している接触粒子のうち、main領域に属する接触粒子の粒子番号を列挙したデータである。グローバルIDリスト152は、main接触粒子リスト151に登録された接触粒子のグローバルIDを列挙したデータである。変位量リスト153は、着目する粒子とmain接触粒子リスト151に登録された接触粒子との間の現ステップまでの接線方向の変位量を列挙したデータである。main接触粒子リスト151とグローバルIDリスト152と変位量リスト153の長さは同じである。main接触粒子リスト151のn番目の粒子番号と、グローバルIDリスト152のn番目のグローバルIDと、変位量リスト153のn番目の変位量は、同一の接触粒子の情報である。
【0118】
skirt接触粒子リスト154は、現ステップにおいて着目する粒子と接触している接触粒子のうち、skirt領域に属する接触粒子の粒子番号を列挙したデータである。グローバルIDリスト155は、skirt接触粒子リスト154に登録された接触粒子のグローバルIDを列挙したデータである。変位量リスト156は、着目する粒子とskirt接触粒子リスト154に登録された接触粒子との間の現ステップまでの接線方向の変位量を列挙したデータである。skirt接触粒子リスト154とグローバルIDリスト155と変位量リスト156の長さは同じである。skirt接触粒子リスト154のn番目の粒子番号と、グローバルIDリスト155のn番目のグローバルIDと、変位量リスト156のn番目の変位量は、同一の接触粒子の情報である。
【0119】
なお、main領域に属する粒子のうち、skirt領域から近い粒子がもつskirt接触粒子リスト144,154、グローバルIDリスト145,155および変位量リスト146,156は、空でない(要素数が1以上である)ことがある。一方、skirt領域から遠い粒子がもつskirt接触粒子リスト144,154、グローバルIDリスト145,155および変位量リスト146,156は、空である(要素数が0である)と期待される。よって、多くの粒子のskirt接触粒子リスト144,154、グローバルIDリスト145,155および変位量リスト146,156は空になる。
【0120】
次に、計算ノード100の処理手順について説明する。
図13は、離散要素法の手順例を示すフローチャートである。
(S10)データ入出力部124は、計算ノード100が担当する分割領域の入力データを管理ノード200から受信する。ステップ実行部125は、入力データに基づいてmain粒子テーブル132を初期化する。初期化されたmain粒子テーブル132には、入力データに含まれる各粒子のグローバルIDおよび位置が登録される。main粒子テーブル132の各粒子の速度は0に設定される。ただし、入力データに速度の初期値が含まれる場合、その初期値がmain粒子テーブル132に登録される。
【0121】
(S11)プロセス間通信部126は、main粒子テーブル132から、main領域に属する粒子のうち境界領域にある粒子の粒子データを検索する。境界領域は、main領域のうちskirt領域から所定の距離以内にある領域である。粒子が境界領域に属するか否かは、入力データに含まれる分割領域の範囲の座標とmain粒子テーブル132に含まれる位置の座標から判定できる。1つの粒子の粒子データは、main粒子テーブル132の1つのレコードに相当し、グローバルIDと位置と速度を含む。プロセス間通信部126は、main粒子テーブル132から検索された境界領域の粒子データを複写して計算ノード100-1,100-2,100-3に送信する。
【0122】
(S12)プロセス間通信部126は、計算ノード100-1,100-2,100-3から境界領域の粒子データを受信する。ここで受信する粒子データは、計算ノード100にとってのskirt領域に属する粒子の粒子データである。プロセス間通信部126は、受信した粒子データをskirt粒子テーブル133に登録する。1つの粒子の粒子データは、skirt粒子テーブル133の1つのレコードに相当し、グローバルIDと位置と速度を含む。なお、skirt粒子テーブル133に前ステップの粒子データが残っている場合、前ステップの粒子データは破棄される。
【0123】
(S13)ステップ実行部125は、main領域に属する粒子それぞれに対応する接触粒子リストとグローバルIDリストと変位量リストを生成する。ここでは、ステップ実行部125は、現ステップのmain接触粒子リスト151、skirt接触粒子リスト154、グローバルIDリスト152,155および変位量リスト153,156を生成する。ステップ実行部125は、前ステップのmain接触粒子リスト141、skirt接触粒子リスト144、グローバルIDリスト142,145および変位量リスト143,146を、複写処理が完了した後に破棄する。複写処理では、前ステップの変位量リスト143,146から現ステップの変位量リスト153,156に変位量が複写されることがある。接触粒子リスト生成の詳細は後述する。
【0124】
(S14)ステップ実行部125は、main領域に属する粒子それぞれの変位量リスト153,156に含まれる変位量を更新する。変位量リスト153の更新では、ステップ実行部125は、main粒子テーブル132から接触粒子の速度を読み出し、接触粒子に対する着目する粒子の相対速度を算出し、相対速度の接線方向の成分を算出する。ステップ実行部125は、相対速度の接線方向の成分に基づいて、前ステップから現ステップまでの接線方向の変位量の増分を算出し、変位量リスト153の変位量に増分を加算する。変位量リスト156の更新では、同様に、ステップ実行部125は、skirt粒子テーブル133から接触粒子の速度を読み出し、前ステップから現ステップまでの接線方向の変位量の増分を算出して変位量リスト156の変位量に加算する。なお、変位量リスト153,156の更新は、ステップS13の中で行ってもよい。
【0125】
(S15)ステップ実行部125は、main領域に属する粒子それぞれにかかる合力を算出する。合力の算出では、ステップ実行部125は、main接触粒子リスト151に登録された接触番号の粒子データをmain粒子テーブル132から読み出し、skirt接触粒子リスト154に登録された接触番号の粒子データをskirt粒子テーブル133から読み出す。ステップ実行部125は、接触粒子それぞれについて、着目する粒子の位置および速度と、接触粒子の位置および速度と、接触粒子の接線方向の変位量と、入力データに含まれる弾性係数および粘性減衰係数から、前述の接触モデルに従って接触力を算出する。ステップ実行部125は、着目する粒子が1以上の接触粒子から受ける接触力と重力などの外力とを合成して、着目する粒子にかかる合力を算出する。
【0126】
(S16)ステップ実行部125は、main領域に属する粒子それぞれについて、ステップS15で算出した合力と粒子の質量から加速度を算出し、現在の位置と現在の速度と加速度から、単位ステップ時間後の位置と速度を算出する。ステップ実行部125は、main粒子テーブル132に登録された各粒子の位置および速度を更新する。また、ステップ実行部125は、結果テーブル131に各粒子の次ステップの位置を追記する。
【0127】
(S17)プロセス間通信部126は、main粒子テーブル132から、計算ノード100が担当する分割領域(main領域)の外に出た粒子の粒子データを抽出する。粒子が分割領域の外に出たか否かは、入力データに含まれる分割領域の範囲の座標とmain粒子テーブル132に含まれる位置の座標から判定できる。プロセス間通信部126は、main粒子テーブル132から抽出した粒子データを計算ノード100-1,100-2,100-3に送信する。送信する粒子データには、グローバルIDと位置と速度が含まれる。抽出した粒子データはmain粒子テーブル132から削除される。なお、main粒子テーブル132から1以上のレコードを削除した場合、隙間が生じないように残っているレコードをシフトして詰めるようにしてもよい。これにより、残っているレコードのインデックスが変更されることがある。
【0128】
(S18)プロセス間通信部126は、計算ノード100-1,100-2,100-3から、計算ノード100が担当する分割領域(main領域)の中に入った粒子の粒子データを受信する。受信する粒子データには、グローバルIDと位置と速度が含まれる。プロセス間通信部126は、受信した粒子データをmain粒子テーブル132に挿入する。例えば、新たなレコードがmain粒子テーブル132の末尾に追加される。
【0129】
(S19)プロセス間通信部126は、ステップS17,S18におけるmain粒子テーブル132のレコードの削除および挿入を監視し、削除されずに残っている既存レコードのインデックスの変化を追跡する。既存レコードは、現ステップでmain領域に属しており次ステップでもmain領域に留まっている粒子を示す。プロセス間通信部126は、現ステップの粒子番号と次ステップの粒子番号の対応を示す粒子番号対応テーブル134を生成する。古い粒子番号対応テーブル134は破棄してよい。
【0130】
(S20)ステップ実行部125は、ステップの繰り返しを終了するか判断する。例えば、ステップ実行部125は、ステップ数が入力データで指定された最大ステップ数に到達したか判断する。繰り返しを終了する場合はステップS21に進み、繰り返しをまだ終了しない場合はステップS11に戻る。
【0131】
(S21)データ入出力部124は、結果データ記憶部123から結果テーブル131を読み出し、結果テーブル131の結果データを管理ノード200に送信する。
図14は、接触粒子リスト生成の手順例を示すフローチャートである。
【0132】
接触粒子リスト生成は、前述のステップS13で実行される。接触粒子リスト生成は、main領域に属する粒子それぞれに対して実行される。
以下のステップS30~S37は、前ステップではmain領域で接触しており現ステップでもmain領域で接触している接触粒子(main-main粒子と言うことがある)の変位量の複写を含む。この接触粒子は前述の粒子63-1に相当する。
【0133】
(S30)ステップ実行部125は、前ステップのmain接触粒子リスト141に登録された旧粒子番号の中から、旧粒子番号を1つ選択する。
(S31)ステップ実行部125は、粒子番号対応テーブル134から、ステップS30で選択した旧粒子番号に対応する現ステップの粒子番号を検索する。
【0134】
(S32)ステップ実行部125は、ステップS31において該当する粒子番号が粒子番号対応テーブル134から検索されたか判断する。該当する粒子番号がある場合はステップS33に進み、該当する粒子番号が無い場合はステップS37に進む。
【0135】
(S33)ステップ実行部125は、main粒子テーブル132から、ステップS31で検索された粒子番号に対応する位置を読み出す。ステップ実行部125は、着目する粒子の位置と粒子番号が示す相手粒子の位置とに基づいて、接触の有無を判定する。着目する粒子と相手粒子の間の距離が、2つの粒子の半径の和以下であれば接触していると判定され、2つの粒子の半径の和より大きければ接触していないと判定される。なお、着目する粒子の位置は、main粒子テーブル132から予め読み出しておく。
【0136】
(S34)ステップ実行部125は、2つの粒子が接触しているか判断する。接触している場合はステップS35に進み、接触していない場合はステップS37に進む。
(S35)ステップ実行部125は、現ステップのmain接触粒子リスト151の末尾に、相手粒子の粒子番号を追加する。また、ステップ実行部125は、現ステップのグローバルIDリスト152の末尾に、相手粒子のグローバルIDを追加する。グローバルIDは、ステップS30で選択した旧粒子番号に対応するものを前ステップのグローバルIDリスト142から読み出してもよいし、現ステップの粒子番号に対応するものをmain粒子テーブル132から読み出すようにしてもよい。
【0137】
(S36)ステップ実行部125は、前ステップの変位量リスト143から、ステップS30で選択した旧粒子番号に対応する変位量を読み出す。変位量リスト143の所望の変位量には、main接触粒子リスト141の旧粒子番号と同じインデックスを用いてアクセスすることが可能である。ステップ実行部125は、読み出した変位量を、現ステップの変位量リスト153の末尾に追加する。
【0138】
(S37)ステップ実行部125は、ステップS30においてmain接触粒子リスト141の全ての旧粒子番号を選択したか判断する。全ての旧粒子番号を選択した場合はステップS38に進み、未選択の旧粒子番号がある場合はステップS30に戻る。
【0139】
図15は、接触粒子リスト生成の手順例を示すフローチャート(続き1)である。
以下のステップS38~S46は、前ステップではskirt領域で接触しており現ステップではmain領域で接触している接触粒子(skirt-main粒子と言うことがある)の変位量の複写を含む。この接触粒子は前述の粒子63-2に相当する。
【0140】
(S38)ステップ実行部125は、main粒子テーブル132から、着目する粒子以外の粒子番号であって、ステップS30~S37の対象となっていない粒子番号を1つ選択する。ステップS30~S37の対象となったか否かは、フラグによって管理するようにしてもよい。ここで選択する粒子番号が示す相手粒子は、main領域に属する粒子のうち接触の有無をまだ判定していないものである。
【0141】
(S39)ステップ実行部125は、main粒子テーブル132から、ステップS38で選択した粒子番号に対応する位置を読み出す。ステップ実行部125は、着目する粒子の位置と粒子番号が示す相手粒子の位置とに基づいて、接触の有無を判定する。
【0142】
(S40)ステップ実行部125は、2つの粒子が接触しているか判断する。接触している場合はステップS41に進み、接触していない場合はステップS46に進む。
(S41)ステップ実行部125は、現ステップのmain接触粒子リスト151の末尾に、相手粒子の粒子番号を追加する。また、ステップ実行部125は、main粒子テーブル132から、相手粒子の粒子番号に対応するグローバルIDを読み出し、現ステップのグローバルIDリスト152の末尾に、相手粒子のグローバルIDを追加する。
【0143】
(S42)ステップ実行部125は、前ステップのグローバルIDリスト145を先頭から末尾に向かって走査し、相手粒子のグローバルIDを検索する。グローバルIDリスト145は、前ステップでskirt領域に属する粒子を示している。
【0144】
(S43)ステップ実行部125は、ステップS42において該当するグローバルIDが検出されたか判断する。該当するグローバルIDがある場合はステップS45に進み、該当するグローバルIDが無い場合はステップS44に進む。
【0145】
(S44)ステップ実行部125は、現ステップの変位量リスト153の末尾に、変位量が0であることを示す数値を追加する。そして、ステップS46に進む。
(S45)ステップ実行部125は、前ステップの変位量リスト146から、ステップS42で検出されたグローバルIDに対応する変位量を読み出す。変位量リスト146の所望の変位量には、グローバルIDリスト145のグローバルIDと同じインデックスを用いてアクセスすることが可能である。ステップ実行部125は、読み出した変位量を、現ステップの変位量リスト153の末尾に追加する。
【0146】
(S46)ステップ実行部125は、ステップS38においてmain粒子テーブル132の全ての粒子番号を選択したか判断する。全ての粒子番号を選択した場合はステップS47に進み、未選択の粒子番号がある場合はステップS38に戻る。
【0147】
図16は、接触粒子リスト生成の手順例を示すフローチャート(続き2)である。
以下のステップS47~S57は、前ステップではmain領域で接触しており現ステップではskirt領域で接触している接触粒子(main-skirt粒子と言うことがある)の変位量の複写を含む。この接触粒子は前述の粒子63-3に相当する。また、ステップS47~S57は、前ステップではskirt領域で接触しており現ステップでもskirt領域で接触している接触粒子(skirt-skirt粒子と言うことがある)の変位量の複写を含む。この接触粒子は前述の粒子63-4に相当する。
【0148】
(S47)ステップ実行部125は、skirt粒子テーブル133を参照して、現ステップでskirt領域に属する粒子の粒子番号を1つ選択する。粒子番号は、skirt粒子テーブル133のインデックスに所定のプレフィックスを付加したものである。
【0149】
(S48)ステップ実行部125は、skirt粒子テーブル133から、ステップS47で選択した粒子番号に対応する位置を読み出す。ステップ実行部125は、着目する粒子の位置と粒子番号が示す相手粒子の位置とに基づいて、接触の有無を判定する。
【0150】
(S49)ステップ実行部125は、2つの粒子が接触しているか判断する。接触している場合はステップS50に進み、接触していない場合はステップS57に進む。
(S50)ステップ実行部125は、現ステップのskirt接触粒子リスト154の末尾に、相手粒子の粒子番号を追加する。また、ステップ実行部125は、skirt粒子テーブル133から、相手粒子の粒子番号に対応するグローバルIDを読み出し、現ステップのグローバルIDリスト155の末尾に、相手粒子のグローバルIDを追加する。
【0151】
(S51)ステップ実行部125は、前ステップのグローバルIDリスト142を先頭から末尾に向かって走査し、相手粒子のグローバルIDを検索する。グローバルIDリスト142は、前ステップでmain領域に属する粒子を示している。
【0152】
(S52)ステップ実行部125は、ステップS51において該当するグローバルIDが検出されたか判断する。該当するグローバルIDがある場合はステップS56に進み、該当するグローバルIDが無い場合はステップS53に進む。
【0153】
(S53)ステップ実行部125は、前ステップのグローバルIDリスト145を先頭から末尾に向かって走査し、相手粒子のグローバルIDを検索する。グローバルIDリスト145は、前ステップでskirt領域に属する粒子を示している。
【0154】
(S54)ステップ実行部125は、ステップS53において該当するグローバルIDが検出されたか判断する。該当するグローバルIDがある場合はステップS56に進み、該当するグローバルIDが無い場合はステップS55に進む。
【0155】
(S55)ステップ実行部125は、現ステップの変位量リスト156の末尾に、変位量が0であることを示す数値を追加する。そして、ステップS57に進む。
(S56)ステップ実行部125は、前ステップの変位量リスト143から、ステップS51で検出されたグローバルIDに対応する変位量を読み出す。変位量リスト143の所望の変位量には、グローバルIDリスト142のグローバルIDと同じインデックスを用いてアクセスすることが可能である。または、ステップ実行部125は、前ステップの変位量リスト146から、ステップS53で検出されたグローバルIDに対応する変位量を読み出す。変位量リスト146の所望の変位量には、グローバルIDリスト145のグローバルIDと同じインデックスを用いてアクセスすることが可能である。ステップ実行部125は、読み出した変位量を、現ステップの変位量リスト156の末尾に追加する。
【0156】
(S57)ステップ実行部125は、ステップS47においてskirt粒子テーブル133の全ての粒子番号を選択したか判断する。全ての粒子番号を選択した場合は接触粒子リスト生成が終了し、未選択の粒子番号がある場合はステップS47に戻る。
【0157】
第2の実施の形態の情報処理システムによれば、離散要素法の粒子シミュレーションにおいて、main領域に属する粒子それぞれに対して、接触粒子を列挙した接触粒子リストと接触粒子の接線方向の変位量を列挙した変位量リストが生成される。よって、main領域に属する粒子が接触粒子から受ける接触力を効率的に算出することができる。また、接触粒子リストが、main領域に属する接触粒子を示すmain接触粒子リストとskirt領域に属する接触粒子を示すskirt接触粒子リストに分割される。よって、接触粒子が存在する領域に応じて接触粒子の情報を効率的に管理することができる。
【0158】
また、現ステップのmain接触粒子リストを生成する際には、前ステップのmain接触粒子リストに登録されている相手粒子について優先的に接触の有無が判定される。その後に、前ステップのmain接触粒子リストに登録されていない相手粒子について接触の有無が判定される。よって、main-main粒子について、前ステップの変位量リストから現ステップの変位量リストへの変位量の複写を効率化できる。
【0159】
例えば、main粒子テーブルから現ステップのmain領域の接触粒子を検出し、その接触粒子を前ステップのmain接触粒子リストから探すようにすると、前ステップのmain接触粒子リストを繰り返し走査することになる。main接触粒子リストの平均長をNとすると、その計算量はO(N2)になる。これに対して、第2の実施の形態では、前ステップのmain接触粒子リストを1回走査することで、変位量を複写することになるmain-main粒子を特定でき、複写する変位量を前ステップの変位量リストから効率的に読み出すことができる。よって、前ステップのmain接触粒子リストの走査回数を減らすことができ、その計算量をO(N)に抑制することができる。
【0160】
また、main領域に属する粒子それぞれに対して、接触粒子リストおよび変位量リストに加えて、接触粒子のグローバルIDを列挙したグローバルIDリストが生成される。よって、skirt-main粒子、main-skirt粒子およびskirt-skirt粒子について、前ステップのmain接触粒子リストや前ステップのskirt接触粒子リストから所望の接触粒子を効率的に検索することができる。これにより、各粒子の粒子番号は前ステップと現ステップとで異なる可能性があるところ、main-main粒子以外の接触粒子についても変位量を効率的に複写することができる。
【符号の説明】
【0161】
10,10-1 情報処理装置
11 記憶部
12 処理部
13,13-1 領域
14,16 接触データ
15,15-1 位置データ