2008年12月11日木曜日

新規作成

新しい数値計算用のコードを作り始めた。Complete Fock Spaceを用いる方法で、これを把握すれば磁場下もOK,時間発展もOKっていうなかなか強力な手法らしい。時間発展とかいわれるとなんか手を出してみてたくなるよなぁ。ダイナミクスだもん。

NRGは「くりこみ群」なので本来、あるエネルギースケールでの固有値を順に求めていく+各段階で次のスケールにかかわってこないであろう高エネルギーの状態を捨てていくことで計算機のメモリがかなり少なくても計算できるスキームになっている、スバラシイ、個人的にこの辺も気に入っている。通常の不純物問題ならば、このエネルギースケールでの階層分け&どう考えても低エネルギー状態に寄与してこない状態をばしばし切るのは賢いやりかたなんだけど、磁場がある場合みたいにそんな階層をぶちぎったべつのエネルギースケールがある場合には切っている部分の効果が無視できるのかという問題が出てくる。

そこでreduced density matrixですよ。このreduced density matrixをつかえば、系が環境とシステム(注目する部分系)からなっているときに、システムの部分だけにかかわってくる物理量の計算に使う密度行列に環境の影響を含ませることができ、部分系を扱うことによって生じる「端の効果」みたいなもんを抑えることができる模様。DMRGでもつかわれているっぽいな。計算の流れとしては、トータル2回NRGの計算を行って、2回目のときに捨てている部分の寄与を合成してしまうようなイメージになっているようだ。なんだかアルゴリズム考えるの難しそーだが面白そう。最初の計算のときにでてくるものすごい大量のデータを保持する必要がある。まぁ最近のメモリ容量なら余裕なんだろうが。

で、データを格納していく部分をつくってたら、久しぶりに意味フなエラーをくらった。
*** glibc detected *** double free or corruption (out): 0x000000002f5a0270 ***
forrtl: error (76): IOT trap signal
Aborted

データ入出力関係でエラーが出て、強制終了したらしい。不気味なことに、結果はちゃんとそれらしいことが返ってきているという。

*** glibc detected *** double free or corruption はRedHat系ではデータの破損を検出したときに出るっぽい。
forrtl: error (76): IOT trap signal
入出力関係で異常終了。(通常coreダンプ出るらしいが、今回なんもでなかったんだけど。)

ちなみに原因は4列で宣言した配列に5列あるデータを代入しようとしていたから。IOT trap signalくらったら配列を疑ってかかるのがいいのかもしれない。

0 コメント: