(57)【要約】【課題】格子状に分割された空間に存在する粒子データ等のデータに対する演算処理を効率良く実行することのできる、データ処理方法およびデータ処理装置を提供する。【解決手段】各格子に存在するデータを格子用メモリとは別のデータ用メモリに格納し、各格子に、自己のデータがデータ用メモリの何処に格納されているかを示す第一相互インデックスを割り当て、データ用メモリに、格納されているデータがどの格子に存在するものかを示す第二相互インデックスを割り当て、ある格子のデータを他の格子に移動する際に、対応する前記第一および第二相互インデックスの書換えを行う。
2008020634.tif 000002
【特許請求の範囲】
【請求項１】
格子状に分割された空間に存在するデータに対して演算処理を行うデータ処理方法であって、
各格子に存在するデータを格子用メモリとは別のデータ用メモリに格納し、
各格子に、自己のデータがデータ用メモリの何処に格納されているかを示す第一相互インデックスを割り当て、
データ用メモリに、格納されているデータがどの格子に存在するものかを示す第二相互インデックスを割り当て、
ある格子のデータを他の格子に移動する際に、対応する前記第一および第二相互インデックスの書換えを行う
ことを特徴とするデータ処理方法。
【請求項２】
前記第一相互インデックスは、データが格納されているデータ用メモリの識別情報を含むことを特徴とする請求項１記載のデータ処理方法。
【請求項３】
前記第二相互インデックスは、データが存在する格子の位置情報を含むことを特徴とする請求項１記載のデータ処理方法。
【請求項４】
演算処理を施す対象となるデータである処理対象データをデータ用メモリから読み出し、
当該処理対象データが存在する格子上の座標を第二相互インデックスに基づいて特定し、
当該処理対象データに影響を与える位置にある格子上にデータが存在するか判別し、
存在する場合に、当該データが格納されているデータ用メモリを第一相互インデックスに基づいて特定し、
特定されたデータ用メモリから当該データを読み出し、
読み出した当該データを用いて前記処理対象データに対して演算処理を施し、
演算処理により前記処理対象データが変更されたか判別し、
変更された場合に、変更済の前記処理対象データを、変更前の前記処理対象データが格納されていたデータ用メモリに格納し、
当該変更済の処理対象データが存在する格子上の座標が移動したかを判別し、
移動した場合に、当該変更済の処理対象データに関する第一および第二相互インデックスを書き換える、
ことを特徴とする請求項１記載のデータ処理方法。
【請求項５】
各格子に存在するデータが粒子データであることを特徴とする請求項１記載のデータ処理方法。
【請求項６】
請求項１ないし５のいずれかに記載のデータ処理方法をコンピュータに実行させるデータ処理プログラム。
【請求項７】
請求項６記載のデータ処理プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項８】
格子状に分割された空間に存在するデータに対して演算処理を行うデータ処理装置であって、
各格子に存在するデータを格納する、格子用メモリとは別のデータ用メモリ、
各格子に、自己のデータがデータ用メモリの何処に格納されているかを示す第一相互インデックスを割り当てる手段、
データ用メモリに、格納されているデータがどの格子に存在するものかを示す第二相互インデックスを割り当る手段、および、
ある格子のデータを他の格子に移動する際に、対応する前記第一および第二相互インデックスの書換えを行う手段
を備えたことを特徴とするデータ処理装置。
【請求項９】
前記第一相互インデックスは、データが格納されているデータ用メモリの識別情報を含むことを特徴とする請求項８記載のデータ処理装置。
【請求項１０】
前記第二相互インデックスは、データが存在する格子の位置情報を含むことを特徴とする請求項８記載のデータ処理装置。
【請求項１１】
演算処理を施す対象となるデータである処理対象データをデータ用メモリから読み出す手段、
当該処理対象データが存在する格子上の座標を第二相互インデックスに基づいて特定する手段、
当該処理対象データに影響を与える位置にある格子上にデータが存在するか判別する手段、
存在する場合に、当該データが格納されているデータ用メモリを第一相互インデックスに基づいて特定する手段、
特定されたデータ用メモリから当該データを読み出す手段、
読み出した当該データを用いて前記処理対象データに対して演算処理を施す手段、
演算処理により前記処理対象データが変更されたか判別する手段、
変更された場合に、変更済の前記処理対象データを、変更前の前記処理対象データが格納されていたデータ用メモリに格納する手段、
当該変更済の処理対象データが存在する格子上の座標が移動したかを判別する手段、および、
移動した場合に、当該変更済の処理対象データに関する第一および第二相互インデックスを書き換える手段
を備えたことを特徴とする請求項８記載のデータ処理装置。
【請求項１２】
ある空間に存在する粒子の動きをシミュレートする方法であって、
前記空間を垂直方向に延び且つ水平方向に連続する格子で分割した状態を仮定し、各格子内の各粒子に加わる圧力を水面からの距離に比例するものとして算出し、
前記空間を格子で分割していない連続空間と仮定し、前記空間内の同じ深度における各粒子の水圧を、そのうちの最も高い水圧に合わせ、
隣の粒子および空間との圧力差が大きい粒子には、それに対応した力を加える
ことを特徴とする粒子運動シミュレート方法。
【請求項１３】
請求項１２記載の粒子運動シミュレート方法をコンピュータに実行させるプログラム。
【請求項１４】
請求項１３記載のプログラムを記録したコンピュータ読取可能な記録媒体。
【請求項１５】
ある空間に存在する粒子の動きをシミュレートする装置であって、
前記空間を垂直方向に延び且つ水平方向に連続する格子で分割した状態を仮定し、各格子内の各粒子に加わる圧力を水面からの距離に比例するものとして算出する手段、
前記空間を格子で分割していない連続空間と仮定し、前記空間内の同じ深度における各粒子の水圧を、そのうちの最も高い水圧に合わせる手段、および
隣の粒子および空間との圧力差が大きい粒子には、それに対応した力を加える手段
を備えたことを特徴とする粒子運動シミュレート装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、格子状に分割された空間に存在する粒子データなどの様々なデータに対する演算処理を効率良く実行することのできるデータ処理方法およびデータ処理装置に関するものである。
【背景技術】
【０００２】
従来、たとえば図６に例示したように、多数のデータに対して何らかの演算処理を施す際に、データが存在する空間を格子状に分割し、格子１毎に演算処理を実行することがしばしば行われている。【０００３】
たとえば、コンピュータシミュレーションにおいて、ある仮想空間に複数の粒子や粒状物など（以後説明の簡略化のため「粒子」と総称する）が存在すると設定し、一つ一つの粒子を表現するデータに対して演算処理を施し、粒子の集合物である流体の物理運動の分析といった様々なシミュレーションを実行する際、仮想空間を複数の格子１に分割し、各格子１に存在する粒子データＡ，Ｂ，Ｃ…に対してシミュレーションに必要な演算処理を施す。【０００４】
この場合、各格子１にはそれぞれ対応するメモリまたはメモリ領域（以後説明の簡略化のため「メモリ」と総称する）が割り当てられ、各メモリに粒子データが格納されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、格子内に多量のデータが存在する場合、従来以下のような欠点が存在していた。【０００６】
１．格子間のデータの移動に関して、多くのメモリ書換えが必要。【０００７】
すなわち、ある格子１ａに存在するデータを他の格子１ｂに移動させる度に（たとえば粒子の動きが格子間をまたがる度に）、移動元の格子１ａに対応するメモリと移動先の格子１ｂに対応するメモリそれぞれの書換え処理が必要であり、演算処理の負荷が増大する。【０００８】
２．格子数×格子あたりのデータサイズのメモリが必要。【０００９】
すなわち、全ての格子１に対して全種類のデータを格納できる容量のメモリが割り当てられているので、データが存在しない格子１ｆ，１ｇ，１ｈ…にも余分なメモリが必要となり、全体のメモリ容量が増大する。【００１０】
３．格子の何処にデータが存在しているかが不明なため、全ての格子に対して調査が必要。【００１１】
すなわち、データが存在する空間を格子状に分割するだけでは、各格子１とデータとの対応付けがなく、演算処理の対象となるデータを全ての格子１から見つけ出す必要があり、演算処理の負荷が増大する。【００１２】
そこで、本発明は、以上のとおりの事情に鑑みてなされたものであり、上記従来技術の欠点を解消し、格子状に分割された空間に存在するデータに対する演算処理を効率良く実行することのできる、データ処理方法およびデータ処理装置を提供することを目的とする。【００１３】
また、空間に存在する粒子の運動をシミュレートする場合、粒子間の力の伝達は粒子同士の衝突として計算を行うのが一般的だが、液体／流体に近い動きを粒子群にさせようとすると、以下の理由により動きが不自然になっていた。【００１４】
すなわち、現実の液体では無数の分子が様々な方向に飛び交い、幾度も衝突することで圧力が末端まで伝わり、たとえば図１５の例では左右の水面は一定の高さで安定するが、（リアルタイムの）コンピュータシミュレーションでは、性能の都合上、粒子は大きく密集していて、（単位時間あたりの）衝突を計算する回数も少ないため、たとえば図１６に例示したように、砂粒が詰まったような状態となり、圧力が末端まで伝わらない。【００１５】
そこで、本発明はさらに、以上のとおりの事情に鑑みてなされたものであり、シミュレーション結果である水圧をパスカルの法則等、既知の法則から推測し、水圧推測値に基づいて粒子の動きを補正することで、より自然な液体／流体に近い動きのシミュレーションを実現することのできる、粒子運動シミュレーション方法および粒子運動シミュレーション装置を提供することをも目的とする。
【課題を解決するための手段】
【００１６】
上記の目的を達成するため、本発明のデータ処理方法は、格子状に分割された空間に存在するデータに対して演算処理を行うデータ処理方法であって、
各格子に存在するデータを格子用メモリとは別のデータ用メモリに格納し、
各格子に、自己のデータがデータ用メモリの何処に格納されているかを示す第一相互インデックスを割り当て、
データ用メモリに、格納されているデータがどの格子に存在するものかを示す第二相互インデックスを割り当て、
ある格子のデータを他の格子に移動する際に、対応する前記第一および第二相互インデックスの書換えを行う
ことを特徴とする。【００１７】
さらに、このデータ処理方法は、前記第一相互インデックスが、データが格納されているデータ用メモリの識別情報を含むこと、前記第二相互インデックスが、データが存在する格子の位置情報を含むことを特徴とする。【００１８】
さらに、このデータ処理方法は、演算処理を施す対象となるデータである処理対象データをデータ用メモリから読み出し、
当該処理対象データが存在する格子上の座標を第二相互インデックスに基づいて特定し、
当該処理対象データに影響を与える位置にある格子上にデータが存在するか判別し、
存在する場合に、当該データが格納されているデータ用メモリを第一相互インデックスに基づいて特定し、
特定されたデータ用メモリから当該データを読み出し、
読み出した当該データを用いて前記処理対象データに対して演算処理を施し、
演算処理により前記処理対象データが変更されたか判別し、
変更された場合に、変更済の前記処理対象データを、変更前の前記処理対象データが格納されていた前記データ用メモリに格納し、
当該変更済の処理対象データが存在する格子上の座標が移動したかを判別し、
移動した場合に、当該変更済の処理対象データに関する第一および第二相互インデックスを書き換える、
ことを特徴とする。【００１９】
また、本発明のデータ処理装置は、格子状に分割された空間に存在するデータに対して演算処理を行うデータ処理装置であって、
各格子に存在するデータを格納する、格子用メモリとは別のデータ用メモリ、
各格子に、自己のデータがデータ用メモリの何処に格納されているかを示す第一相互インデックスを割り当てる手段、
データ用メモリに、格納されているデータがどの格子に存在するものかを示す第二相互インデックスを割り当る手段、および、
ある格子のデータを他の格子に移動する際に、対応する前記第一および第二相互インデックスの書換えを行う手段
を備えたことを特徴とする。【００２０】
さらに、このデータ処理装置は、前記第一相互インデックスが、データが格納されているデータ用メモリの識別情報を含むこと、前記第二相互インデックスが、データが存在する格子の位置情報を含むことを特徴とする。【００２１】
さらに、このデータ処理装置は、演算処理を施す対象となるデータである処理対象データをデータ用メモリから読み出す手段、
当該処理対象データが存在する格子上の座標を第二相互インデックスに基づいて特定する手段、
当該処理対象データに影響を与える位置にある格子上にデータが存在するか判別する手段、
存在する場合に、当該データが格納されているデータ用メモリを第一相互インデックスに基づいて特定する手段、
特定されたデータ用メモリから当該データを読み出す手段、
読み出した当該データを用いて前記処理対象データに対して演算処理を施す手段、
演算処理により前記処理対象データが変更されたか判別する手段、
変更された場合に、変更済の前記処理対象データを、変更前の前記処理対象データが格納されていた前記データ用メモリに格納する手段、
当該変更済の処理対象データが存在する格子上の座標が移動したかを判別する手段、および、
移動した場合に、当該変更済の処理対象データに関する第一および第二相互インデックスを書き換える手段
を備えたことを特徴とする。【００２２】
また一方、上記の目的を達成するため、本発明の粒子運動シミュレート方法は、ある空間に存在する粒子の動きをシミュレートする方法であって、
前記空間を垂直方向に延び且つ水平方向に連続する格子で分割した状態を仮定し、各格子内の各粒子に加わる圧力を水面からの距離に比例するものとして算出し、
前記空間を格子で分割していない連続空間と仮定し、前記空間内の同じ深度における各粒子の水圧を、そのうちの最も高い水圧に合わせ、
隣の粒子および空間との圧力差が大きい粒子には、それに対応した力を加える
ことを特徴とする。【００２３】
また、本発明の粒子運動シミュレート装置は、
ある空間に存在する粒子の動きをシミュレートする装置であって、
前記空間を垂直方向に延び且つ水平方向に連続する格子で分割した状態を仮定し、各格子内の各粒子に加わる圧力を水面からの距離に比例するものとして算出する手段、
前記空間を格子で分割していない連続空間と仮定し、前記空間内の同じ深度における各粒子の水圧を、そのうちの最も高い水圧に合わせる手段、および
隣の粒子および空間との圧力差が大きい粒子には、それに対応した力を加える手段
を備えたことを特徴とする。【００２４】
そして、本発明は、上記データ処理方法や粒子運動シミュレート装置をコンピュータに実行させるプログラム、当該プログラムを記録したコンピュータ読取可能な磁気ディスク、光ディスク、半導体メモリなどの各種記録媒体をも提供する。【００２５】
コンピュータでは、たとえば、記録媒体や通信ネットワークを介してインストールまたはロードされた上記データ処理ステップを記述したコンピュータプログラムに従って、ＣＰＵが各ステップを実行することになる。
【発明の効果】
【００２６】
上記のとおりの特徴を有する本発明のデータ処理によれば、格子に処理対象データそのものを置くのではなく、別途確保したデータ用メモリとの間の相互関係を表すインデックスを置くことにより、以下の効果を奏する。【００２７】
１．データの移動をインデックスの書換えだけで行える。【００２８】
２．データとインデックスの総量分のメモリがあれば演算可能。【００２９】
３．データ用メモリからデータの存在する格子位置が判明できるため、全ての格子を調べなくても演算可能。【００３０】
また、上記のとおりの特徴を有する本発明の粒子運動シミュレーションによれば、より自然な液体／流体に近い粒子群の動きのシミュレーションを実現することができる。
【発明を実施するための最良の形態】
【００３１】
［第１実施形態］
図１は、本発明について説明するための概念図である。【００３２】
この図１に例示したように、本発明では、格子状に分割された空間に存在するデータに対して演算処理を行う際、まず、格子用メモリとは別のデータ用メモリ２を用意して、これに各格子１に存在するデータを格納しておき、各格子１（厳密には各格子１の格子用メモリ）には、自己のデータがデータ用メモリ２の何処に格納されているかを示す第一相互インデックスを割り当て、データ用メモリ２には、格納されているデータがどの格子１に存在するものかを示す第二相互インデックスを割り当て、そして、ある格子１ａのデータを他の格子１ｂに移動する際に、対応する前記第一および第二相互インデックスの書換えを行う。【００３３】
第一相互インデックスとしては、データが格納されているデータ用メモリ２の番号等の識別情報、第二相互インデックスとしては、データが存在する格子１の座標等の位置情報を用いることができる。【００３４】
なお、図１は、図６に例示したように格子１ａ，１ｃ，１ｄ，１ｅにデータＡ−Ｉが存在する場合に対応したものとする。【００３５】
より具体的な処理については、たとえば図４に例示したように、まず、演算処理を施す対象となるデータ（処理対象データと呼ぶこととする）をデータ用メモリ２ａ（図１の例を参照）から読み出す（ステップＳ１）。【００３６】
続いて、読み出した処理対象データが存在する格子１ａ上の座標Ｘa，Ｙaを第二相互インデックスに基づいて特定する（ステップＳ２）。【００３７】
処理対象データが存在する格子１ａに影響を与える位置にある格子１ｃ上にデータが存在するか否かを判別する（ステップＳ３）。一例として、流体解析において、ある格子１ａに存在する粒子が、その近傍の格子１ｃに存在する他の粒子から何らかの物理的影響を受ける場合には、その格子１ｃが、格子１ａに影響を与える位置にある格子である。【００３８】
処理対象データに影響を与えるデータ（影響データと呼ぶこととする）が存在する場合（ステップＳ３−Ｙｅｓ）、その影響データが格納されているデータ用メモリ２ｃを第一相互インデックスに基づいて特定する（ステップＳ４）。【００３９】
特定されたデータ用メモリ２ｃから、影響データを読み出す（ステップＳ５）。【００４０】
読み出した影響データを用いて、前記処理対象データに対して必要な演算処理、たとえばシミュレーション処理を施す（ステップＳ６）。  演算処理により処理対象データが変更されたか否かを判別する（ステップＳ７）。【００４１】
変更された場合には、変更済の処理対象データを、変更前の処理対象データが格納されていた元のデータ用メモリ２ａに格納する（ステップＳ８）。すなわち、図２に例示したように、変更後にデータ用メモリ２ａにて処理対象データの書換えを行う。【００４２】
変更済の処理対象データが存在する格子１ａ上の座標Ｘa，Ｙaが移動したか否かを判別する（ステップＳ９）。【００４３】
たとえば図３の太矢印で例示したような移動があった場合には（ステップＳ９−Ｙｅｓ）、移動前の座標Ｘa，Ｙaにある格子１ａの第一相互インデックスを消去し、移動後の座標Ｘb，Ｙbにある格子１ｂの第一相互インデックスを、移動前の座標Ｘa，Ｙaにあった格子１ａの第一相互インデックスが指していたデータ用メモリ２ａの番号２ａに書き換える（２ｂ→２ａ）。また、データ用メモリ２ａの第二相互インデックスについては、移動後の座標Ｘb，Ｙbを示すよう書き換える（Ｘa，Ｙa→Ｘb，Ｙb）（ステップＳ１０）。【００４４】
移動がなかった場合には（ステップＳ９−Ｎｏ）、ステップＳ８で処理を終了する。以上の処理により、
１．第一相互インデックスおよび第二相互インデックスの書換えだけで、処理対象データの移動を行うことができ（ステップＳ１０）、また、
２．処理対象データと第一，第二インデックスの総量分のメモリがあれば演算が可能となり、さらにまた、
３．データ用メモリ２から処理対象データの存在する格子１の位置を判別できるため、全ての格子１を調べなくても演算が可能となる（ステップＳ２）。【００４５】
［第２実施形態］
ところで、流体等の物体の動作解析においては一度動き出した物体が慣性で動き続ける状況が考えられ、この状況を考慮して、たとえば図５に例示したように、影響データが無いときでも処理対象データの演算を行うようにしてもよい（ステップＳ３−Ｎｏ→Ｓ１１）。【００４６】
また、作用反作用を考慮すると、処理対象データとともに影響データも変化する場合が考えられるので、影響データが変更したか否かを判断する（ステップＳ１２）。変更した場合には、影響データが格納されているデータ用メモリ２にて、変更済の影響データの書換えを行う（ステップＳ１３）。【００４７】
さらにまた、移動速度の幅が大きい場合など、移動が小刻みに行われる状況も考えられるので、この状況を考慮して、移動が完全に終了するまで、影響データの検索（ステップＳ３）からのループを設定するようにしてもよい（ステップＳ１０からステップＳ３へ延びるループ線を参照）。【００４８】
なお、以上の説明では、２次元平面空間における２次元平面格子を対象としているが、本発明は３次元立体空間における３次元立体格子にも応用できることは言うまでもなく、同様にしてより効率的な演算処理を実現できる。特に３次元空間内にて、粒子間の斥力などにより各データの間隔が一定となっている状況では、データが存在しない格子が増加することになるので、さらに一層演算処理の効率化を図ることができる。【００４９】
以上説明した本発明によるデータ処理は、一例として、流体運動解析のコンピュータシミュレーションにおいて、流体が存在する空間を複数の格子状に分割し、各格子に存在する流体を構成する複数の粒子一つ一つを表すデータに対して、その格子間の動きをシミュレートするために必要な演算処理を施す場合に適用できる。シミュレートされた運動データに基づいて流体の動きを画像化し、２次元、３次元流体グラフィックスとしてコンピュータディスプレイ等の出力手段に表示させることも可能である。【００５０】
［第３実施形態］
ここでは、空間に存在する粒子に加わる水圧をより高精度で推測することにより、粒子群の運動を可能な限り流体に近い動きとしてシミュレートする場合について説明する。【００５１】
<１>まず、図７に例示したように、空間を複数に分割してなる格子を、水平方向に独立したものと考え、すなわち、ある空間を垂直方向に延びた格子により水平方向に連続して分割し、各垂直方向格子内に粒子が垂直方向に積み上げられた状態を仮定し、その場合の各粒子にかかる水圧を、水面からの距離に比例するものとして算出する。図７中の数字は算出水圧値である。【００５２】
<２>次に、図８に例示したように、<１>の制限（水平方向独立状態）を解除して、同空間を格子で分割していない連続空間と考え、空間内の同じ深度における各粒子の水圧を、そのうちの最も高い水圧に合わせる。図８中、最下列の圧力が２に揃っている。【００５３】
<３>続いて、図９に例示したように、<２>の水圧調整結果を参照し、隣の粒子や空間との圧力差が大きい粒子には、それに対応した力を加える。図９の例では、Ｕ字管の右側にある粒子は、本来は水面で圧力ゼロとなるはずであるが、圧力が過剰にかかっているため、上方へと力がかかり移動するようにシミュレートされる。【００５４】
<４>そして、<１>−<３>の処理で単位時間が経過したものとして、再度<１>に戻り計算を続ける。ただし、粒子の配置が入り組んでいる場合など、一度の処理では水圧が深部まで伝わらない可能性もあるため、水面に位置する粒子など、水圧が明確なもの以外は前回の計算の値を保持し、高い方の水圧を採用する。【００５５】
以上の処理の一具体例を詳細に説明する。【００５６】
（１）
まず初期設定として、（２）以降の演算を行っていないので、図１０に例示したように、圧力が決定していない粒子の圧力を０としておく。図１０中の各粒子内の数値は、左側が圧力、右側が次述の仮圧力である。【００５７】
（２）
図１０に例示したように、格子を空間内にて垂直方向に延び且つ水平方向に独立したものと仮定し、その場合の圧力（以降、この仮定のもとに決定した圧力を「仮圧力」とする）を、水面からの距離に比例したものとして決定する。より具体的には以下のとおりに処理する（適宜図１０参照のこと）。【００５８】
（２．１）
各垂直方向格子内にて上側の近傍に他の粒子が存在しない粒子、つまり水面にある粒子の仮圧力を０に設定する。【００５９】
（２．２）
（２．１）に該当する粒子の下側の近傍に粒子が存在する場合は、その粒子の仮圧力を（２．１）の値に１足したものとする。【００６０】
（２．３）
（２．２）で仮圧力を決定した粒子の下側の近傍にも粒子が存在する場合は、その粒子に対しても（２．２）と同様の処理を行い仮圧力を決定する。【００６１】
（２．４）
（２．３）を繰り返し、（２．１）に該当する粒子から下側に連続する粒子全ての仮圧力を決定する。【００６２】
（２．５）
（２．１）−（２．４）を繰り返し、全ての粒子の仮圧力を決定する。【００６３】
（３）
圧力と仮圧力を比較し、同じ深度の圧力が近い値になるように処理する。より具体的には以下のとおりに処理する（適宜図１１参照のこと）。【００６４】
（３．１）
ある粒子について、下記Ａ−Ｄのうち最大の値を圧力として決定する。
Ａ＝その粒子の仮圧力
Ｂ＝左右の近傍にある粒子の圧力(粒子が存在しない場合はゼロ)
Ｃ＝上の近傍にある粒子の圧力に１を足した値（粒子が存在しない場合はゼロ）
Ｄ＝下の近傍にある粒子の圧力から１を引いた値（粒子が存在しない場合はゼロ）【００６５】
（３．２）
（３．１）の処理を全ての粒子に対して行い、圧力（図中左側の値）を決定する。【００６６】
（４）
ある粒子について、隣の粒子や空間との圧力差が規定値より大きくなった場合、圧力差を解消する方向に力を加え、当該粒子の移動を発生させる。より具体的には以下のとおりに処理する（適宜図１２参照のこと）。【００６７】
（４．１）
圧力が１以上の粒子に対し、その近傍に何も無い空間が存在する場合は、当該空間の方向への粒子の移動（方向および量）を算出する。たとえば一例として、以下のＡ−Ｂが成り立つとき、粒子Ａは空間Ｂへと移動する。
Ａ：ある粒子Ａの圧力が１以上。
Ｂ：粒子Ａの近傍に、何も無い空間Ｂが存在。
ここで、圧力が１以上の粒子は、本来は水中（他の粒子や壁で囲まれた状態）に位置するものであるため、その粒子が空間に面しているという状況だけで、圧力の均衡が取れていない状態と仮定する。
Ｃ：空間Ｂの近傍に粒子Ａ以外の粒子Ｃが存在するとき、粒子Ｃの圧力が粒子Ａを上回らない。
ここで、粒子Ａの圧力が小さい場合は、より均衡の取れていない粒子Ｃに処理を行う。【００６８】
（４．２）
（４．１）の処理を、該当する全ての粒子に対して行う。【００６９】
図１２は、以上の処理（１）−（４）を繰り返した後に該当する粒子が発生した状況を示しており、圧力は次第に右側まで伝わってゆき、上方に空きのある粒子に到達したときに移動が始まる。すなわち、処理（１）―（４）は、隣接する粒子の圧力を（深度の差も考慮した上で）高い側に合わせる処理にあたるため、それによって、仮圧力（圧力が伝わりきっていない状態の、粒子の上方にあたる水面からの圧力）のうち、最も高い位置にある水面からの水圧が伝播する様子のシミュレートに用いることができる。【００７０】
（５）
重力による粒子の移動を行う。【００７１】
（５．１）
（４）で移動を行わなかった粒子に対し、下側の近傍に何も無い空間が存在する場合は、重力で落下したと仮定し、その空間に粒子を移動させる。【００７２】
（５．２）
（５．１）の処理を、該当する全ての粒子に対して行う。【００７３】
以上の（１）−（５）の処理を繰り返すことで、低い方向へ液体が流れて水面の高さが一定になるような、実際の液体に近い状況を再現でき、したがって、より自然な液体／流体に近い粒子群の動きのシミュレーションを実現することができ。【００７４】
なお、以上の説明において各図は二次元のものとなっているが、三次元の場合にも同様に適用可能であることは言うまでもない。【００７５】
また、重力が存在すると仮定し「垂直」「水平」と定義したが、無重力の場合に任意の方向に区切り計算することも可能である。その場合は、パスカルの法則に従い、繋がりのあるすべての粒子に同じ圧力が伝達するようにシミュレートする。【００７６】
上述の実施形態では、粒子が自身の重さにより移動する場合の例であるが、たとえば図１３、図１４に例示したように、外部からの圧力が粒子に加わった場合でも計算可能である。図１３、図１４では、下部の粒子に加えた圧力は、上記処理（１）−（５）を繰り返すことで上部の粒子まで伝わることになる。【００７７】
より具体的には以下のとおりに処理する（適宜図１３、図１４参照のこと）。【００７８】
（７．１）
（１）−（５）を繰り返すことで圧力が確定し、初期状態では底面の粒子の圧力は２となる（図１３参照）。【００７９】
（７．２）
底面の粒子に、外部から１の圧力を加える。これにより底面の粒子の圧力は３になる（図１４参照）。【００８０】
（７．３）
（１）−（５）を繰り返すことで、上部の粒子にも（７．１）の圧力に１を加える状態が伝わってゆく。【００８１】
（７．４）
やがて水面の粒子の圧力にも１が足されたとき、（４）のルールにより、その粒子は上方へ移動する（図１４参照）。【００８２】
（７．５）
その後も（１）−（５）を繰り返すことで、粒子全体が上方へと移動する状態をシミュレートすることができる。
【図面の簡単な説明】
【００８３】
【図１】本発明について説明するための概念図である。
【図２】本発明について説明するための別の概念図である。
【図３】本発明について説明するためのさらに別の概念図である。
【図４】本発明に従った処理の一例について説明するためのフローチャートである。
【図５】本発明に従った処理の別の一例について説明するためのフローチャートである。
【図６】従来例について説明するための概念図である。
【図７】本発明について説明するための概念図である。
【図８】本発明について説明するための概念図である。
【図９】本発明について説明するための概念図である。
【図１０】本発明について説明するための概念図である。
【図１１】本発明について説明するための概念図である。
【図１２】本発明について説明するための概念図である。
【図１３】本発明について説明するための概念図である。
【図１４】本発明について説明するための概念図である。
【図１５】従来例について説明するための概念図である。
【図１６】従来例について説明するための概念図である。
【符号の説明】
【００８４】
１，１ａ，１ｂ，１ｃ  格子
２，２ａ，２ｂ，１ｃ  データ用メモリ
【図１】
2008020634.tif 000003
【図２】
2008020634.tif 000004
【図３】
2008020634.tif 000005
【図４】
2008020634.tif 000006
【図５】
2008020634.tif 000007
【図６】
2008020634.tif 000008
【図７】
2008020634.tif 000009
【図８】
2008020634.tif 000010
【図９】
2008020634.tif 000011
【図１０】
2008020634.tif 000012
【図１１】
2008020634.tif 000013
【図１２】
2008020634.tif 000014
【図１３】
2008020634.tif 000015
【図１４】
2008020634.tif 000016
【図１５】
2008020634.tif 000017
【図１６】
2008020634.tif 000018
【国際調査報告】
2008020634.tif 000019
2008020634.tif 000020
2008020634.tif 000021
2008020634.tif 000022
2008020634.tif 000023
2008020634.tif 000024