水素分子を例にとりASEを用いてQEを実行する方法を説明します。
先ず最初に従来の方法でQEを実行しましょう。 このチュートリアルではxeシステム (xe1) 上で8コア、あるいはxe2で12コア使用することを想定しています。
&control calculation = 'scf' restart_mode = 'from_scratch' pseudo_dir = '/home/ikutaro/QE/pseudo/' outdir = './tmp/' prefix = 'h2' tprnfor = .true. forc_conv_thr = 1.d-4 / &system ibrav = 1 A = 10.d0 nat = 2 ntyp = 1 nbnd = 4 ecutwfc = 30.0 ecutrho = 120.0 / &electrons diagonalization = 'david' conv_thr = 1.0e-12 mixing_beta = 0.1 / ATOMIC_SPECIES H 0.0000 H_ONCV_PBE-1.0.upf ATOMIC_POSITIONS (angstrom) H 0.000000000000 0.000000000000 0.00000000000 H 0.000000000000 0.000000000000 0.74000000000 K_POINTS (gamma)
#$ -S /bin/bash #$ -cwd #$ -q xe1.q #$ -pe x8 8 #$ -N H2 # module load intel/2020.2.254 module load intelmpi/2020.2.254 INPUT_FILE='h2_scf.in' OUTPUT_FILE='h2_scf.out' PW_DIR=/home/ikutaro/QE/src/qe-6.6/bin MPI_COMMAND=mpirun PW_COMMAND=pw.x PW=$PW_DIR/$PW_COMMAND I_MPI_PIN=1 I_MPI_FABRICS=shm:ofa OMP_NUM_THREADS=1 if [ $OMP_NUM_THREADS -gt 1 ]; then cat $PE_HOSTFILE | awk '{ print $1":"$2/ENVIRON["OMP_NUM_THREADS"] }' > hostfile.$JOB_ID fi $MPI_COMMAND $PW < $INPUT_FILE > $OUTPUT_FILE
$ qsub qsub-qe.shジョブが正常に終わるとh2_scf.outというファイルが出力されます。
入力ファイルの指定の仕方は一通りではありませんが、以下の例ではQEの入力ファイル (h2_scf.in) を用いて構造を入力しています(通常のQE計算の結果やリソースを可能な限り再利用する、という方針です)。ASEを使用してQEの入力ファイルに記述された構造をASEのフォーマットに変換することも可能でしょう。
from ase.io import read from ase.io import write from ase.calculators.espresso import Espresso qe_input_data = {'control': {'outdir' : './tmp/', 'prefix' : 'h2' }, 'system': {'nbnd' : 4, 'ecutwfc': 30, 'ecutrho': 120 }, 'electrons': {'diagonalization' : 'david', 'conv_thr' : 1.0e-12, 'mixing_beta' : 0.1 } } pseudopotentials = {'H':'H_ONCV_PBE-1.0.upf'} calc = Espresso(pseudopotentials=pseudopotentials,input_data=qe_input_data) h2=read('h2_scf.in',format='espresso-in') h2.calc = calc etot=h2.get_potential_energy() print('Total energy: %12.8f eV' % etot)このスクリプトでは以下でh2_scf.inを読み込んでいます。
h2=read('h2_scf.in',format='espresso-in')構造以外のパラメーターはqe_input_dataで指定しています。パラメータは必要に応じて追加します。 また
print('Total energy: %12.8f eV' % etot)のようにprintを実行しないと全エネルギーは出力されないので注意が必要です。
#$ -S /bin/bash #$ -cwd #$ -q xe1.q #$ -pe x8 8 #$ -N H2 #$ -o H2_out #$ -e H2_err module load intel/2020.2.254 module load intelmpi/2020.2.254 export ASE_ESPRESSO_COMMAND="mpirun ${HOME}/QE/src/qe-6.6/bin/pw.x -in PREFIX.pwi > PREFIX.pwo" export ESPRESSO_PSEUDO="/home/ikutaro/QE/pseudo" python3 ase-qe.pyASE_ESPRESSO_COMMANDとESPRESSO_PSEUDOを適切に指定する必要があります。この例ではQE (pw.x) の通常の入力はh2_scf.inではなくPREFIX.pwi、出力はPREFIX.pwoとなっています。計算に問題が起こった時はASEにより生成されたこれらのファイルの内容を確認すると良いでしょう。
$ qsub qsub-ase.sh計算が正常に実行されると、H2_outに
Total energy: -31.48786645 eVが出力されます。