<モノマー計算終了後>
• モノマーLMP2エネルギー :lmp2
LMP2相関エネルギー。フラグメントごとに出力される。
• FMO1-LMP2相関エネルギー :corr.
LMP2相関エネルギー。相関エネルギーのみの値と、FMO1–RHFエネルギーを加えられたものが出 力される。
• LMP2–IFIE: lmp2
IFIEに対するLMP2相関エネルギーの寄与。
• FMO2-LMP2相関エネルギー1: corr. ( sub. )
LMP2相関エネルギー。相関エネルギーのみの値と、FMO2–RHFエネルギーを加えた値が出力される。
Esubcorr(LM P2)
f mo2 (5.16)
• FMO2-LMP2相関エネルギー2: corr. ( sum. )
LMP2相関エネルギー。相関エネルギーのみの値と、FMO2–RHFエネルギーを加えた値が出力される。
Esumcorr(LM P2)
f mo2 (5.17)
表 6: グローバル変数との対応(FMO−LMP2エネルギー関連)。
変数名 次元数 値
lmp2 mon energy フラグメント数 Ecorr(LM P2)I
lmp2 dim ifie sub フラグメントペア数 ∆Esubcorr(LM P2) IJ
lmp2 dim ifie sum フラグメントペア数 ∆Esumcorr(LM P2) IJ
lmp2 fmo 1 1 Ecorr(LM P2)f mo1
lmp2 fmo 2 sub 1 Esubcorr(LM P2)
f mo2
lmp2 fmo 2 sum 1 Esumcorr(LM P2)
f mo2
グローバル変数
1
マクロ定義2
並列化制御3
メモリー制御4
プログラム全体の制御5
角運動量のパラメータ6
物理定数7
誤差関数8
電子反発積分パラメータ9
基底関数の定義10
基底関数11
原子核12
外部静電ポテンシャル13
位置の指定14
フラグメント15
射影演算子16 FMO
計算パラメータ17
モノマーSCC
18
ダイマーES
19 RHF
計算20 MP2
計算21 RI–MP2
計算22
局在化MP2
計算1 マクロ定義
• PARA MPI MAX PROC 1024
並列化に使用できるプロセッサー数(コア数)の最大値。
• MEM MAX VAL 1024
memory alloc関数を用いて同時にallocateでき配列の種類の最大数。
• ANG L6 MAX 12
角運動量のパラメータ(ang l6max)のデフォルト値。
• ANG L5 MAX 4
角運動量のパラメータ(ang l5max)のデフォルト値。
• ANG L6 XYZ MAX 91
角運動量のパラメータ(angl l6xyz max)のデフォルト値。
• CONST MAX IATOM 112
プログラムで定義されている原子番号の数。0( ダミー原子 )∼111までの112。
• BDEF MAX 128
基底関数の定義に関するパラメータ(bdef max)のデフォルト値。
• BDEF MAX SH 40
基底関数の定義に関するパラメータ(bdef max sh)のデフォルト値。
• BDEF MAX NC 30
基底関数の定義に関するパラメータ(bdef max nc)のデフォルト値。
• BDEF MAX L 4
基底関数の定義に関するパラメータ(bdef max l)のデフォルト値。
• PRJ MAX FRAG ORB 16
射影演算子の作成に関わるパラメータのデフォルト値。
• PRJ MAX NBA 4
射影演算子の作成に関わるパラメータのデフォルト値。
• PRJ MAX NBO 64
射影演算子の作成に関わるパラメータのデフォルト値。
• FRAG MAX LINK 8
射影演算子の作成に関わるパラメータのデフォルト値。
2 並列化制御
• int para mpi nproc
MPI並列の全プロセッサー数(MPI COMM WORLDのプロセッサー数)を保持している変 数。initialize mpi関数で以下のように値がセットされる。
MPI_Comm_size(MPI_COMM_WORLD,¶_mpi_nproc);
• int para mpi my rank
MPI COMM WORLDにおけるランクを保持している変数。initialize mpi関数で以下のよう
に値がセットされる。
MPI_Comm_rank(MPI_COMM_WORLD,¶_mpi_my_rank);
• int para mpi print rank
標準出力にプリントアウトするプロセッサーのMPI COMM WORLDにおけるランクを保持 している変数。initialize mpi関数で0がセットされる。入力ファイルから指定できる。
• MPI Comm para mpi single comm
各プロセッサーが単独のグループを形成するコミュニケーターを保持している変数。initial-ize mpi関数で以下のように値がセットされる。
my_key=para_mpi_my_rank/1;
MPI_Comm_split(MPI_COMM_WORLD,my_key,para_mpi_my_rank,¶_mpi_single_comm);
• char para mpi proc name [ PARA MPI MAX PROC ] [ 128 ]
各プロセッサーの名前を保持している変数。マシンのネットワーク上のアドレスが入る。名 前は127文字まで。PARA MPI MAX PROCはマクロ置換される。initialize mpi関数で以下 のように初期化される。
MPI_Get_processor_name(¶_mpi_proc_name[para_mpi_my_rank][0],&itmp);
for(i=0;i<para_mpi_nproc;i++){
MPI_Bcast(¶_mpi_proc_name[i][0],128,MPI_CHAR,i,MPI_COMM_WORLD);
}
• int para mpi np scc
モノマーSCC計算で、各フラグメントの計算をいくつのCPUで実行するかを保持している
• int para mpi np mon
モノマー計算で、各フラグメントの計算をいくつのCPUで実行するかを保持している変数。
全CPU数(para mpi nproc)の約数になる。入力リストで指定可能。
• int para mpi np dim
ダイマー計算で、フラグメントペアの計算をいくつのCPUで実行するかを保持している変 数。全CPU数(para mpi nproc)の約数になる。入力リストで指定可能。
3 メモリー制御
• double * mem core ( [ mem size ] )
実行時に確保されたメモリ領域の先頭ポインタを保持する変数。initialize memory関数で以 下のように初期化される。
mem_core = ( double * ) malloc ( mem_size * 8 ) ;
• long int mem size
実行時に確保されたメモリがdouble型で何個分かを保持している変数。initialize memory関 数で値が代入される。32bit環境の場合、long intは「2 147 483 647」までカウント出来る ので、
2 147 483 647 * 8 / 1024 / 1024 / 1024 = 15.99999 GByte
となり、1CPU当たり16GByteのメモリまで対応。64bit環境の場合は実質的にメモリの制 限は無い。
• int mem mbyte
実行時に確保されたメモリが何MByteかを保持している変数。mem sizeとは以下の関係に ある。
mem_size = mem_mbyte * ( 1024 * 1024 / 8 ) ;
入力の「mem mbyte」キーワードで指定した値がinitialize memory関数でセットされる。
• int mem nval
mem coreに割り当てられた配列の数を保持している変数。MEM MAX VAL個まで割り当て
可能。
• char max val name [ MEM MAX VAL ] [ 40 ]
mem coreに割り当てられた配列の「名前」を保持する配列。名前は39文字まで。mem core
に割り当てられた配列を識別するために使用される。MEM MAX VALはマクロ置換される。
• long int mem val size [ MEM MAX VAL ]
mem coreに割り当てられた各配列のサイズを保持する配列。double型で何個分かを保持し
ている。EM MAX VALはマクロ置換される。
4 プログラム全体の制御
• int cntrl run type
計算のタイプを指定する変数。入力ファイルから指定可能。read input list 01関数でセット。
以下のように、整数で指定する。
0 : 単一構造の計算 1 : 構造最適化 2 : 分子動力学計算
デフォルトは0。
• int cntrl lprint pcs
PAICS全般の出力フラグ。整数で指定される。
– 0 :
何も出力しない。
– 1 :
計算開始時のタイトル、全体の時間のプロファイル、計算終了時のタイトルが出力さ れる。
– 2 :
上の出力に追加して、メモリの情報、フラグメントの情報、フラグメントペアの情報 が出力される。
• int cntrl lprint inp
• int cntrl lprint prj
• int cntrl lprint scc
モノマーSCC計算の出力フラグ。整数で指定される。
– 0 :
何も出力しない。
– 1 :
イタレーションのプロセスを出力する。
– 2 :
上の出力に追加して、モノマーSCC計算の結果を出力する。
– 3 :
上の出力に追加して、モノマーRHF計算のプロセスを出力する。
• int cntrl lprint mon
モノマー計算の出力フラグ。整数で指定される。
– 0 :
何も出力しない。
– 1 :
計算されているモノマーの番号が出力される。
– 2 :
上の出力に追加して、モノマー計算の結果を出力する。
– 3 :
上の出力に追加して、モノマー計算のプロセスを出力する。
• int cntrl lprint des
• int cntrl lprint dim
• int cntrl coord unit
座標の入力の際の単位の指定 0 : bohr
1 : angstrom
read input list 01関数でセットされる。デフォルトは0(つまり、何も指定しなければ、bohr
単位で座標を入力することになる)。
• int cntrl w log file
「logファイル」への書き出しを行うか否か。
0 : 書き出さない 1 : 書き出す
デフォルトは0。
• int cntrl r scc
あらかじめ書き出された電子密度を、モノマーSCC計算の初期電子密度として読むか否か。
0 : 読まない。
1 : 読む。
デフォルトは0。
• int cntrl w scc
収束したモノマーSCCの電子密度をファイルに書き出すか否か。
0 : 書き出す。
1 : 書き出さない。
デフォルトは0。cntrl w result fileで指定される文字列に「.scc」を追加した名前のファイル へ書き出す。
• char * cntrl w result file [ 1024 ]
入力に関連するファイルの名前に使われる文字列。
• char cntrl r result file [ 1024 ]
入力に関連するファイルの名前に使われる文字列。
• char cntrl w log file name [ 1024 ]
「log ファイル」のファイル名。cntrl w result file の文字列から自動的に決められる(cn-trl w result fileの文字列に「 [mpi-rnak].log」を追加したものがファイル名となる)。
• char cntrl w scc file name [ 1024 ]
モノマーSCCの電子密度が出力されるファイル名。cntrl r result fileの文字列から自動的に 決められる(cntrl w result fileの文字列に「.scc」を追加した文字列がファイル名となる)。
• char cntrl r scc file name [ 1024 ]
モノマーSCCの電子密度を読み込むファイル名。cntrl r result fileの文字列から自動的に決 められる(cntrl r result fileの文字列に「.scc」を追加した文字列がファイル名となる)。
• double cntrl scc time1
モノマーSCC計算に掛かった時間(秒)。
• double cntrl mon time1
モノマー計算に掛かった時間(秒)。
• double cntrl dim time1
ダイマー計算に掛かった時間(秒)。
• double cntrl des time1
ダイマーES計算に掛かった時間(秒)。
• double cntrl total time1
計算の開始時間( システム時間 )。
• double cntrl total time2
計算の終了時間( システム時間 )。
5 軌道角運動量パラメータ
• int ang l6max = ANG L6 MAX
角運動量に関するパラメータの1つで、最大の軌道角運動量の値。4中心積分が可能なのは、
この値の半分の軌道角運動量まで。ANG L6 MAXはマクロ置換される。これらの値は、積 分ルーチンで使用される。
• int ang l6xyz max = ANG L6 XYZ MAX
角運動量に関するパラメータの1つで、カルテシアン表示の「指数の組み合わせ」の最大値。
ANG L6 XYZ MAXはマクロ置換される。これらの値は、積分ルーチンで使用される。
• int * ang l6n
([ ang l6max+1 ]
)角運動量に関するパラメータの1つで、各角運動量に関する原子軌道の「カルテシアン表示 における指数の組み合わせ」が格納されている配列。これらの値は、積分ルーチンで使用さ れる。この配列に格納されている数値を表1に記載する。
• int * ang l6sum
([ ang l6max+1 ]
)角運動量に関するパラメータの1つで、各角運動量の原子軌道までの「カルテシアン表示に おける指数の組み合わせ」を合計した数を保持している。これらの値は、積分ルーチンで使 用される。この配列に格納されている数値を表1に記載する。例えば、軌道角運動量がlの 原子軌道の「全体の通し番号」によるループは以下のようになる。
int l1 = ang_l6sum [l] - ang_l6n [l]
int l2 = ang_l6sum [l]
for ( i=l1 ; i<l2 ; i++ ) { ... }
• int * ang l6xyz
([ ang l6max+1 ] [ ang l6xyz max ] [ 3 ]
)角運動量に関するパラメータの1つで、カルテシアン表示における「xの指数」「yの指数」
「zの指数」を保持している配列。これらの値は、積分ルーチンで使用される。軌道角運動量 がlのi番目の軌道の指数は、以下のように参照される。
x の指数 : ang_l6xyz [ ( ang_l6xyz_max * 3 ) * l + 3 * i + 0 ] y の指数 : ang_l6xyz [ ( ang_l6xyz_max * 3 ) * l + 3 * i + 1 ] z の指数 : ang_l6xyz [ ( ang_l6xyz_max * 3 ) * l + 3 * i + 2 ]
• int * ang l6xyz idx
([ ang l6max+1 ] [ ang l6max+1 ] [ ang l6max+1 ]
)角運動量に関するパラメータの1つで、カルテシアン表示における「xの指数」「yの指数」「z の指数」を指定し、対応する軌道が全体の通し番号で何番目かを返す。つまり、ang l6xyz xyz の逆引き。これらの値は、積分ルーチンで使用される。例えば、