GAMESSにとってのメモリとは?
WinGAMESSでは、$CONTRLでRUNTYP=NMRを指定することでNMR遮蔽テンソルの計算を行うことができますが、これには結構な量のメモリが必要になります。
最初のSCF計算は少ないメモリ量で済むのですが、その後がどっと増え、SCFが終わったところでエラー終了することがあります。1024MB(1GB)のメモリを積んでいる場合、$SYSTEMでMWORDS=120ぐらいが上限のようです。
C9H12N2O3という分子式を持つ分子をHF/6-31G(d,p)で計算しようとすると(basis set shell=92, Cartesian Gaussian Basis Function=270)、180Mwordぐらい必要になるのですが、私のPCではメモリ不足で計算ができません。
Windowsでは、物理メモリでは足りなくなったときにハードディスク上の領域を仮想メモリとしてメモリ領域に割り当てることができます。それを考えると、WinGAMESSでメモリが足りませんエラーが出たときは、仮想メモリを増やしてやれば、パフォーマンスが落ちても計算自体は進行するのではないかと考えます。
で、やってみると、これは全く効果がありません。
仮想メモリを増減しても、物理メモリ以上の量をMWORDSで指定すると計算は落ちます。
実際のところは、GAMESSをソースからCygwin/gccでコンパイルするときに、ソースコードのメモリ上限値の辺りをちょちょいと書き換えればこういった縛りは解消されるらしいのですが、そこまでやるか…?いや、ここは私が人柱になってやるべきなのかも知れません。
いや、もっと単純に、「実はこんな簡単な方法で解決できますよ!s2kさんは何でこんなことも知らないんですか?」てな勢いで教えてくれる人がいたらいいのですが…
※1 ちなみに、PC-GAMESSでは倍ぐらいのメモリ量を指定できます。しかし残念ながらNMR計算は現バージョンではまだサポートされていません。
※2 $NMRセクションでINMEM=.T.を指定すると、メモリが足りないエラーは出ませんが、同じところで有無を言わさず落ちます。これもまた謎。