(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5852032
(24)【登録日】2015年12月11日
(45)【発行日】2016年2月3日
(54)【発明の名称】多変数関数の数値積分用標本点とその重みの生成方法及び生成プログラム
(51)【国際特許分類】
G06F 17/11 20060101AFI20160114BHJP
G06F 19/00 20110101ALI20160114BHJP
【FI】
G06F17/11
G06F19/00 110
【請求項の数】6
【全頁数】21
(21)【出願番号】特願2013-54602(P2013-54602)
(22)【出願日】2013年3月18日
(65)【公開番号】特開2014-182419(P2014-182419A)
(43)【公開日】2014年9月29日
【審査請求日】2014年9月30日
(73)【特許権者】
【識別番号】312010799
【氏名又は名称】中川 克己
(72)【発明者】
【氏名】中川 克己
【審査官】
田中 幸雄
(56)【参考文献】
【文献】
特開2007−109023(JP,A)
【文献】
特開2008−021259(JP,A)
【文献】
米国特許出願公開第2003/0055616(US,A1)
【文献】
米国特許出願公開第2004/0133410(US,A1)
【文献】
特開2005−293296(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/11
G06F 19/00
(57)【特許請求の範囲】
【請求項1】
コンピューターに
空間Bで定義された被積分関数の
特異点qj,0(j=1,2,・・・,M)を取得させる工程と、
特異点q
j,0毎に対応する空間A
jを設定
させ、
各空間A
jにおいて、
所定の方式でN
j個の標本点p
j,i(i=1,2,・・・,N
j)を配列
させる工程と、
標本点p
j,iに対して重みv
j,iを与え
させる工程と、
空間A
jから空間Bへの標本点の変換式を設定
させる工程と、
標本点p
j,iを該変換式により変換しさらに
空間Bの原点と特異点q
j,0の位置
の差分だけ移動して空間Bの標本点q
j,iに対応付け
させる工程と、
空間Bにおける標本点q
j,iの重みと空間Ajにおける標本点pj,iの重みの比dw/dvを
該変換式に基づいて算出し、
被積分関数の空間A
jへの分配比g
jを
標本点qj,iと各特異点qk,0 (k=1,2,・・・,M)の位置関係に基づいて算出し、
標本点q
j,iの重みW
j,iとして
【数25】
を算出
させる工程
と、
標本点qj,iの位置とその重みWj,iをメモリに保存または出力させる工程とを実行させる多変数関数の数値積分用の標本点とその重みの生成方法において、
空間A
jの標本点p
j,iは面心立方格子状に配列される事を特徴とする多変数関数の数値積分用の標本点とその重みの生成方法。
【請求項2】
請求項1に記載の多変数関数の数値積分用の標本点とその重みの生成方法において、
前記重みの比dw/dvは、特異点qj,0と標本点qj,iとの距離rに対してr2h(r)の形で依存し、
関数h(r)はr→0に対して減少しつつ所定の値に収束する関数であり、
該所定の値はh(r)が含むパラメーターの調整によって0または任意の正の値に出来るものである事を特徴とする、
多変数関数の数値積分用の標本点とその重みの生成方法。
【請求項3】
請求項1および請求項2に記載の多変数関数の数値積分用の標本点とその重みの生成方法において、
前記空間Ajの標本点pj,iから対応付けられた標本点qj,iは、前記空間Bにおいて空間Ajに対応する特異点qj,0を含む少なくとも一つの平面に対して面対称に配列される事を特徴とする多変数関数の数値積分用の標本点とその重みの生成方法。
【請求項4】
コンピューターに
空間Bで定義された被積分関数のM個の特異点q
j,0(j=1,2,・・・,M)の座標を
入力させ、
各特異点
qj,0に対応する空間A
jを設定
させ、
空間A
jにおいて、
空間A
jから空間Bへの標本点の変換式を設定
させ、
空間A
jにおける標本点数を設定
させ、
所定の方式に従って標本点p
j,i(i=1,2,・・・,N
j)を生成
させ、
標本点p
j,iに付随する重みv
j,iを設定
させ、
前記変換式に従って標本点p
j,iを変換し
さらに空間Bの原点と特異点q
j,0の位置
の差分だけ移動し空間Bの標本点q
j,iに対応付け
させ、
空間Bにおける標本点q
j,iの重みと空間Ajにおける標本点pj,iの重みの比dw/dv
を該変換式に基づいて算出させ、
被積分関数の空間A
jへの分配比g
jを
標本点qj,iと各特異点qk,0 (k=1,2,・・・,M)の位置関係に基づいて算出
させ、
標本点q
j,iの重みW
j,iとして数式26を算出し、
【数26】
標本点qj,iとその重みWj,iをメモリに保存または出力させる多変数関数の数値積分用の標本点とその重みの生成プログラムにおいて、
空間A
jの標本点p
j,iは面心立方格子状に配列される事を特徴とする多変数関数の数値積分用の標本点とその重みの生成プログラム。
【請求項5】
請求項4に記載の多変数関数の数値積分用の標本点とその重みの生成プログラムにおいて、
前記重みの比dw/dvは、空間Bの特異点qj,0と標本点qj,iとの距離rに対してr2h(r)の形で依存し、
関数h(r)はr→0に対して減少しつつ所定の値に収束する関数であり、
該所定の値はh(r)が含むパラメーターの調整によって0または任意の正の値に出来るものである事を特徴とする、
多変数関数の数値積分用の標本点とその重みの生成プログラム。
【請求項6】
請求項4および請求項5に記載の多変数関数の数値積分用の標本点とその重みの生成プログラムにおいて、
前記空間Ajの標本点pj,iから対応付けられた標本点qj,iは、前記空間Bにおいて空間Ajに対応する特異点qj,0を含む少なくとも一つの平面に対して面対称に配列される事を特徴とする多変数関数の数値積分用の標本点とその重みの生成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、数値シミュレーション等において必要とされる多変数関数の数値積分を高精度で行うために好適な標本点と重みの生成方法及びその生成のためのプログラムに関するものである。
【背景技術】
【0002】
数値シミュレーション等において、必要とされる関数の積分が解析的には不可能または困難な場合がある。その場合でも被積分関数が1変数の関数であれば、Sympsonの公式を始めとする各種公式を用いて任意の精度で数値積分を行う事が出来る。しかし被積分関数が多変数関数の場合は、単純に重積分を行ったのでは計算量が著しく増大するので、モンテカルロ法が用いられる事が多い。モンテカルロ法とは、非特許文献1に記載されている様に空間の点pにおける被積分関数をf(p)とする時、数式1に示す積分を数式2に示す形で近似する方法である。
【0003】
【数1】
【0004】
【数2】
【0005】
ここでp
iは積分を行う空間に分布するN個の標本点の一つで、例えばf(p)が3変数の関数ならp
i=(s
i,t
i,u
i)の様に3個の座標値を持つ。またv
iは標本点p
iに割り当てられる重み(空間要素の体積)である。標本点としては準乱数の組が広く用いられている。準乱数とは、適当な無理数を整数倍した値の小数点以下の部分であり、整数として1〜Nを順次与える事によってN個の準乱数が得られる。また3変数の関数の場合は、例えば√2、√3、√5の様な相異なる3個の無理数に対し整数として1〜Nを順次与える事によって標本点がN個得られる。この様にして得られた標本点は空間の中で一様に近い分布をする。通常は完全に一様な分布と見なしてv
i=V/Nを与える。ここでVは積分を行う空間の体積である。但し積分を行う空間の表面に位置する標本点には、これと異なる値を与えても良い。数式2の誤差は概ねNに反比例するので、高い精度が必要なら通常多数の標本点を使う必要がある。
【0006】
数値積分が必要となる関数の中には、積分を行う空間の中でその値(絶対値)を大きく変えるものがある。例えば数値積分が必要となる典型的な数値シミュレーションである分子軌道法の場合、被積分関数として数式3の形の関数が現れる事が多い。
【0007】
【数3】
【0008】
ここでZは分子を構成する原子の原子番号、rは原子核と標本点との距離、nは通常1か1以上である。例えば分子の全エネルギーを求めるには原子核と電子のクーロン相互作用のエネルギーを計算する必要があるが、その場合はn=1である。1/r
nの寄与に加えて、波動関数φ
1及びφ
2は原子核に近づくにつれ値が大きくなるので数式3は原子核近傍で著しく大きな値を取る事が多い。原子核の位置の様に被積分関数の値が著しく大きくなる点を以下では被積分関数の特異点、又は単に特異点と呼ぶ。一方原子核から遠くなると一般に波動関数は0に向かって指数関数的に収束する。そのため数式2の右辺の各項の大きさは著しく不揃いとなり、大きな値をとる項の誤差が支配的となってNを大きくしてもその割には積分の精度が向上しない。この効果は特にZの大きな原子を含む分子の場合に顕著となる。
【0009】
この問題を改善するため変数の変換が利用される事が多い。始めに原子が1個だけある場合について説明する。始めに仮想的な空間Aを考え、この空間における標本点p
iに対し、適当な変換式によって被積分関数が定義された空間Bにおける標本点q
iを対応させる。所望の積分は空間Bにおいて数式4の形の数値積分で近似される。
【0010】
【数4】
【0011】
w
iは標本点q
iの重みである。空間Aと空間Bの標本点の重みの比dw/dvを使うとw
iは数式5の様に表される。
【0012】
【数5】
【0013】
ここで変換式を調整して、空間Bの標本点を、関数f(q)の値が大きい場所では密に分布させ、f(q)の値が小さい場所では疎に分布させることにする。するとf(p)の値が大きい場所ではdw/dvは小さくなり、f(p)の値が小さい場所ではdw/dvが大きくなるため、数式4の右辺の各項の値のバラツキが小さくなる。このため数式4を直接数値積分するより、Nが同じでも精度が高くなる。見方を変えると、空間Bにおける被積分関数f(p)を、空間Aにおいて値の変化が少ない関数f(p)dw/dvに変換して数値積分すると考える事も出来る。
【0014】
3変数の場合について具体的な例を考えてみる。非特許文献2にならって空間Aとしてs=[0,1]、t=[0,1]、u=[0,1]の立方体を想定し、この中に準乱数を使って標本点を分布させる。空間Bの座標系として極座標系を採用し、数式15の変換式に従って標本点p
i(s
i,t
i,u
i)を標本点q
i(Φ
i,θ
i,r
i)に対応付ける。
【0015】
【数6】
【0016】
ここでR
0は標本点の分布の広がりを調整するパラメーターである。Γはu→1とする時r→∞となるように定められる係数であり数式7で与えられる。この時dw/dvは数式8の様に与えられる。
【0017】
【数7】
【0018】
【数8】
【0019】
従って関数の特異点(原子核の位置)の近傍で被積分関数f(q)が数式3に従って大きくなっても、n=1であれば数式4の右辺各項は特に大きくならないので数値積分の精度は低下し難い。
【0020】
以下ではM個の原子を含む一般の分子について説明する。この場合、空間BにM個の特異点q
j,0(原子核の位置,j=1,2,・・・,M)を含む事になる。空間Aの標本点からM個の特異点を含む空間Bの標本点に、単一の変換式で対応づけられると理想的であるが、今のところ適当な変換式が見つかっていない。そこで各特異点に対応する空間A
1、空間A
2、・・・、空間A
Mを考え、各空間において所定の方式に従って標本点p
j,i(j=1,2,・・・,M,i=1,2,・・・,N
j)を配置することにする。N
jは特異点q
j,0の性質によって最適な値が異なるので一般にはjに依存する。次に数式6に従って標本点p
j,iから空間Bに変換する。各空間によってR
0や係数Γも異なっていて良い。さらに特異点q
j,0の座標分だけ平行移動し標本点q
j,iとする。
ここで所望の積分を数式9の様にM個の積分に分割し各空間A
jに割り当てる。
【0021】
【数9】
【0022】
g
jは被積分関数をM個の空間へ分配する比であり、数式10を満たし、特異点q
j,0の近傍でg
j(q)〜1、g
k(q)〜0を満たす様な関数である。(ここでkはjと異なる。)
【0023】
【数10】
【0024】
標本点にたいする重みW
j,iを数式11の様に定義し、数式4の数値積分を数式12の様に一般化する。
【0025】
【数11】
【0026】
【数12】
【0027】
ここでr
j,iは空間Bにおける特異点q
j,0から標本点q
j,iまでの距離である。こうして標本点q
j,iとその重みW
j,iが与えられ単純な
積算によって数値積分が実行できる。
【0028】
分配比g
jとしては様々な関数形が考えられるが、M=3の場合の一例を示す。数式13のW‘
k,iを用いて、g
1(q
1,i)を数式14の様に定義する。r
k,iは特異点q
k,0と標本点q
j,iの距離であり、ここでk≠jでもk=jでも良い。言い換えればW‘
k,iは、標本点q
j,iが、仮に空間A
kから空間Bに対付けられた標本点であったとした時に与えられるべき重みである。
【0029】
【数13】
【0030】
【数14】
【0031】
g
2(q
1,i)やg
3(q
1,i)は、添え字1,2,3を循環的に置換すると得られる。これらの関数は数式10を満たす事は明らかであり、また原子1の原子核近傍ではw
1,iが特に小さくなるのでg
1〜1、g
2〜0、g
3〜0となりg
jに求められる性質を満たす事が分かる。なお数式14の定義から数式15が導かれる。これを一般化すると標本点q
j,iの重みw
j,iは数式16で定義される。
【0032】
【数15】
【0033】
【数16】
【0034】
以上の一般のMに関する説明は、前述のM=1の場合の自然な拡張になっており、M=1の場合を含む。
【0035】
分子の分子軌道や全エネルギーについては、以上の方法で得られる標本点やその重みを用いて数値積分を行っても、必要に応じて標本点数を増やせば精度の高い計算結果を得る事が出来る。しかし分子の平衡構造を求める等の目的から、分子軌道法により原子核に働く力(=エネルギー勾配)を計算する必要が生じる事がある。非特許文献3には数値積分法を用いて原子に働く力(エネルギー勾配)を求め、分子の構造を最適化するための方法が説明されている。ところが非特許文献3によると、従来の方法による標本点やその重みを用いて数値積分を行ったのでは得られた力の精度が不十分な場合が多く、特に周期律表の第4周期以上の原子を含む分子に対しては意味のある結果を得る事が出来なかった。また第2周期以下の原子のみを含む分子の場合でも、多数の標本点を用いる必要があり計算に多大の時間を要した。
【0036】
原子に働く力の場合には、主要項は注目している原子の原子核に他の原子核や電子から働くクーロン力である。他の原子核から働く力は点電荷間のクーロン力なので正確に計算できる。電子から働くクーロン力は、例えばz成分の場合、数式17の形で表される。
【0037】
【数17】
【0038】
被積分関数が数式17の様な場合、特異点の近傍で関数の値は正負を挟んで激しく変化する。標本点の空間要素内でも関数の変化が大きく標本点での値が空間要素内での値を適切に代表しなくなり、モンテカルロ法の様な従来の方法では積分で高い精度を得るのが困難、または計算時間が著しく長くなるので改善が求められていた。
【先行技術文献】
【非特許文献】
【0039】
【非特許文献1】津田孝夫著 「モンテカルロ法とシミュレーション<三訂版>」培風館 1995年
【非特許文献2】足立裕彦著 「量子材料化学入門」三共出版 1991年
【非特許文献3】中川克己 「日本コンピュータ化学会 年報Vol.11」 2012年 194〜201頁
【非特許文献4】中川克己 「DV-Xα研究協会会報 Vol.23」 2010年 88〜93頁
【発明の概要】
【発明が解決しようとする課題】
【0040】
解決しようとする課題は、分子軌道法等の数値シミュレーションにおいて、値(絶対値)が特に激しく変化する多変数関数が精度良く数値積分できない問題である。
【課題を解決するための手段】
【0041】
本発明は、被積分関数が定義された空間Bにおける標本点を、空間Aにおいて面心立方格子状に規則的に配列された標本点から、変数変換によって空間Bに対応付けて生成する事を最も主要な特徴とする。
【発明の効果】
【0042】
空間Aの標本点を規則的に配列する事により、標本点における被積分関数の値を内挿する2次式が得られる。得られた2次式を積分すれば、変化の激しい関数でも高い精度で積分出来る利点がある。
【図面の簡単な説明】
【0043】
【
図1】
図1は面心立方格子の1つの格子点とその12個の最近接格子点、及び中心の格子点の空間要素を示したものである。
【
図2】
図2は準乱数による従来の標本点と、面心立方格子をなす標本点とを用いてモデル関数の数値積分を行った際に生じた誤差の比較するものである。
【
図3】
図3はSnTe分子の各原子に働く力を両原子の核間距離の関数として示したものである。(実施例2の比較例)
【
図4】
図4はSnTe分子の各原子に働く力を両原子の核間距離の関数として示したものである。(実施例2)
【
図5】
図5は本発明の数値積分法を実施するためのプログラムの概要を示したものである。(実施例4)
【発明を実施するための形態】
【0044】
本発明者は、正確な積分値を得るためには標本点の重みを正確に与える必要があると考えた。重みw
j,iは数式11に示される3つの成分から構成される。この内、g
jやdw/dvは解析的な形で与えられるので誤差を生じ難いが、v
j,iには問題がある。空間Aにおける標本点p
j,iを生成した際、通常その重みとしてV/N(=空間の体積/標本点数)を与えるが、これは標本点がVの体積の中に完全に均一に分布している限り正しい。しかし準乱数を用いて標本点を生成すると、標本点の生成に使用した無理数の組にもよるが、実際の標本点の分布にはかなりの不均一が生じている。従って空間Aにおける標本点の分布を完全に均一にする事によって数値積分の精度を向上し得るはずである。
【0045】
本発明者は標本点の完全に均一な分布の例として、Au、Ag、Cu等の結晶格子として知られる面心立方格子(FCC)を取り上げた。
図1に示す様に、FCCでは任意に選択した格子点(中心格子点101)の周囲には12個の最近接格子点102がある。(
図1では4個の最近接格子点のみが矢印で指示されているが、白丸で示す12個の格子点は全て最近接格子点である。)非特許文献4には、空間における任意の関数fを3変数の2次式で内挿し、中心格子点の近傍での2次式の関数形を中心格子点における関数値f(p
0)と12個の最近接格子点における関数値f(p
i)で決定する方法が記載され、この2次式を解析的に積分する事により、中心格子点101が占める空間要素103における関数fの積分値として数式18が与えられている。ここでdはFCCの格子定数の1/2の長さである。また空間要素の体積は2d
3である。また積分を行う体積が十分に大きければ2d
3=V/Nとして良い。
【0047】
即ち12個の最近接格子点がある場合、f(p
0)は自分自身の空間要素での積分で1回、最近接格子点の空間要素の積分で12回使われるので、積分全体への寄与は合計f(p
0)2d
3となり、中心格子点の重みとして結局V/Nを用いて良い事になる。これは2次式による内挿をした上で得られた結果なので、標本点を正確にFCCの格子点の様に配列すれば、V/Nが2次の精度を与える重みとなる事を意味し、特に変化の激しい関数を数値積分する際には効果を発揮する。
【0048】
その効果を確認するため、準乱数を用いた標本点を用いる従来の方法と、FCCの格子点を標本点とする方法の二通りの方法で数式19の数値積分を行った。
【0050】
ここで分母は規格化のための係数で、十分に広い空間で積分を行えばI=1.0となる。実際にはa=0.1としてx=[−1、1]、y=[−1、1]、z=[−1、1]の範囲で、標本点の数N=432からN=21296まで9水準で積分を行った。
図2に両者が示した誤差202(= I -1.0)を示す。標本点数201の増加とともに、いずれの誤差も概ね減少していくが、特にFCCの標本点を用いた場合204は、準乱数の標本点を用いた場合203より急速に誤差が減少していく。N=3456以上ではほぼ一定となるが、これは積分の範囲が有限なため生じた誤差であり数値積分の誤差ではない。
【0051】
数式12は空間Bにおける関数fの数値積分であると同時に、空間Aにおける関数fg
jdw/dvの数値積分と見る事もできる。従って空間Aの標本点の重みの精度を高めると、空間Bにおける被積分関数fの数値積分の精度を高める事になる。従って空間AでFCCの標本点を使用すれば空間Bにおける所望の数値積分の精度を高める事ができる。
【0052】
しかし一つ注意を要する点がある。数式18から分かる様に、積分領域の周辺部に位置する標本点に対しては重み=V/Nは正確ではない。幸い
図2の被積分関数の場合には、周辺部で被積分関数の値が殆ど0であり、周辺部の標本点の重みの不正確さにより生じる誤差は無視しうるのでFCCによる計算例では極めて高い精度が得られた。逆に言えば、周辺部で被積分関数の値が十分に小さくならないとFCCを用いても精度が得られない。そのため背景技術で記載した従来の方法においても、空間Aの周辺部で被積分関数fg
jdw/dvの値が小さくなる様に、重みの比dw/dvとしてr→0で0に収束する数式8の関数を採用したのである。だが被積分関数が数式17の形をとると、従来のdw/dvではその効果が十分ではなくなる。そこで本発明者は、数式8の右辺の[ ]内の式をh(r)とする時、現状ではr→0で1より大きな値に緩慢に収束しているh(r)を、0または1よりも小さな所定の正の値に急速に収束する関数に改良した。この様な重みの比dw/dvの一例として数式20を示す。
【0054】
ここでR
0はdw/dvのr→0での収束の速さを調整するためのパラメーターである。r→0で、R
0が十分小さな正の値ならdw/dvは急速に減少して1より小さな正の値となり、R
0=0なら0となる。この時、数式6で与えられていた標本点の変換の式は数式21に、数式7で与えられていた係数Γは数式22に変更する。以下、複数の原子からなる分子等、特異点がM個ある一般の場合について説明する。
【0057】
即ち、各特異点q
j,0に対応する空間A
jにおいて、標本点p
j,iをFCCの格子点を構成するように配置し、重みv
j,i=2d
3を与える。(M,i=1,2,・・・,N
j)標本点の数N
jは空間毎に異なっていても良い。次に数式21に従って標本点p
j,iから空間Bに変換を行う。空間A
jによってパラメーターR
0や係数Γは異なっていても良い。次に標本点の座標を特異点q
j,0の座標分だけ平行移動し標本点q
j,iに対応付ける。
【0058】
さらに数式10の性質を満たす被積分関数の分配比g
jを用いて所望の積分を数式9の様にM個の積分に分割し、各空間A
jに割り当てる。標本点q
j,iの重みw
j,iは数式23の様に表される。
【0060】
g
jとしては、数式24のw‘
k,iを用いて数式14で与えられる分配比が好適に使用できる。r
k,iは空間Bにおける特異点q
k,0から標本点q
j,iまでの距離である。ここでk≠jでもk=jでも良い。このw‘
k,iを使えば、標本点の重みw
j,iを数式16で直接定義できる。
【0062】
被積分関数の性質によっては、空間Aにおいて標本点が規則正しく配列される事を利用してさらに積分の精度を高める事が出来る。数式17において、原子核(特異点)近傍においてFzの被積分関数は著しく大きな値を持つが、φ
2で大きな寄与をするのはs軌道の成分であるためφ
2はほぼ球対称の性質を持つ。そこにcos(θ)がかかるので被積分関数は空間Bにおいて全体としてθ=90°の面(xy平面)に対して奇となって積分値は本来0に近いはずであるが、実際には各標本点において生じる誤差が積み重なって大きな誤差となる。もし空間Bにおいて標本点がθ=90°の面(xy面)に対して面対称になる様に配列されていると、標本点qにおいて生じる誤差と、qと面対称の位置にある標本点q
*で生じる誤差とは絶対値が同じで符号が異なり、相殺し合って積分値の誤差としては表れ難くなると期待される。同様に標本点がyz面(φ=90°と270°の面)に対して面対称に配列されているとFxの精度が、標本点がxz面(φ=0°と180°の面)に対して面対称に配列されているとFyの精度が高まると予想される。
【0063】
空間Aにおける標本点の配列を調整する事によって、空間Bにおいて標本点を特異点q
j,0を含む面に対して面対称に配列する事が出来る。空間A
jでφに対応付けられる変数sの方向の格子点の数を、例えば8にすると、空間Bでφ=0°、45°、・・・、315°の方向に標本点が配列され、yz面に対しても、xz面に対しても面対称と出来る。一般に変数uの方向の格子点の数を偶数にすればよい。また空間Aでθに対応付けられる変数t=[0、1]で、t=0.5に対して対称となる様に標本点を配列すると、空間Bでxy面に対して対称に標本点を配列できる。
【0064】
こうして得られた標本点q
j,iとその重みw
j,iはモンテカルロ法等従来の場合と全く同様に数式12の数値積分の式の中で使用できる。従って、既存の数値シミュレーションのプログラムにおいても、本発明の方法で得られた標本点と重みを読み込める様にするだけで、数値積分の精度が向上し正確なシミュレーションが可能となる点が本発明の一つの特徴である。
【実施例1】
【0065】
本実施例においては、孤立したSn原子(3重項状態)に働く力(エネルギー勾配)を計算する。もとより孤立した原子に外部から力が働くはずはないが、逆に計算によって0でない力が得られた場合はその値を誤差そのものと見なす事が出来る。計算の基本となるSn原子の分子軌道は非特許文献2に記載されたDV-Xα法によって求めた。その際に3種類の標本点とその重みを用意しDV-Xα法のプログラムに読み込ませた。
比較例1)空間Aの標本点は準乱数を使って生成し、空間Aの標本点と空間Bの標本点の重みの比dw/dvは数式8を使用した。
比較例2)空間Aの標本点は準乱数を使って生成し、空間Aの標本点と空間Bの標本点の重みの比dw/dvは数式20を使用した。
実施例)空間Aの標本点はFCCを使って生成し、空間Aの標本点と空間Bの標本点の重みの比dw/dvは数式8を使用した。
次いで3種の分子軌道を用いて非特許文献3に記載された方法で原子に働く力を計算した。すべての計算で37600個の標本点を用いた。結果を表1に示す。
【0066】
こうして得られた原子に働く力のベクトルの長さが、(Hartree)/(原子単位の長さ)を単位として表1に示されている。実施例2で示される様に、SnTe分子の核間距離を平衡値より20%伸ばした時に原子に働く引力がこの単位で0.07程度である。比較例1の値が示す様な誤差があっては、分子内の原子に働く力を論ずることが出来ないのは明らかである。比較例2にはかなりの改善が見られるが満足できる水準ではない。実施例に示す様にFCCを用いる事によって十分な精度が得られた。なお、実施例では空間Bにおいて標本点をxy平面、yz平面、zx平面のいずれに対しても面対称となる様に配置した。実施例で非常に精度が高い結果が得られたのにはその寄与もある。標本点の面対称配列がこれほどの効果を持つのは、孤立原子の被積分関数の対称性が高いためであって、一般の分子の場合にはFCC単独でこれほどの精度は出ないので、特にZの大きな原子を含む分子を扱う場合は、比較例2のdw/dvに数式20や数式23を使用する方法を併用する事が推奨される。
【0067】
【表1】
【実施例2】
【0068】
本実施例においては、主軸をZ方向に向けて配置されたSnTe分子のSn原子(下側)とTe原子(上側)に働く力を、両原子の核間距離をパラメーターとして計算した。DV-Xα法の標準の方式に従い、空間A
1と空間A
2において準乱数を用いて発生した標本点を数式6に従って空間Bに対応付けて75200個の標本点を得た。この分子軌道を用いて非特許文献3に記載された方法に従ってエネルギー勾配を計算した。こうして得られた結果を比較例として
図3に示す。ここで核間距離301は実測の平衡核間距離(=2.5228Å)を1.0とし、縦軸302は実施例1と同じ単位で表した両原子に働く力のx方向、y方向、z方向の成分である。
【0069】
一方、空間A
1においてFCCの格子点を原点を含む3平面に対し面対称性を有する様に配列してSn原子用の標本点とし、同様に空間A
2においてFCCの格子点を原点を含む3平面に対し面対称性を有する様に配列してTe原子用の標本点とした。各標本点をR
0=0.002として数式21に従って空間Bへ対応付けて得た75200個の標本点とその重みを用いて、DV-Xα法で分子軌道を求めた。この分子軌道を用いて非特許文献3に記載された方法に従ってエネルギー勾配を計算し、本実施例の結果として
図3と同じ要領で
図4に示す。
【0070】
図4においては、核間距離401が短いと下側に配置されたSn原子には下向きの力(407)が働き、上側に配置されたTe原子には絶対値が同じ上向きの力(408)が働き(斥力)、核間距離401が長いと下側に配置されたSn原子には上向きの力(407)が働き、上側に配置されたTe原子には絶対値が同じ下向きの力(408)が働く(引力)事が分かり、合理的な結果となっている。両原子に働く力がともに0となるのは核間距離=1.00で、実測の平衡距離と良く一致した。一方
図3においては、Sn原子に働く力のz成分307とTe原子に働く力のz成分308は定性的には
図4と類似の傾向を示すものの、各核間距離301で両原子に働く力の絶対値は異なり、しかも本来存在しないはずのx方向の力(303,304)やy方向の力(305,306)がz方向の力(307や308)と同程度の大きさを持つと言う不合理な結果となった。本発明の数値積分法による精度向上の効果は明らかである。
【実施例3】
【0071】
本実施例においては、これまでに説明してきたエネルギー勾配を用いて、椅子型の6員環構造を有するSe
6分子の構造最適化を行った。使用した構造最適化の方法については非特許文献3に記載がある。まずSe
6分子に表2の欄1)に示すような平衡の構造と対称性は同じであるが、意図的にSe-Seの結合長を短く、∠SeSeSeを浅くした初期構造を与えた。次にDV-Xα法の標準の方式に従い、準乱数を用いて空間A
1〜空間A
6においてSe原子の標本点を生成した。各標本点を数式6に従って空間Bへ対応付けて得た112800個の標本点とその重みを用いて、DV-Xα法で分子軌道を求めた。この分子軌道を用いて非特許文献3に記載された方法に従って各原子に働く力を計算した。各原子に働く力に合わせて各原子を少し移動させ、最初の工程と同様にして標本点と重みを得て分子軌道を求め各原子に働く力を再計算した。この様な工程を4回繰り返した所で、各原子に働く力に合わせて原子を動かしても全エネルギーが下がらなくなったので計算を終了した。最終の構造を表2の欄2)に示す。
【0072】
Se
6分子に対して比較例と同じ初期構造を与えた。空間A
1〜空間A
6においてFCCの格子点を生成して面対称性を有する標本点とし、これからR
0=0.002として数式21に従って空間Bへ対応付けて得た112800個の標本点を用いて、DV-Xα法で分子軌道を求めた。この分子軌道を用いて非特許文献3に記載された方法に従って各原子に働く力を計算した。以下、比較例と同様にして構造最適化の工程を16回繰り返した所で、各原子に働く力に合わせて原子を動かしても全エネルギーが下がらなくなったので計算を終了した。最終の構造を表2の欄3)に示す。あわせて実測によるSe
6分子の構造を表2の欄4)に示す。
【0073】
【表2】
【0074】
実施例の最終構造では、Se-Seの長さの誤差は-5%〜-2%以内で実測値とほぼ一致し、∠SeSeSeの誤差は-1.4°〜+0.6°で実測値と一致した。一方比較例の最終構造では、Se-Seの長さの誤差は-40%〜+17%に及び、∠SeSeSeの誤差は−7°〜+36°に及んだ。比較例のエネルギー勾配の計算精度が不十分なため、構造最適化の工程で適切な方向に構造を変化させる事が出来なかったためと思われる。本発明の方法による積分精度向上の効果は明らかである。
【実施例4】
【0075】
本発明の方法で標本点とその重みを生成し数値積分を行うプログラムをFortran言語で作成した。その概要を
図5に示す。Mは被積分関数の特異点の数である。N
jは空間A
jに割り振る標本点の数であり、jに
依存していてもよい。プログラムの501〜517で標本点とその重みを求める。計算の具体的な内容についてはこれまで説明してきた数式を引用して簡略に記述している。数式の番号の後の( )に別の番号がある場合、前の番号は空間Aの標本点pから空間Bへの標本点qへの変換を従来の数式6で行う場合の数式の番号を意味し、( )内の番号は標本点の変換を本発明の数式21で行う場合の数式の番号を意味する。本実施例では被積分関数の分配比g
iとして数式14の関数を用いている。518〜524では得られた標本点とその重みを用いて数値積分を実行している。数値積分は全体を通して実行されるが、本発明による改良の本質的な部分は501〜517にある。しかし数値積分法として一体となったプログラムとする場合は、521を515の後に挿入しても良い。既存のプログラムで517の形で数値積分を行っている場合は、その前に501〜517をそのプログラムに挿入しても良い。
図5から明らかなように、本実施例のプログラムは単純で計算の負荷は少ないと思われるが、大きなモデルの計算を行う等の理由で計算時間の短縮が求められる場合は、例えば506〜516のdoループをOpenMP等の手法により並列化して複数のコアを有する計算機にかければよい。
【0076】
実施例1から実施例3におけるエネルギー勾配の計算においては、501〜517行のプログラムで得た標本点とその重みをDV−Xα法のプログラムに読み込ませて所望の原子または分子の分子軌道を求めた。続いて非特許文献3に記載された方法でエネルギー勾配を求める既存のプログラムを全く改変なく使用して原子に働く力を求めた。既存の数値計算法を含むプログラムに本実施例のプログラムの結果を渡すだけで大幅な計算精度の向上が図れる点も本発明の特徴である。
【0077】
以上の実施例を通して、本発明の標本点とその重みを用いれば、値が大幅に変化する多変数の関数を、従来の方法よりはるかに精度良く積分出来る事を示した。一方従来の方法でも積分が可能だった関数でも、標本点の数が少なくとも同等の精度で積分できるので、計算時間を短縮する事も可能となる。
【産業上の利用可能性】
【0078】
クーロン力や万有引力等、空間で値が急激に変化する量の積分を伴う数値シミュレーションにおいて、これまで数値積分の誤差のため扱いが困難だったモデルが扱える、及び/又は必要な計算時間が大幅に短縮出来ると期待される。
【符号の説明】
【0079】
101 面心立方格子の任意の一つの格子点(中心格子点)
102 最近接格子点(12個の内4個を示す。)
103 中心格子点の空間要素(重み)
201 標本点数
202 誤差
203 準乱数を用いて標本点を生成した場合の誤差
204 面心立方格子を用いて標本点を生成した場合の誤差
201、301 両原子の核間距離
202、302 各原子に働く力
203、303 Sn原子に働く力のx成分
204、304 Te原子に働く力のx成分
205、305 Sn原子に働く力のy成分
206、306 Te原子に働く力のy成分
207、307 Sn原子に働く力のz成分
208、308 Te原子に働く力のz成分
501〜517 本発明の標本点とその重みの生成方法を実施するためのプログラムのステートメント
518〜524 本発明により与えられた標本点とその重みを用いて数値積分を行うプログラムのステートメント