JP2011258074A - シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム - Google Patents

シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム Download PDF

Info

Publication number
JP2011258074A
JP2011258074A JP2010133202A JP2010133202A JP2011258074A JP 2011258074 A JP2011258074 A JP 2011258074A JP 2010133202 A JP2010133202 A JP 2010133202A JP 2010133202 A JP2010133202 A JP 2010133202A JP 2011258074 A JP2011258074 A JP 2011258074A
Authority
JP
Japan
Prior art keywords
class
atom
simulation
data
simulations
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010133202A
Other languages
English (en)
Other versions
JP5581829B2 (ja
Inventor
Masakatsu Ito
正勝 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010133202A priority Critical patent/JP5581829B2/ja
Publication of JP2011258074A publication Critical patent/JP2011258074A/ja
Application granted granted Critical
Publication of JP5581829B2 publication Critical patent/JP5581829B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

【課題】複数のシミュレーション間で授受されるデータへのアクセス方法を意識することなくメインルーチンを開発することが可能なシミュレーション開発支援装置を提供する。
【解決手段】シミュレーション開発支援装置は、例えばPC(Personal Computer)などのコンピュータであり、自動生成手段を備える。自動生成手段は、コンピュータにおいてプログラムが実行されることにより実現され、ユーザにより定義されたインターフェース定義ファイルを基に、複数のシミュレーション間でのデータの授受を司るインターフェースを生成する。ここで、自動生成手段は、複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成する。
【選択図】図4

Description

本発明は、複数のシミュレーションを統合してシミュレーションを行う際のインターフェースを生成する技術に関する。
近年、シミュレーション手法の高度化により、単一のシミュレーションだけでは望みの結果が得られず、複数のシミュレーションを組み合わせることが多くなってきている。このような統合化されたシミュレーションには、全体的な枠組みを与えるシミュレーションと、その枠組みから繰り返し呼び出される要素的なシミュレーションとが含まれている。
このような統合化されたシミュレーションの一例としては、全体的な枠組みを与えるシミュレーションのアルゴリズムとして分子動力学法が用いられ、要素的なシミュレーションのアルゴリズムとして分子軌道法が用いられた分子シミュレーションが挙げられる。要素的なシミュレーションのアルゴリズムとしては、分子軌道法の他に、Tight-Binding Modelによる電子状態計算、密度汎関数法、経験的ポテンシャル(AMBER、CHARMM)、あるいはQM/MM(quantum mechanics/molecular mechanics)法などを用いることもできる。また、全体的な枠組みを与えるシミュレーションのアルゴリズムとしては、分子動力学法の他に、モンテカルロ法、徐冷法、構造最適化、自由エネルギー変化の計算、非平衡グリーン関数法、あるいはESQC(Elastic Scattering Quantum Chemistry technique)法などを用いることもできる。
このようにシミュレーションのアルゴリズムの種類は増える一方であるが、全体的な枠組みを与えるシミュレーションプログラムの中に要素的なシミュレーションプログラムを統合するのは難しい。現状では、全体的な枠組みを与えるシミュレーションプログラム及び要素的なシミュレーションプログラムのそれぞれのソースコードを解析して修正することで、統合化されたシミュレーションプログラムが開発されている。しかし、この方法によれば、開発に時間がかかる。そのため、統合化されたシミュレーションプログラムを効率的に開発するための種々の方法が提案されている(オブジェクト指向型技術を用いた開発例として非特許文献1、適切なシミュレーションパラメータを見つける手法の例として特許文献1)。
"MDScope - a visual computing environment for structural biology", K. Schulten et al. Computer Physics Communications Volume 91, Issues 1-3, 2 September 1995, Pages 111-133
特開2008−158781号公報
しかしながら、上述の種々の方法によっても、統合化されたシミュレーションプログラムの開発の煩雑さを軽減することは難しい。この煩雑さの原因としては、2つの原因が考えられる。1つ目の原因は、統合されるべき複数のシミュレーションプログラムの間で授受されるデータは一定の内部構造を保っている必要があるからである。つまり、当該複数のシミュレーションプログラムの間でデータの内部構造や入出力フォーマットは共通ではないため、入力出ファイルを接続しただけでは、統合化されたシミュレーションプログラムは動作せず、込み入ったコードを追加することが要求されるのである。2つ目の原因は、複数のシミュレーションプログラム間におけるデータの授受は正確に行われることが要求されるため、この正確さを実現するために手作業で多くの段階を踏んでエラーをチェックする必要があるからである。つまり、データの授受は正確に自動化されている必要があるが、この正確さを実現するための時間がかかるとともに、手作業でエラーをチェックすることによるヒューマンエラーが入ってしまう可能性がある。
つまり、ユーザは、統合化されたシミュレーションプログラムを開発する際には、複数のシミュレーション間で授受されるデータへのアクセス方法を意識することが要求されるため、開発が煩雑となる。
開示の装置は、複数のシミュレーションを統合した統合化シミュレーションを開発するためのインターフェースを生成するシミュレーション開発支援装置であって、ユーザにより定義されたインターフェース定義ファイルを基に、前記複数のシミュレーション間でのデータの授受を司る前記インターフェースを生成する自動生成手段を備え、前記自動生成手段は、前記複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成する。
開示の装置は、例えばPC(Personal Computer)などのコンピュータであり、自動生成手段を備える。自動生成手段は、コンピュータにおいてプログラムが実行されることにより実現され、ユーザにより定義されたインターフェース定義ファイルを基に、複数のシミュレーション間でのデータの授受を司るインターフェースを生成する。ここで、自動生成手段は、複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成する。
開示の装置によれば、ユーザは、自動生成されたインターフェースを用いることにより、複数のシミュレーション間で授受されるデータへのアクセス方法を意識することなく、統合化されたシミュレーションプログラムを開発することができる。
実施形態に係るシミュレーション装置の構成の一例を示す模式図である。 分子シミュレーションプログラムの統合例を示す模式図である。 比較例に係る統合化プログラムの開発方法の一例を示す模式図である。 ユーザが定義するクラスと自動生成されるクラスとの関係の一例を示すクラス図である。 各クラスのインスタンスの間の相互作用の一例を示すシーケンス図である。 各クラスのインスタンスの間の相互作用の一例を示すシーケンス図である。 分子と原子との間に中間階層が想定された場合に自動生成されるクラスの一例を示すクラス図である。 原子クラスの自動生成処理を示すフローチャートの一例である。 中間階層クラスの自動生成処理を示すフローチャートの一例である。 中間階層クラスの自動生成処理を示すフローチャートの一例である。 分子クラスの自動生成処理を示すフローチャートの一例である。
以下、実施形態の一例について図面を参照しつつ説明する。
[装置構成]
まず、実施形態に係るシミュレーション装置の構成の一例について図1を用いて説明する。図1は、実施形態に係るシミュレーション装置100の構成の一例を示すブロック図である。
シミュレーション装置100は、例えばPC(Personal Computer)などのコンピュータであり、制御部11と、メモリ12と、入力部13と、ハードディスク14と、出力部15とを有する。これらの構成要素は、バス10を介して互いに接続されている。制御部11は、例えばCPU(Central Processing Unit)であり、メモリ12は、例えばRAM(Random Access Memory)であり、入力部13は、例えばマウスやキーボードであり、出力部15は、例えばディスプレイである。制御部11は、入力部13を介して入力されたユーザからの指示に応じて、ハードディスク14に記憶されたプログラムを一時的にメモリ12に記憶させてから当該プログラムを実行する。
[分子シミュレーション]
次に、上述のシミュレーション装置100における分子シミュレーション方法について説明する。上述のシミュレーション装置100では、制御部11がプログラムを実行することにより分子シミュレーションが実行される。以下、図2を用いて具体的に説明する。
図2は、分子シミュレーションプログラムの一例を示す模式図である。実施形態に係る分子シミュレーションプログラムでは、分子動力学法および分子軌道法を用いて分子の動的な性質を調べる。図2に示す例では、分子動力学法のプログラムが統合化されたシミュレーションプログラム(以下、単に「統合化プログラム」と称する)に含まれており、統合化プログラムによって分子軌道法のプログラムが呼び出される。
図2において、「r」とは分子構造、具体的には、分子に含まれる原子の位置ベクトルを示している。ここで、位置ベクトルは、例えば位置座標で示される。「F」とは当該原子に作用する力ベクトルを示している。また、「t」は時間を示し、「Δt」はタイムステップを示している。r(t)は、位置ベクトルが時間の関数であることを示し、r(0)は、位置ベクトルの初期値を示している。
図2に示す分子シミュレーションでは、分子中の各原子に作用する力ベクトルを求め、当該力ベクトルによる各原子の位置や速度の変化を調べる。具体的には、シミュレーション装置100は、分子軌道法プログラムを実行することで、分子中の各原子の位置ベクトルを基に、分子中の各原子に作用する力ベクトルを求める。分子軌道法プログラムが実行されると、分子中の各原子に作用する力ベクトルがシュレディンガー方程式Eqを用いて求められる。図2に示すシュレディンガー方程式Eqにおいて、「H」はハミルトニアンを示し、「E」は電子エネルギーを示し、「Ψ」は波動関数を示している。
そして、シミュレーション装置100は、分子軌道法プログラムより求められた力ベクトルを基に、分子動力学法プログラムを実行することにより、分子中の各原子の位置や速度の変化を求める。図2において、「M」は原子の質量、即ち、原子量を示している。具体的には、分子動力学法プログラムが実行されると、分子中の各原子の位置や速度の変化が運動方程式より求められる。そして、再度、シミュレーション装置100は、分子軌道法プログラムを用いて、各原子の変化後の位置を基に、各原子に作用する力ベクトルを求めた後、分子動力学法プログラムを用いて、当該力ベクトルによる分子中の各原子の位置や速度の変化を求める。シミュレーション装置100は、このような動作を繰り返し行うことで、分子の動的な性質をシミュレートする。
[統合化プログラムの開発を難しくしている点と、本発明による解決]
次に、統合化プログラムの開発方法について説明する。図3は、比較例に係る統合化プログラムの開発方法の一例を示す模式図である。
比較例に係る統合化プログラムの開発方法では、まず、ユーザは、分子軌道法プログラムとの間で物理量のデータを授受させるためのプログラムを開発する(PS1)。次に、ユーザは、物理量のデータを適切なデータ構造に設定するためのプログラムを開発する。ユーザは、例えば、分子軌道法プログラムに入力されるデータを、分子軌道法プログラムで要求される入力形式に適合させるプログラムを開発する(PS2A)。また、ユーザは、分子軌道法プログラムより出力されたデータを分子動力学法のプログラムで要求される入力形式に適合させるプログラムを開発する(PS2B)。そして、ユーザは、統合化プログラムの残りの部分、例えば、分子動力学法のプログラムを開発する(PS3)。ユーザは、このようにして開発された各プログラムを統合した統合化プログラムを動作させ、正確に動作しなければ、上述のPS1〜PS3の各開発工程を繰り返す。
しかしながら、上述のPS1〜PS3の各開発工程を繰り返すことにより統合化プログラムを開発する場合には、時間がかかるだけでなく、手作業でプログラミングを行うことによるヒューマンエラーが入りやすい。また、比較例に係る統合化プログラムの開発方法では、分子軌道法のプログラムを別のプログラムに変えると、その影響は、統合化プログラムにおけるデータの入出力部からデータ構造の変換部(場合によっては、残りの統合化プログラムの部分)にまで及ぶ。そのため、この場合には、ユーザは、統合化プログラムのかなりの部分を書き直すことになる。
そこで、実施形態に係るシミュレーション装置100は、ユーザにより定義されたインターフェース定義ファイルを基に、分子軌道法プログラムとのデータの授受を司るプログラミングインターフェースを自動生成することとする。つまり、実施形態に係るシミュレーション装置100は、シミュレーション開発支援装置としても機能する。ユーザは、自動生成されたプログラミングインターフェースを用いて統合化プログラムを開発する。以下、具体的に説明する。
[ユーザが定義するクラスと自動生成されるクラスの関係]
図4は、ユーザが定義するクラスと自動生成されるクラスとの関係の一例を示すクラス図である。
インターフェース定義ファイルは、ユーザにより作成されるファイルであり、SimulationParserクラスを含んでいる。また、インターフェース定義ファイルには、分子−原子間の階層構造が定義される。図4に示す例では、分子と原子との間に残基などの中間的な階層が定義されておらず、分子の直下の階層に原子が存在する例を示している。AtomクラスおよびMoleculeクラスは、ユーザにより作成されたインターフェース定義ファイルを基に、シミュレーション装置100により自動生成されるクラスである。以下では、Atomクラスのインスタンスを「Atomオブジェクト」と称することとし、Moleculeクラスのインスタンスを「Moleculeオブジェクト」と称することとする。
SimulationParserクラスは、ユーザにより定義されるクラスであり、分子軌道法と分子動力学法との間でのデータ授受方法を指定するためのクラスである。SimulationParserクラスでは、posGetters、forceSetters、atomMassesの各データがインスタンス変数として定義されるとともに、_init_()、setInput()、doCalc()、parseOutput()の各メソッドが定義される。
SimulationParserクラスにおいて、posGettersは、原子の位置座標を読み出すためのクロージャの配列であり、forceSettersは、力ベクトルを原子に設定するためのクロージャの配列であり、atomMassesは、原子の質量の配列である。_init_()は、コンストラクタである。setInput()は、分子軌道法プログラムの入力ファイルを作成し、当該入力ファイルに入力データとなる原子のデータ(質量、座標など)を書き込むメソッドである。具体的には、setInput()メソッドは、posGettersおよびatomMassesの各データより、原子のデータを取得して入力ファイルに書き込む処理を行うメソッドである。doCalc()は、分子軌道法プログラムをオペレーティングシステムの別プロセスとして呼び出し、setInput()で作成した入力ファイルを分子軌道法プログラムへ渡して実行するメソッドである。parseOutput()は、分子軌道法プログラムの出力ファイルを解析して力ベクトルを読み出し、Atomオブジェクトに力ベクトルを設定するメソッドである。具体的には、parseOutput()メソッドは、分子軌道法プログラムの出力ファイルより読み出した各原子に作用する力ベクトルをforceSettersを用いてAtomオブジェクトに設定するメソッドである。
先に述べたように、AtomクラスおよびMoleculeクラスは、ユーザにより作成されたインターフェース定義ファイルを基に、シミュレーション開発支援装置100により自動生成されるクラスである。Atomクラスは、原子にかかわるデータ構造をカプセル化するためのクラスであり、Moleculeクラスは、分子−原子の階層構造をカプセル化するためのクラスである。
Atomクラスでは、m、x,y,z、vx,vy,vz、fx,fy,fzの各データがインスタンス変数として定義されるとともに、_init_()、getProperty()、getPosition()、getVelocity()、setForce()、leapFrog()の各メソッドが定義される。
Atomクラスにおいて、mは原子の質量を示し、x,y,zは原子の位置座標を示し、vx,vy,vzは原子の速度を示し、fx,fy,fzは原子に作用する力ベクトルを示している。_init_()は、コンストラクタである。getProperty()は、原子の質量および位置座標を読み出すメソッドであり、getPosition()は、原子の位置座標を読み出すメソッドであり、getVelocity()は、原子の速度を読み出すメソッドである。また、setForce()は、原子に作用する力ベクトルを読み出すメソッドである。leapFrog()は、分子動力学法のプログラムを実行するメソッドである。
Moleculeクラスでは、atomsがインスタンス変数として定義されるとともに、_init_()、getAtomPropertyClosures()、getAtomPositionClosures()、getAtomVelocityClosures()、setAtomForceClosures()、leapFrog()の各メソッドが定義される。
Moleculeクラスにおいて、atomsは分子に含まれる全ての原子のAtomオブジェクトの配列を示している。_init_()は、コンストラクタである。getAtomPropertyClosures()は、分子に含まれる全ての原子のAtomオブジェクトのgetProperty()メソッドへの参照の配列を返すメソッドである。getAtomPositionClosures()は、分子に含まれる全ての原子のAtomオブジェクトのgetPosition()メソッドへの参照の配列を返すメソッドである。getAtomVelocityClosures()は、分子に含まれる全ての原子のAtomオブジェクトのgetVelocity()メソッドへの参照の配列を返すメソッドである。setAtomForceClosures()は、分子に含まれる全ての原子のAtomオブジェクトのsetForce()メソッドへの参照の配列を返すメソッドである。leapFrog()は、分子に含まれる全ての原子のAtomオブジェクトのleapFrog()メソッドを呼び出すメソッドである。
[ユーザによるメインルーチンの作成手順]
ユーザは、自身が定義したSimulationParserクラス、自動生成されたAtomクラスおよびMoleculeクラスを用いて、分子軌道法と分子動力学法とが結合されたメインルーチンを作成する。具体的には、以下のような処理をおこなうコードを書く。
まず、メインルーチンにて、Atomクラスのコンストラクタを呼び出して、Atomオブジェクトを生成し、原子量、原子座標と速度の初期値を設定する。これらのAtomオブジェクトを配列に格納して、この配列を引数としてMoleculeクラスのコンストラクタを呼び出して、Moleculeオブジェクトを生成する。このMoleculeオブジェクトのインスタンスメソッド getAtomPropertyClosures()、setAtomPositionClousres()、setAtomVelocityClosures()、setAtomForceClosures()を呼び出して、返されたクロージャの配列をそれぞれ、変数 propGetters、positionGetters、volocityGetters、forceSettersに代入する。SimulationParserオブジェクトを生成するために、これらの変数を引数としてSimulationParserクラスのコンストラクタを呼び出す。また、メインルーチンには、分子シミュレーションの開始時刻starttimeおよび終了時刻endtimeが設定されるとともに時間ステップtimestepが設定される。シミュレーションのなかで、時間は連続的に変化するわけではなく、ここで、設定された時間ステップの刻み幅で、開始時刻starttimeから終了時刻endtimeまで離散的に変化する。
そして、ユーザは、メインルーチンにて、SimulationParserオブジェクトのsetInput()、doCalc()、parseOutput()の各インスタンスメソッドを順に呼び出し、および、MoleculeオブジェクトのleapFrog()インスタンスメソッドを順に呼び出す。setInput()メソッドにより、分子軌道法プログラムの入力ファイルが作成され、当該入力ファイルに入力データとなる原子のデータ(質量、座標など)が書き込まれる。doCalc()メソッドにより、分子軌道法プログラムが呼び出され、当該入力ファイルが渡される。parseOutput()メソッドにより、分子軌道法プログラムの出力ファイルより読み出した各原子に作用する力ベクトルがforceSettersに設定される。leapFrog()メソッドにより、分子動力学法プログラムが実行され、分子中の各原子の位置および速度の変化が求められる。ここで、SimulationParerクラスのsetInput()、doCalc()、parseOutput()の各メソッド、および、MoleculeクラスのleapFrog()メソッドは、シミュレーションの中の時刻が、開始時刻starttimeから終了時刻enttimeまで、時間ステップtimestepの刻みで離散的に増えていく間に、繰り返し呼び出されるように設定される。
また、上記の時刻に関するループの中で、クロージャの配列である positionGetter、velocityGettersから、その要素であるクロージャをひとつづつ取り出して、そのクロージャを実行することで各原子の位置座標と速度を読み出し、これらのデータファイルに書き込む。ちなみに、このようなメインルーチンをプログラミング言語Pythonで書くと、そのコードは以下のようなものになる。

---------------------<コード例はじめ>------------------------------------

atoms = []
# 原子オブジェクトの原子座標、速度などを初期化して、
# 原子オブジェクトを atomsリストに追加する処理。

mol = Molecule(atoms)

propGetters = mol.getAtomPropertyClosures()
positionGetters = mol.setAtomPositionClosures()
velocityGetters = mol.setAtomVelocityClosures()
forceSetters = mol.setAtomForceClosures()

parser = SimulationParser( propGetters, positionGetters,
forceSetters )

timeStep = 0.1 # タイムステップ(時刻の変化幅)を設定。

for t in arange(startTime, endTime, timeStep):
parser.setInput()
parser.doCalc()
parser.parseOutput()

mol.leapFrog( timeStep )

for p, v in positionGetters, velocityGetters :
x, y, z = p()
vx, vy, vz = v()
# x, y, z, vx, vy, vz をデータファイルに書き込む処理。

---------------------<コード例おわり>------------------------------------

[メインルーチンにおけるオブジェクト間の相互作用]
次に、メインルーチンが実行されることによるSimulationParserクラス、Atomクラス、Molculeクラスの各クラスのインスタンス間の相互作用の一例について図5、図6に示すシーケンス図を用いて説明する。図5、図6において、「parser」は、SimulationParserクラスのインスタンス(SimulationParserオブジェクト)を示し、「mol」は、Moleculeオブジェクトを示し、「atoms[0]」「atoms[1]」は、分子中の2つの原子に対応するAtomオブジェクトを示す。
図5、6に示す例では、上述したように、メインルーチンは、SimulationParerオブジェクトのsetInput()、doCalc()、parseOutput()の各インスタンスメソッド、および、MoleculeオブジェクトのleapFrog()インスタンスメソッドを順に呼び出す。以下、具体的に説明する。
まず、プログラム中のステップt1において、メインルーチンは、parserオブジェクトのsetInput()メソッドを呼び出す。setInput()メソッドは、インスタンス変数posGettersおよびatomMassesの各データより、原子のデータを取得して分子軌道法の入力ファイルに書き込むメソッドである。ここで、先に述べたように、posGettersには、MoleculeオブジェクトのgetAtomPositionClosures()メソッドにより返された値が格納されている。従って、parserオブジェクトは、setInput()メソッドがメインルーチンにより呼び出されると、分子に含まれる各原子のAtomオブジェクトのgetPosition()メソッドを用いて、各原子の位置座標を取得することができる。図5に示す例では、parserオブジェクトは、atoms[0]およびatoms[1]の各Atomオブジェクトにおける位置座標のデータx,y,zを取得する。また、ステップt2において、parserオブジェクトは、分子中の残りの原子のAtomオブジェクトについても、getPosition()メソッドを用いて位置座標のデータx,y,zを取得する。そして、parserオブジェクトは、setInput()メソッドの中で定義された方法で、取得した位置座標のデータx,y,zを分子軌道法の入力ファイルに書き込む。このようにすることで、分子中の各原子の位置座標が書き込まれた分子軌道法の入力ファイルが作成される。なお、位置座標のデータx,y,zは、各原子で互いに異なるのは言うまでもない。
ステップt3において、メインルーチンは、parserオブジェクトのdoCalc()メソッドを呼び出す。doCalc()は、分子軌道法プログラムをオペレーティングシステムの別プロセスとして呼び出し、setInput()で作成した入力ファイルを分子軌道法プログラムへ渡して実行するメソッドである。従って、parserオブジェクトは、doCalc()メソッドがメインルーチンにより呼び出されると、doCalc()メソッドの中で定義された方法で、分子軌道法プログラムを呼び出し、setInput()メソッドで作成された入力ファイルを渡して実行する。これにより、分子中の各原子に作用する力ベクトルが求められる。
ステップt4において、メインルーチンは、parserオブジェクトのparseOutput()メソッドを呼び出す。parseOutput()は、分子軌道法プログラムの出力ファイルを解析して力ベクトルを読み出して、Atomオブジェクトに力ベクトルを設定するメソッドである。従って、parserオブジェクトは、parseOutput()メソッドがメインルーチンにより呼び出されると、分子軌道法プログラムの出力ファイルを解析して分子中の各原子に作用する力ベクトルfx,fy,fzをそれぞれ読み出して配列forceSettersに格納されているクロージャに渡す。ここで、先に述べたように、forceSettersには、MoleculeオブジェクトのsetAtomForceClosures()メソッドにより返された値が格納されている。従って、parserオブジェクトは、分子に含まれる各原子のAtomオブジェクトのsetForce()メソッドを用いて、力ベクトルfx,fy,fzを各原子のAtomオブジェクトに設定することになる。図5に示す例では、parserオブジェクトは、atoms[0]およびatoms[1]の各Atomオブジェクトのそれぞれに、setForce()メソッドを用いて、力ベクトルfx,fy,fzを設定する。また、ステップt5において、parserオブジェクトは、分子中の残りの原子のAtomオブジェクトについても、setForce()メソッドを用いて、力ベクトルfx,fy,fzを設定する。なお、各原子に作用する力ベクトルfx,fy,fzは、各原子で互いに異なるのは言うまでもない。これにより、分子中の各原子に力ベクトルが作用するように設定される。
ステップt6において、メインルーチンは、MoleculeオブジェクトのleapFrog()メソッドを呼び出す。MoleculeオブジェクトのleapFrog()メソッドは、分子に含まれる全ての原子のAtomオブジェクトのleapFrog()メソッドを呼び出すメソッドである。AtomオブジェクトのleapFrog()メソッドは、分子動力学法のプログラムを実行するメソッドである。AtomオブジェクトのleapFrog()メソッドは、設定された力ベクトルfx,fy,fzを基に、分子動力学法のアルゴリズムを用いて、時間ステップtimestepの分だけ、原子の位置および速度を変化させる。図6に示す例では、moleculeオブジェクトは、atoms[0]およびatoms[1]の各AtomオブジェクトのleapFrog()メソッドを呼び出して、時間ステップtimestepの分だけ、原子の位置および速度を変化させる。また、ステップt7において、moleculeオブジェクトは、分子中の残りの原子のAtomオブジェクトについても、leapFrog()メソッドを呼び出して、時間ステップtimestepの分だけ、原子の位置および速度を変化させる。
ステップt8において、メインルーチンは、moleculeオブジェクトのleapFrog()メソッドの呼び出しを終えると、分子中の各AtomオブジェクトのgetPosition()メソッドおよびgetVelocity()メソッドを呼び出して、各原子の位置座標と速度とを読み取り、データファイルに出力する。ステップt9以降、メインルーチンは、残りの時間ステップについて、上述したのと同様の動作を繰り返す。
図5、6にて破線矢印で示した、getPosition()メソッドによる処理とその返り値x,y,zを授受する処理、力ベクトルfx,fy,fzを授受する処理、setForce()メソッドによる処理、leapFrog()メソッドによる処理は、自動生成されるクラスの内部で行われる処理である。これらの、AtomオブジェクトのgetProperty()、getPosition()、getVelocity()、setForce()の各メソッドへの参照は、moleculeオブジェクトのgetAtomPropertyClosures()、getAtomPositionClosures()、getAtomVelocityClosures()、setAtomForceClosures()の各メソッドの返り値として得られ、クロージャの配列に格納される。従って、ユーザは、これらの処理をコードとして書かずに済み、計算の度に変化する原子の状態(位置、速度)を保持しつつ、保持された原子の状態を用いた計算が自動的になされることになる。つまり、クロージャを用いることで、分子中の全ての原子について漏れなく内部データを読み出したり、設定したりする処理を自動的に行うことができる。これにより、ユーザがAtomオブジェクトの内部データにアクセスする方法を意識することなくメインルーチンを開発することができる。
[分子と原子の間に中間的な階層を想定する場合]
なお、図4から図6に示した例では、分子と原子との間に残基などの中間的な階層を想定していなかったが、例えば、タンパク質分子の場合のように、アミノ酸残基、N末端、C末端といった中間的な階層を想定した分子シミュレーションを行う方が好適な場合がある。このような中間的な階層が想定された分子の分子シミュレーションを行う場合にも、上述したのと同様のプログラミングインターフェースを自動生成するとしても良い。
図7は、分子と原子との間に残基などの中間的な階層を想定された場合における自動生成されるクラスの一例を示すクラス図である。シミュレーション開発支援装置100は、インターフェース定義ファイルに中間的な階層が記述されている場合には、中間的な階層のクラス(以下、「中間階層クラス」と称することもある)を自動生成する。
図7に示す例では、先に述べたAtomクラスとMoleculeクラスに加え、中間階層クラスであるResidueクラス、CTerminalクラス、NTerminalクラスが自動生成される。Residueクラスはアミノ酸残基を示すラッパークラスであり、CTerminalクラスはC末端を示すラッパークラスであり、NTerminalクラスはN末端を示すラッパークラスである。
Risidueクラスでは、Moleculeクラスと同様に、_init_()_、getAtomPropertyClosures()、getAtomPositionClosures()、getAtomVelocityClosures()、setAtomForceClosures()、leapFrog()の各メソッドが定義されている。また、Residueクラスでは、compornentsがインスタンス変数として定義されている。compornentsは、直上の階層のオブジェクトへの参照の配列(図7に示す例では、Atomオブジェクトへの参照の配列)を示している。また、同様に、CTerminalクラス、NTerminalクラスも、インスタンス変数 compoenentsと、Moleculeクラスと同じ種類のインスタンスメソッドを持つ。
このような中間的階層がある場合も、ユーザは、自身が定義したSimulationParserクラス、自動生成されたAtomクラス、Moleculeクラス、Residueクラス、CTerminalクラス、NTerminalクラスを用いて、分子軌道法と分子動力学法とが結合されたメインルーチンを作成する。これによっても、ユーザがAtomオブジェクトの内部データにアクセスする方法を意識することなくメインルーチンを開発することができる。
[クラスの自動生成処理]
次に、クラスの自動生成処理について図8〜図11を用いて説明する。クラスの自動生成処理は、シミュレーション装置100において、制御部11がプログラムを実行することにより行われる。
まず、Atomクラスの自動生成処理について図8を用いて説明する。図8は、Atomクラスの自動生成処理を示すフローチャートである。
ステップS101において、制御部11は、Atomクラスのクラス名を宣言する。ステップS102において、制御部11は、Atomクラスのデータとして、原子の質量および位置座標、速度、力ベクトルに対応するインスタンス変数(図4、図7の例でいうと、「m」、「x,y,z」、「vx,vy,vz」、「fx,fy,fz」)を宣言する。(ただし、Pythonのように変数を動的に割り付ける言語では、ステップS102は省略される。)ステップS103において、制御部11は、原子の質量と位置座標を引数とするコンストラクタを宣言する。そして、制御部11は、コンストラクタ内の処理として、原子の質量と位置座標とをそれぞれ、対応するインスタンス変数に代入する処理を書き出すとともに、原子の速度と力ベクトルとに対応するインスタンス変数を初期化する(例えば「ゼロ」にする)処理を書き出す。
ステップS104において、制御部11は、getProperty()メソッドを宣言する。制御部11は、getProperty()メソッド内の処理として、原子の質量と位置座標とのそれぞれに対応するインスタンス変数の値を返す処理を書き出す。ステップS105において、制御部11は、getPosition()メソッドを宣言する。制御部11は、getPosition()メソッド内の処理として、原子の位置座標に対応するインスタンス変数の値を返す処理を書き出す。
ステップS106において、制御部11は、getVelocity()メソッドを宣言する。制御部11は、getVelocity()メソッド内の処理として、原子の速度に対応するインスタンス変数の値を返す処理を書き出す。ステップS107において、制御部11は、setForce()メソッドを宣言する。そして、制御部11は、setForce()メソッド内の処理として、setForce()メソッドの引数を力ベクトルに対応するインスタンス変数に設定する処理を書き出す。ステップS108において、制御部11は、時間ステップtimestepを引数とするleapFrog()メソッドを宣言する。そして、制御部11は、リープフロッグ法(あるいは他の運動方程式の積分方法)に従って、力ベクトルの強さに応じて、原子の位置座標および速度を時間ステップtimestepの分だけ変化させる処理を書き出す。この後、制御部11は、Atomクラスの自動生成処理を終了する。このようにして、図4、図7に示したようなAtomクラスが自動生成される。
次に、制御部11は、ユーザが書いたインターフェース定義ファイルに中間的な階層が定義されているか否かを判定する。制御部11は、インターフェース定義ファイルに中間的な階層が定義されていると判定した場合には、中間階層クラスの自動生成処理を行う。一方、制御部11は、インターフェース定義ファイルに中間的な階層が定義されていないと判定した場合には、Moleculeクラスの自動生成処理を行う。
まず、中間階層クラスの自動生成処理について図9、図10を用いて説明する。図9、図10は、中間階層クラスの自動生成処理を示すフローチャートである。
ステップS201において、制御部11は、インターフェース定義ファイルに記載された中間的な階層の名前を中間階層クラスのクラス名として宣言する。ステップS202において、制御部11は、直上の階層のオブジェクト(例えばAtomオブジェクト)の配列への参照をインスタンス変数(図7の例でいうと「compornets」)として宣言する。ステップS203において、制御部11は、直上の階層のオブジェクトの配列への参照を引数とするコンストラクタを宣言する。そして、制御部11は、コンストラクタ内の処理として、引数として受け取った配列への参照を当該インスタンス変数に代入する処理を書き出す。
ステップS204において、制御部11は、getAtomPropertyClosures()メソッドを宣言する。ステップS205において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトか否かを判定する。
制御部11は、直上の階層のオブジェクトがAtomオブジェクトであると判定した場合には(ステップS205:Yes)、ステップS206の処理へ進む。ステップS206において、制御部11は、インスタンス変数に配列として代入されている全てのAtomオブジェクトについて、そのgetProperty()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS204で宣言したgetAtomPropertyClosures()メソッドの返り値とする処理を書き出す。一方、ステップS205において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトでないと判定した場合には(ステップS205:No)、ステップS207の処理へ進む。ステップS207において、制御部11は、インスタンス変数に配列として代入されている全てのオブジェクトのgetAtomPropertyClosures()メソッドを呼び出すことで、その返り値であるgetProperty()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS204で宣言したgetAtomPropertyClosures()メソッドの返り値とする処理を書き出す。
ステップS208において、制御部11は、getAtomPositionClosures()メソッドを宣言する。ステップS209において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトか否かを判定する。
制御部11は、直上の階層のオブジェクトがAtomオブジェクトであると判定した場合には(ステップS209:Yes)、ステップS210の処理へ進む。ステップS210において、制御部11は、インスタンス変数に配列として代入されている全てのAtomオブジェクトについて、そのgetPosition()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS208で宣言したgetAtomPositionClosures()メソッドの返り値とする処理を書き出す。一方、ステップS209において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトでないと判定した場合には(ステップS209:No)、ステップS211の処理へ進む。ステップS211において、制御部11は、インスタンス変数に配列として代入されている全てのオブジェクトのgetAtomPositionClosures()メソッドを呼び出すことで、その返り値であるgetPosition()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS208で宣言したgetAtomPositionClosures()メソッドの返り値とする処理を書き出す。
ステップS212において、制御部11は、getAtomVelocityClosures()メソッドを宣言する。ステップS213において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトか否かを判定する。
制御部11は、直上の階層のオブジェクトがAtomオブジェクトであると判定した場合には(ステップS213:Yes)、ステップS214の処理へ進む。ステップS214において、制御部11は、インスタンス変数に配列として代入されている全てのAtomオブジェクトについて、そのgetVelocity()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS212で宣言したgetAtomVelocityClosures()メソッドの返り値とする処理を書き出す。一方、ステップS213において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトでないと判定した場合には(ステップS213:No)、ステップS215の処理へ進む。ステップS215において、制御部11は、インスタンス変数に配列として代入されている全てのオブジェクトのgetAtomVelocityClosures()メソッドを呼び出すことで、その返り値であるgetVelocity()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS212で宣言したgetAtomVelocityClosures()メソッドの返り値とする処理を書き出す。
ステップS216において、制御部11は、setAtomForceClosures()メソッドを宣言する。ステップS217において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトか否かを判定する。
制御部11は、直上の階層のオブジェクトがAtomオブジェクトであると判定した場合には(ステップS217:Yes)、ステップS218の処理へ進む。ステップS218において、制御部11は、インスタンス変数に配列として代入されている全てのAtomオブジェクトについて、そのsetForce()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS216で宣言したsetAtomForceClosures()メソッドの返り値とする処理を書き出す。一方、ステップS217において、制御部11は、直上の階層のオブジェクトがAtomオブジェクトでないと判定した場合には(ステップS217:No)、ステップS219の処理へ進む。ステップS219において、制御部11は、インスタンス変数に配列として代入されている全てのオブジェクトのsetAtomForceClosures()メソッドを呼び出すことで、その返り値であるsetForce()メソッドへの参照を取り出す。そして、制御部11は、それらの参照全てを配列に入れて、ステップS216で宣言したsetAtomForceClosures()メソッドの返り値とする処理を書き出す。
ステップS220において、制御部11は、leapFrog()メソッドを宣言する。ステップS221において、制御部11は、インスタンス変数に配列として代入されている全てのオブジェクトのleapFrog()メソッドを呼び出す処理を書き出す。この後、制御部11は、中間階層クラスの自動生成処理を終了する。このようにして、図7に示したような中間階層クラスが自動生成される。
次に、Moleculeクラスの自動生成処理について図11を用いて説明する。図11は、Moleculeクラスの自動生成処理を示すフローチャートである。
ステップS301において、制御部11は、Moleculeクラスのクラス名を宣言する。ステップS302において、制御部11は、直上の階層のオブジェクト(例えばAtomオブジェクト)の配列への参照をインスタンス変数として宣言する。ステップS303において、制御部11は、直上の階層のオブジェクトの配列への参照を引数とするコンストラクタを宣言する。そして、制御部11は、コンストラクタ内の処理として、引数として受け取った配列への参照を当該インスタンス変数に代入する処理を書き出す。
ステップS304において、制御部11は、getAtomPropertyClosures()、getAtomPositionClosures()、getAtomVelocityClosures()、setAtomForceClosures()、leapFrog()の各メソッドを宣言する。そして、制御部11は、図9、図10の中間階層クラスの自動生成処理におけるステップS204〜S221で述べたのと同様の処理を行うことで、当該各メソッドの処理を書き出す。この後、制御部11は、Moleculeクラスの自動生成処理を終了する。このようにして、図4、図7に示したようなMoleculeクラスが自動生成される。
以上に述べたように、実施形態に係るシミュレーション装置100では、階層関係にあるAtomクラスとMoleculeクラスとを自動生成し、Moleculeクラスにおける、Atomクラスのデータへのアクセスの仕方をクロージャとして生成している。このようにすることで、分子中の全ての原子について漏れなく内部データを読み出したり、設定したりする処理を自動的に行うことができる。つまり、実施形態に係るシミュレーション装置100では、複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成している。これにより、ユーザは、当該データにアクセスする方法を意識することなく統合化プログラムを開発することができる。
なお、実施形態は、上述した実施形態の例に限られるものではなく、特許請求の範囲及び明細書全体から読み取れる発明の要旨あるいは思想に反しない範囲で適宜変更可能である。
10 バス
11 制御部
12 メモリ
13 入力部
14 ハードディスク
15 出力部
100 シミュレーション装置(シミュレーション開発支援装置)

Claims (5)

  1. 複数のシミュレーションを統合するためのインターフェースを生成するシミュレーション開発支援装置であって、
    ユーザにより定義されたインターフェース定義ファイルを基に、前記複数のシミュレーション間でのデータの授受を司る前記インターフェースを生成する自動生成手段を備え、
    前記自動生成手段は、前記複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成することを特徴とするシミュレーション開発支援装置。
  2. 前記統合化シミュレーションは、分子中の原子の位置を基に分子軌道法を用いて分子中の原子に作用する力ベクトルを求めるシミュレーションと、当該力ベクトルを基に分子動力学法を用いて分子の動的な性質を求めるシミュレーションとを統合したものであり、
    前記自動生成手段は、前記原子の位置および力ベクトルをデータとして含む前記原子のクラスと前記分子のクラスとを階層関係を持たせて生成し、前記分子のクラスにおける、前記原子のクラスのデータへのアクセスの仕方をクロージャとして生成することを特徴とする請求項1に記載のシミュレーション開発支援装置。
  3. 前記自動生成手段は、前記原子のクラスと前記分子のクラスとの間の中間階層のクラスを生成し、前記中間階層のクラスにおける、前記原子のクラスのデータへのアクセスの仕方をクロージャとして生成する請求項2に記載のシミュレーション開発支援装置。
  4. コンピュータにより実行され、複数のシミュレーションを統合するためのインターフェースを生成するシミュレーション開発支援方法であって、
    ユーザにより定義されたインターフェース定義ファイルを基に、前記複数のシミュレーション間でのデータの授受を司るインターフェースを生成する自動生成工程を備え、
    前記自動生成工程は、前記複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成することを特徴とするシミュレーション開発支援方法。
  5. コンピュータにより実行され、複数のシミュレーションを統合するためのインターフェースを生成するシミュレーション開発支援プログラムであって、
    ユーザにより定義されたインターフェース定義ファイルを基に、前記複数のシミュレーション間でのデータの授受を司るインターフェースを生成する自動生成手段、として前記コンピュータを機能させ、
    前記自動生成手段は、前記複数のシミュレーション間で授受されるデータを保持するクラスを生成するとともに、当該データへのアクセスの仕方をクロージャとして生成することを特徴とするシミュレーション開発支援プログラム。
JP2010133202A 2010-06-10 2010-06-10 シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム Expired - Fee Related JP5581829B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010133202A JP5581829B2 (ja) 2010-06-10 2010-06-10 シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010133202A JP5581829B2 (ja) 2010-06-10 2010-06-10 シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2011258074A true JP2011258074A (ja) 2011-12-22
JP5581829B2 JP5581829B2 (ja) 2014-09-03

Family

ID=45474163

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010133202A Expired - Fee Related JP5581829B2 (ja) 2010-06-10 2010-06-10 シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム

Country Status (1)

Country Link
JP (1) JP5581829B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010381A (ja) * 2016-07-11 2018-01-18 株式会社構造計画研究所 シミュレーションシステム、シミュレーション方法及びプログラム

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04111022A (ja) * 1990-08-30 1992-04-13 Matsushita Electric Ind Co Ltd インタフェースプログラム自動生成装置
JPH1049356A (ja) * 1996-07-31 1998-02-20 Matsushita Electric Ind Co Ltd メディアフロー制御システム
JP2000099319A (ja) * 1998-06-08 2000-04-07 Ricoh Co Ltd ソフトウエア間のインタ―フェ―ス方法、ソフトウエア間のインタ―フェ―スシステム及び記憶媒体
WO2006025392A1 (ja) * 2004-08-31 2006-03-09 Osaka University 移動ノードシミュレータおよびこれを実装するプログラム
JP2008250788A (ja) * 2007-03-30 2008-10-16 Fujitsu Ltd 連携シミュレーションシステム
JP2009020801A (ja) * 2007-07-13 2009-01-29 Nec Corp 情報処理装置およびシミュレーション連携方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04111022A (ja) * 1990-08-30 1992-04-13 Matsushita Electric Ind Co Ltd インタフェースプログラム自動生成装置
JPH1049356A (ja) * 1996-07-31 1998-02-20 Matsushita Electric Ind Co Ltd メディアフロー制御システム
JP2000099319A (ja) * 1998-06-08 2000-04-07 Ricoh Co Ltd ソフトウエア間のインタ―フェ―ス方法、ソフトウエア間のインタ―フェ―スシステム及び記憶媒体
WO2006025392A1 (ja) * 2004-08-31 2006-03-09 Osaka University 移動ノードシミュレータおよびこれを実装するプログラム
JP2008250788A (ja) * 2007-03-30 2008-10-16 Fujitsu Ltd 連携シミュレーションシステム
JP2009020801A (ja) * 2007-07-13 2009-01-29 Nec Corp 情報処理装置およびシミュレーション連携方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNG200500584009; 市川 昊平,伊達 進,中田 一人,米澤 康滋,Rossen Apostolv,中村 春木,下條 真司: '機能分散型生体高分子シミュレーション実行環境' 情報処理学会研究報告 Vol.2004,No.81, 20040801, pp.49-54, 社団法人情報処理学会 *
JPN6014014951; 市川 昊平,伊達 進,中田 一人,米澤 康滋,Rossen Apostolv,中村 春木,下條 真司: '機能分散型生体高分子シミュレーション実行環境' 情報処理学会研究報告 Vol.2004,No.81, 20040801, pp.49-54, 社団法人情報処理学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010381A (ja) * 2016-07-11 2018-01-18 株式会社構造計画研究所 シミュレーションシステム、シミュレーション方法及びプログラム

Also Published As

Publication number Publication date
JP5581829B2 (ja) 2014-09-03

Similar Documents

Publication Publication Date Title
Rupp et al. ViennaCL---linear algebra library for multi-and many-core architectures
Chandrasekaran et al. OpenACC for programmers: concepts and strategies
Lee et al. Early evaluation of directive-based GPU programming models for productive exascale computing
Rouson et al. Scientific software design: the object-oriented way
Calore et al. Performance and portability of accelerated lattice Boltzmann applications with OpenACC
Parker A component-based architecture for parallel multi-physics PDE simulation
Brim et al. Model checking of biological systems
US8260598B2 (en) Size vector sharing in code generated for variable-sized signals
Veen et al. Easing multiscale model design and coupling with MUSCLE 3
Bonaccorso et al. LBsoft: A parallel open-source software for simulation of colloidal systems
Park et al. Multiprocessor SoC design methods and tools
Nguyen et al. iQuantum: A toolkit for modeling and simulation of quantum computing environments
Ha Model-based programming environment of embedded software for MPSoC
JP5581829B2 (ja) シミュレーション開発支援装置、シミュレーション開発支援方法およびプログラム
Gosmann et al. Automatic optimization of the computation graph in the Nengo neural network simulator
Reardon et al. A simulation framework for rapid analysis of reconfigurable computing systems
Castrillon et al. Dataflow Models of computation for programming heterogeneous multicores
Chang et al. Enabling PoCL-based runtime frameworks on the HSA for OpenCL 2.0 support
Rio et al. Asynchronous interface between a finite element commercial software abaqus and an academic research code herezh++
Goli Visioncpp: A sycl-based computer vision framework
Humble et al. Software systems for high-performance quantum computing
Stavåker Contributions to parallel simulation of equation-based models on graphics processing units
Vogel et al. Automated performance modeling of the ug4 simulation framework
Jacob et al. Raising the Level of Abstraction of GPU-programming.
McClure et al. Asynchronous in situ connected-components analysis for complex fluid flows

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130403

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140408

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140523

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140617

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140630

R150 Certificate of patent or registration of utility model

Ref document number: 5581829

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees