Quick start

水素分子を例にとりASEを用いてQEを実行する方法を説明します。

従来のQEの実行方法

先ず最初に従来の方法でQEを実行しましょう。 このチュートリアルではxeシステム (xe1) 上で8コア、あるいはxe2で12コア使用することを想定しています。

  • 入力ファイル (h2_scf.in)
    &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)
  • ジョブスクリプト (qsub-qe.sh)
    #$ -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というファイルが出力されます。

ASEを用いたQEの実行方法

Single point (SCF)

入力ファイルの指定の仕方は一通りではありませんが、以下の例ではQEの入力ファイル (h2_scf.in) を用いて構造を入力しています(通常のQE計算の結果やリソースを可能な限り再利用する、という方針です)。ASEを使用してQEの入力ファイルに記述された構造をASEのフォーマットに変換することも可能でしょう。

  • ASE用pythonスクリプト (ase-qe.py)
    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.py
    ASE_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
    が出力されます。

構造最適化

次に構造最適化を行いましょう。ここでBFGS法を用いることにします。

  • 入力ファイル (ase-qe-opt.py)
    from ase.io import read
    from ase.io import write
    from ase.calculators.espresso import Espresso
    from ase.optimize import BFGS
    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=input_data,
                    tprnfor=True)
    h2=read('h2_scf.in',format='espresso-in')
    h2.calc = calc
    opt = BFGS(h2)
    opt.run(fmax=0.02)
    write('H2_opt.xyz',h2)
    etot=h2.get_potential_energy()
    print('Total energy: %12.8f eV' % etot)
  • ジョブスクリプト
    #$ -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-opt.py
    計算が正常に終了するとH2_outに以下のような結果が出力されます。
    Total energy: -31.48786645 eV
          Step     Time          Energy         fmax
    BFGS:    0 15:43:16      -31.487866        0.7746
    BFGS:    1 15:43:18      -31.496494        0.0197
    Total energy: -31.49649423 eV
    通常通りQEで構造最適化してみてエネルギーや構造、最適化にかかる時間やステップ数なども比較してみましょう。

参考

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-01-23 (月) 11:57:01 (472d)