Gaussian での計算中には、複数のスクラッチファイルが生成します。しかし、それぞれのファイルがどのような役割なのか、どうやって削除・保存するのかを知っている人はほとんどいないと思います。
そこで、本記事ではスクラッチファイルの種類や chk ファイルの開き方などについて少しだけ紹介してみようと思います。
目次
スクラッチファイルの種類
スクラッチファイルとして、.chk、.rwf、.inp、.skr、.int、.d2e という拡張子のファイルが生成します。それぞれどのようなファイルかというと、
- chk : チェックポイントファイル
- rwf : Read-Write ファイル
- inp : 内部インプットファイル
- skr : スクラッチファイル
- int : 2 電子積分ファイル (最初は空ファイル)
- d2e : 2 電子積分導関数ファイル (最初は空ファイル)
スクラッチファイルは、基本的にバイナリーファイルなので開いても読めませんが、.inp ファイルのみ開くことができます。しかし、中身は input ファイルと同じです。
スクラッチファイルの名前は Gaussian process ID に基づいて自動的に割り振られます。
ファイル容量を確認してみよう
” ls -l ” コマンドを使えば、現在いるディレクトリ内のファイルの権限や所有者、ファイルサイズの一覧が見れます。
gaussian での計算を実行中に常時ファイルサイズを確認したい場合は、watch コマンドと組み合わせて使いましょう! ” watch -n 10 ls -l ” で 10 秒おきに ls -l の内容が更新されていきます。半経験などでの計算する場合は 1 秒おきに更新にした方が良いと思います。つまり ” watch -n 1 ls -l ” 。
例えば、以下のように表示されます。これは、B3LYP/6-31+G(d,p) で 80 原子くらいある分子を計算した時の開始 1 時間後の結果です。vector の計算をしている時ですが、この時点で rwf ファイルは 1 GB くらいあります。この時点では、d2e も int も空ファイルですが、計算が進むと上書きされていきます。
-rw-rw-r--. 1 compchem compchem 11493376 Apr 7 13:58 compchem-test019.chk -rw-rw-r--. 1 compchem compchem 3998 Apr 7 12:46 Gau-16783.inp -rw-rw-r--. 1 compchem compchem 0 Apr 7 12:46 Gau-16784.d2e -rw-rw-r--. 1 compchem compchem 0 Apr 7 12:46 Gau-16784.int -rw-rw-r--. 1 compchem compchem 983502848 Apr 7 14:24 Gau-16784.rwf -rw-rw-r--. 1 compchem compchem 524288 Apr 7 13:58 Gau-16784.skr
スクラッチファイルの場所を指定する
g16.profile で GAUSS_SCRDIR を指定しておくと、スクラッチファイルは指定されたディレクトリに生成されます。指定しない場合は、現在作業中のディレクトリに保存されます。
計算が正常終了するとスクラッチファイルは自動的に削除されますが、計算が途中で終了した場合などは、スクラッチファイルは削除されずに残ります。
しかし、スクラッチファイルは名前や場所を指定することができます。例えば chk ファイルは input ファイル内で %chk で名前を指定することにより名前を指定できます。
%chk=name.chk
また、保存場所を指定することもできます。例えば、
%chk=/home/compchem/chkfolder/name.chk
その他のスクラッチファイルについても同様に保存場所を指定することができます。
%RWF={path} %Int={path} %D2E={path}
なぜこのようなことが必要かというと、多数のユーザーで共通の並列計算機を使う場合、スクラッチディレクトリを共通ディレクトリにしておくと不幸なことが起こる場合があるからです。。。
スクラッチファイルを分割する
スクラッチファイルの中でもっとも巨大なものは rwf ファイルです。あまりにも巨大なため、重たい計算手法を使う場合やユーザー 1 人当たりのディスクスペースに制限がある場合などは問題になることでしょう。
そこで、rwf ファイルは input ファイルで指定することにより、複数ファイルに分割することができます。下記コマンドの loc はディレクトリのパスを、 size は ファイルサイズをそれぞれ表します。ファイルサイズは、デフォルトでは word 単位ですが、KB、MB、GB、TB、kW、MW、GW、TW などの単位を用いることにより明示的に指定することができます。
%RWF=loc1,size1,loc2,size2, …
スクラッチファイルを保存する
input ファイル内で名前を指定しなかったスクラッチファイルは計算が正常に終了した場合に削除されますが、名前の指定されたファイルは保存されます。しかし、 一般的なユーザーの場合 rwf ファイルなどは必要ないと思います。
そこで、nosave コマンドを使って input ファイル内で計算終了後にスクラッチファイルを削除することを指定する必要があります。
%RWF=/home/compchem/scratch/test.rwf %NoSave %Chk=test.chk
input ファイルで nosave コマンドよりも上にあるスクラッチファイルは削除されます。上記の例の場合、rwf ファイルは削除されますが、chk ファイルは保存されます。
CPU の温度
自作 PC で計算していて気づいたのですが、rwf ファイルの書き出しの直前などに CPU 温度が極端に高くなります。
何もしない時は 30 度、半経験など軽い計算の時は 50 度程度なのですが、DFT 計算で rwf スクラッチの書き出し直前は、67-69 度まで上がります。しかし、70 度以上にはなりませんでした。
現在、自作 PC のケースファンは、
前面: 200 mm ファン x 1 吸気
側面: 120 mm ファン x 2 吸気
背面: 120 mm ファン x 1 排気
上部: なし
という構成なのですが、上部にも 排気用のファンを付けようと強く思いました。
【追記】
CPU ファンを上部に二台追加したところ、CPU 温度が 10 度ほど下がりました。CPU ファンだけでなく、ケース全体の空気の流れというのが大事なようですね。上部ファンを追加する前は、CPU 温度が上がった時に背部ファンからの排気がとても熱くなっており、うまくケースの排熱ができていない様子でした。
ファンを増やしてからは、DFT や MP2 で計算しても 50 – 55 度くらいで安定するようになりました。高負荷時でも59 度前後で 60 度台後半になることはなくなりました。吸気と排気のバランスも取れました。
【さらに追記】
もともと背面に付いていたファンをケース底面に移し(吸気)、最大 2850 rpm の 120 mm ファンをケース背面につけました。その結果、Gaussian で計算している時 40 度前後で推移するようになりました。高負荷時でも50-55 度までしか上がりません。この辺はファンの回転数制御でさらに下げられる気がします。
改めてケース内の排気って重要だなと感じました。きちんとした CPU クーラーを付けても、ケース内の換気が悪いと 70 度近くまで行ってしまうってことを実感しました。
chk ファイルの開き方
chk ファイルもバイナリーファイルであるため基本的にはテキストエディタなどで読めないのですが、Gauss View で開いて結果を可視化することができます。いくつかのケースでは chk ファイルは非常に重要です。例えば、分子軌道を Gauss View で表示させたい場合など。。。
しかし、chk ファイルはバイナリファイルであるためアーキテクチャ依存です。
並列計算機上で計算した chk ファイルをダウンロードしても基本的には自分のパソコンでは開くことができません(アーキテクチャが一緒だったら開ける)。このような場合、並列計算機上で fchk (フォーム chk) コマンドを実行する必要があります。
自分の PC 上で計算した chk ファイルは、そのまま Gauss View で開くことができます。
参考文献
- Running Gaussian (ページ内の Scrtch Files タブ)
- HPC SYSTEMS スクラッチファイルの取り扱い方と位置の指定
関連する記事
- 【Enthalpy】B3LYP での計算誤差について【Underestimation】
- DFT は、正確な関数を目指す道から外れつつある
- Gaussian 16 を自作 PC で動かしてみた!
- いやいや、密度汎関数理論は正確な関数を目指す道から外れてはいない!
- GPU を用いた並列計算
- 自作 PC をつくってみた!
- Fedora25 に nVIDIA のドライバーをインストール
- 構造最適化の閾値は、何を意味しているのか?
- 量子化学計算で a.u. を使う理由 〜Why Atomic Unit?〜
もうひとつ、たまに使うコマンドを忘れていました。chkchk というコマンドでchkファイルの中身のサマリーをだしてくれます。たまにこれなんだっけ?とか 正常終了してるchkかなど知りたいときに便利です。
後存知かもしれませんが
formchk chkファイル(bin)をfchkファイル(text)に変換
(fchkはtextなのでアーキテクチャが違う計算機でやり取りできますよ)
その後、unfchkというコマンドで戻すと
fchkファイル(text)をchkファイル(その計算機用のbin)に変換
chk (hostA) → fchk (hostA) → fchk (hostB) → chk (hostB)
A win B linux とかでも大丈夫です。
あと便利なコマンドとしては
g09用 c8609 g86からg03までのchkファイルをg09用に変換してくれます。
g16用 c8616 g86からg09までのchkファイルをg16用に変換してくれます。
これを使えば 過去のデータを使いまわせます。
一期一会の電子状態の再現などに有用です。
これらのコマンドはガウシアンの組み込みコマンドなのでガウシアンを動かせる状態にしておかないと使えません。
fchkは通常CIのデータを含まないので TD-DFTの結果とか容量が小さいです。
UVの結果を見るにはlogで MO見たい時にはfchkが便利だと思います。chkは計算したものと同じ種類のOSでしか見れないのでちょっと不便ですね。
tenten 様
いつも貴重な情報をありがとうございます。
unfchk というコマンドは存じ上げませんでした。
これからも色々と教えていただければと思います。
今後ともよろしくお願いいたします。