QE

2025年7月18日 更新

このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のQUANTUM ESPRESSOを用いて,Si 8原子の構造探索を行う.

Assumption

ここでは次のような条件を想定している:

  • CrySPY job command: qsub
  • CrySPY job filename: job_cryspy
  • QE executable file: /usr/local/qe-6.5/bin/pw.x
  • QE input filename: pwscf.in
  • QE output filename: pwscf.out

Input files

どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.

cd QE_RS_Si8
tree
.
├── calc_in
│   ├── job_cryspy
│   ├── 1_pwscf.in
│   └── 2_pwscf.in
└── cryspy.in

cryspy.in

cryspy.inはCrySPYの入力ファイル.

[basic]
algo = RS
calc_code = QE
tot_struc = 5
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy

[structure]
atype = Si
nat = 8

[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol =  40  80

[option]

[basic] セクションのjobcmd = qsubは環境に合わせて変更する. CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspyを実行する.

構造最適化計算はステージ制を採用しており,ここではnstage = 2を用いている. 例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.

QEを使う場合は,[QE]セクションが必要. ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvolに指定する必要がある.

情報

kppvolの詳細はこちら –> Input file > Kpoint

下記のファイル名は好きなように変えても良い.

  • jobfile
  • qe_infile
  • qe_outfile

他のインプット変数に関しては後ほど説明する.

calc_in directory

ジョブファイルやQEのインプットをこのディレクトリに置く.

Job file

ジョブファイルの名前はcryspy.injobfileに一致させる必要がある. ジョブファイルの例は下記の通り.

#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Si8_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q

mpirun -np $NSLOTS /path/to/pw.x < pwscf.in > pwscf.out


if [ -e "CRASH" ]; then
    sed -i -e '3 s/^.*$/skip/' stat_job
    exit 1
fi

/path/to/pw.xは環境に合わせて変更する. 入力(pwscf.in)出力(pwscf.out)ファイルの名前は好きに変えて良いが,cryspy.inqe_infileqe_outfileに合わせる必要がある. 普段QEのジョブを流しているジョブファイルを使えば良い. CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている. バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え

# ---------- CrySPY
sed -i -e '3s/^sub.*/done/' stat_job
メモ

1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_jobと書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.

ヒント

(詳細:機能 > ジョブファイルの自動書き換え
CrySPYのジョブファイルのCrySPY_IDという文字列は自動的に構造IDに置き換わるようになっている. PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_IDと書いておくとどの構造のジョブなのかが分かり便利である. 例えば,PBSでは#PBS -N Si_CrySPY_IDのように書いておくと,ジョブをサブミットする際,#PBS -N Si_10のように置き換わる. 注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_のように何か文字列を頭につけておくこと.

Input for QE

ステージ数(nstage in cryspy.in)に応じた数のインプットファイルが必要となる. インプットファイル名の先頭にx_,または語尾に_xをつけて準備する. ここでxはステージ数.

CrySPYが探すインプットファイル名の優先順位は以下の通り.

  1. x_pwscf.in
  2. pwscf.in_x
  3. pwscf.in

各ステージで共通のインプットを使用するのであればx__xを省略できる.

今はnstage = 2を用いているので,1_pwscf.in2_pwscf.inが必要となる. ここでは,1_pwscf.inはセルを固定して内部座標だけ緩和する設定,2_pwscf.inはセルも含めてフルに緩和する設定になっている.

1_pwscf.in

 &control
    title = 'Si8'
    calculation = 'relax'
    nstep = 100
    restart_mode = 'from_scratch',
    pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
    outdir='./out.d/'
 /

 &system
    ibrav = 0
    nat = 8
    ntyp = 1
    ecutwfc = 44.0
    occupations = 'smearing'
    degauss = 0.01
 /

 &electrons
 /

 &ions
 /

 &cell
 /

ATOMIC_SPECIES
  Si  28.086  Si.pbe-n-kjpaw_psl.1.0.0.UPF

2_pwscf.in

 &control
    title = 'Si8'
    calculation = 'vc-relax'
    nstep = 200
    restart_mode = 'from_scratch',
    pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
    outdir='./out.d/'
 /

 &system
    ibrav = 0
    nat = 8
    ntyp = 1
    ecutwfc = 44.0
    occupations = 'smearing'
    degauss = 0.01
 /

 &electrons
 /

 &ions
 /

 &cell
 /

ATOMIC_SPECIES
  Si  28.086  Si.pbe-n-kjpaw_psl.1.0.0.UPF

pseudo_dirは各自の環境に合わせて変更する. Inputs for structure data and k-point such as インプットファイルのATOMIC_POSITIONSK_POINTSはCrySPYがpymatgenを用いて自動生成するのでユーザーが書く必要はない.

CrySPY実行

ここまで準備ができたらCrySPY実行に進む.