地域密着型エリア広告配信リクルートの地域密着型広告ドコイク?アドネットワーク Ads by ドコイク?[無料でホームページを作成] [通報・削除依頼]
[無料でホームページを作成] [通報・削除依頼]

PWscf (Phonon with DFPT)

--------------------------------------------------------------------------------
■ Youtube
・入力ファイルからPhonon DOSおよび分散の計算まで:
 https://www.youtube.com/watch?v=cCCTm5og9lw
・並列計算のセッティング:
 https://www.youtube.com/watch?v=3TrbzaB11Ww
・k点とq点をVASPでの計算とほぼ同じ条件にした動画:
 https://www.youtube.com/watch?v=YmN1SgLDdP0
 (フリーで商用のVASPと戦えている驚きの結果)
--------------------------------------------------------------------------------
■ PWscf DFPT with phonopy
 質問のメールを送りましたが、下記のように返答が来ました。別のフリーメールのアドレスでユーザー登録したので管理者の承認後に公開となりますが、英文を読んでみると、それは拒否されたようです。
******************

Dear phonopy users,

I calculate phonon dispersion and pdos with PWscf DFPT.

But, I can not get phonon partial dos and

unfold dispersion of supercell structure.

Although I found phonopy code,

I can not find interface like vasp-dpft.

Could tell me information ?

Best Regards
******************
Your request to the Phonopy-users mailing list
    Posting of your message titled "PWscf DFPT interface"
has been rejected by the list moderator.  The moderator gave the following reason for rejecting your request:
"No reason given"
******************
--------------------------------------------------------------------------------
■ Youtubeの動画に用いたファイル
・計算時間:1 h 20 m  (4 core parallelization)
・Core-i7 4770S 3.10 GHz, TB時は3.9GHz(低消費電力)
 ※ 上記CPUは2013年6月頃に発売。最初の数値が世代で、第四世代となる
・体感での計算速度:
 デスクトップPC = 2 * (デスクトップPC (低消費電力) or ノートPC)
 ※ 最新のCore-i7のPCなら1時間以内には下記の計算が終わると思う。
・下記の条件だとメモリは 1.8 GB以上が必要
・k点とq点をVASPでの計算とほぼ同じ条件にした動画では、VASPと同じ分散関係が得られ、計算時間も約10分でVASPとほぼ同じです。

◇ ポイント
・基本的な操作手順を理解するには、下記HPを参照すれば良いです
 http://www.stat.phys.titech.ac.jp/SATL_qe_tutorial/phonon.html 
・計算が発散するとき(Gamma点以外で良く見ます。case.ph.outで確認できます)
 alpha_mix(1) の値を小さくする(これが重要です)
 niter_ph の値を大きくする(100以上は PH/phcom.f90のmaxterを書き換える)
 http://www.quantum-espresso.org/wp-content/uploads/Doc/INPUT_PH.html
・下記の例では計算精度を落としています
 tr2_ph=1.0d-14 を目指した方が良いかは分かりません
 ※ 精度は物理を説明できれば十分です。結果の説明が変わらなければ良いでしょう
 ※ スパイク状の構造や数値を追うのは”数値のお遊び”で不毛です
・phとphononDOSとphonon dispersionの部分において、amass(1)=26.98, amass(2)=74.922を削除してください。SCFの入力データが自動で認識されます(つまり、scfのところ以外はamassの記述は必要ない)
・k点とq点
 k点はshiftをする1 1 1を入れて、cif2cellが自動で生成するk点/4 (=1/(2*L)=0.088/Å程度になるようにk点を設定。半導体ではさらにk点を少なくできるかもしれない。
 例えば、9 9 9 0 0 0 > 2 2 2 1 1 1 にします。
 q点はk点と同じかそれよりも小さくします。フォノンのエネルギーは小さいので、恐らく波数は小さくて済みます(E=(ℏ*k)^2/2m)から、空間に大きく広がった滑らかな波になると思いますので、Dynamical matrixを計算するときにはq点が小さくてかまわないと考えております(間違っていたらご指摘ください)。一方で、PhononDOSの計算(phdos.in)のところでは滑らかなPhononDOSが見られるようにq点の数を増やします。
----------↓単位が合わないので検討中
※ ECUT=25 Ry≒340.15 eVであれば、0.66Å程度での波動関数を記述できる。フーリエ変換に関係するシャノンの標本化定理(復元するためには、用いる周波数の2倍の点が必要になる)での条件から、単純にx軸方向だけで考えれば、0.66/2=0.33Å程度であればフーリエ変換部分は問題ないことになる。3次元ではx, y, zの各軸で、ECUTから要求される点数の3/4を指定すればよい。
※ 下記から単位があわないので私の考えが間違っている。各エネルギーで記述できる波動関数は下記のようになる。シャノンの標本化定理を満たすにはさらにこの値の半分でのサンプリング(k点やq点)が必要。
ECUT=250eV, 0.77Å程度
ECUT=300eV, 0.70Å程度
ECUT=350eV, 0.65Å程度
ECUT=400eV, 0.61Å程度
ECUT=450eV, 0.57Å程度
ECUT=500eV, 0.54Å程度
14THz = 57.8meV, 50.62Å程度 (phononの最大エネルギー程度)
※ Accurate計算は2Gで計算されるので、ECUT=500eVの場合、(0.54/2)/2=0.16Å程度でk点が切れているようにする必要がある。フォースの計算のような全エネルギーの差分での計算で同程度の誤差に抑えようとすると、ΔE∝2ΔGとなるので、さらに倍のk点数となる((0.54/2)/2)/2=0.08Å程度とすることが必要となっているのかもしれない。
※ SCF計算には1meV/atom以下が必要になる。
※ Force(=フォース=力)は0.1eV/Å以下が必要になる。
※ もしROPT -1.0E-4が必要であれば, ENMAX(ECUT=250eV程度?)で-2.5E-4なので、ECUT=500eVでROPT -1.25E-4となってphonon計算で十分な精度が出ているのかもしれない。
※ 上記のように考えると、フォースの計算はECUT=500が必要で、0.08Å程度で切れるようにk点を設定すればよく、phononの計算では14THz程度となるのでq点はk点よりもかなり小さくすればよい。
----------↑単位が合わないので検討中
References:
[1] https://cms.mpi.univie.ac.at/vasp/vasp/Energy_cut_off_ENCUT_FFT_mesh.html 
[2] https://www.vasp.at/vasp-workshop/slides/accuracy.pdf
・alpha_mix(1)=とk点とq点と時間の関係
(Processor: Intel® Core™ i7-4770 CPU @ 3.40GHz × 8)
 Fe2VAlの場合には、k点とq点が小さいときにはディフォルトの値であるalpha_mix(1)=0.7付近で速く計算が収束するが、q点が大きいときには発散してしまうためにalpha_mix(1)=0.2近傍にしなければならない。
---
[K_POINTS automatic
4 4 4  0 0 0]
nq1=4, nq2=4, nq3=4
alpha_mix(1) = 0.40: error
alpha_mix(1) = 0.30: error
alpha_mix(1) = 0.20: 1h29m CPU (PHONON)
alpha_mix(1) = 0.10: 1h21m CPU (PHONON)
alpha_mix(1) = 0.05: 1h19m CPU (PHONON)
alpha_mix(1) = 0.01: 2h35m CPU (PHONON)
---
[K_POINTS automatic
4 4 4  0 0 0]
nq1=2, nq2=2, nq3=2
alpha_mix(1) = 0.70:  9m17.48s CPU (PHONON)
alpha_mix(1) = 0.40: 10m28.38s CPU (PHONON)
alpha_mix(1) = 0.20: 11m48.71s CPU (PHONON)
---
[K_POINTS automatic
2 2 2  1 1 1]
nq1=2, nq2=2, nq3=2
alpha_mix(1) = 0.90: 5m12.07s CPU (PHONON)
alpha_mix(1) = 0.80: 5m11.35s CPU (PHONON)
alpha_mix(1) = 0.70: 5m13.47s CPU (PHONON)
alpha_mix(1) = 0.60: 5m14.82s CPU (PHONON)
alpha_mix(1) = 0.50: 5m25.55s CPU (PHONON)
alpha_mix(1) = 0.40: 5m34.10s CPU (PHONON)
alpha_mix(1) = 0.30: 6m 0.40s CPU (PHONON)
alpha_mix(1) = 0.20: 6m59.81s CPU (PHONON)
alpha_mix(1) = 0.10: 7m 2.58s CPU (PHONON)

◇ Results

Fig.1 phonon dispersion of Fe2VAl
(setting for plot is wrong in my case. calculation is good ! )


Fig.2 phonon DOS of Fe2VAl. nk1=12,nk2=12,nk3=12 in phdos.in

◇ environment_variables
#----------------------------
# environment_variables -- settings for running Quantum ESPRESSO examples

LC_ALL=C
export LC_ALL

######## YOU MAY NEED TO EDIT THIS FILE TO MATCH YOUR CONFIGURATION ########

# BIN_DIR = path of compiled executables
#     Usually this is $PREFIX/bin, where $PREFIX is the root of the
#     Quantum ESPRESSO source tree.
# PSEUDO_DIR = path of pseudopotentials required by the examples
#     if required pseudopotentials are not found in $PSEUDO_DIR,
#     example scripts will try to download them from NETWORK_PSEUDO
# TMP_DIR = temporary directory to be used by the examples
#     Make sure that it is writable by you and that it doesn't contain
#     any valuable data (EVERYTHING THERE WILL BE DESTROYED)

# The following should be good for most cases

PREFIX=`cd ../../.. ; pwd`
BIN_DIR=$PREFIX/bin
PSEUDO_DIR=$PREFIX/pseudo
# Beware: everything in $TMP_DIR will be destroyed !
TMP_DIR=$PREFIX/tempdir

# There should be no need to change anything below this line

NETWORK_PSEUDO=http://www.quantum-espresso.org/wp-content/uploads/upf_files/


# wget or curl needed if some PP has to be downloaded from web site
# script wizard will surely find a better way to find what is available
if test "`which curl`" = "" ; then
   if test "`which wget`" = "" ; then
      echo "wget or curl not found: will not be able to download missing PP"
   else
      WGET="wget -O"
      # echo "wget found"
   fi
else
   WGET="curl -o"
   # echo "curl found"
fi

# To run the ESPRESSO programs on a parallel machine, you may have to
# add the appropriate commands (poe, mpirun, mpprun...) and/or options
# (specifying number of processors, pools...) before and after the
# executable's name.  That depends on how your machine is configured.
# For example on an IBM SP4:
#
#     poe             pw.x -procs 4              < file.in > file.out
#     ^^^ PARA_PREFIX      ^^^^^^^^ PARA_POSTFIX
#
# To run on a single processor, you can usually leave them empty.
# BEWARE: most tests and examples are devised to be run serially or on
# a small number of processors; do not use tests and examples to benchmark
# parallelism, do not run on too many processors

PARA_PREFIX="mpirun -np 4"
#PARA_PREFIX=" "
#
# available flags:
#                  -ni n        number of images        (or -nimage)
#                               (only for NEB; for PHonon, see below)
#                  -nk n        number of pools         (or -npool, -npools)
#                  -nb n        number of band groups   (or -nbgrp,-nband_group)
#                  -nt n        number of task groups   (or -ntg, -ntask_groups)
#                  -nd n        number of processors for linear algebra
#                                            (or -ndiag, -northo)
#
PARA_POSTFIX=" -nk 1 -nd 4 -nb 1 -nt 1 "
#
# The following variables are used for image parallelization of PHonon
# (see example in PHonon/examples/Image_example)
# NB: the number of processors in PARA_IMAGE_PREFIX is the product of the
# number of processors in PARA_PREFIX and the number of images in
# PARA_IMAGE_POSTFIX
#
PARA_IMAGE_POSTFIX="-ni 4 $PARA_POSTFIX"
PARA_IMAGE_PREFIX="mpirun -np 4"

# function to test the exit status of a job
check_failure () {
    # usage: check_failure $?
    if test $1 != 0
    then
        $ECHO "Error condition encountered during test: exit status = $1"
        $ECHO "Aborting"
        exit 1
    fi
}
#----------------------------

◇ run_example
#----------------------------
#!/bin/sh

# run from directory where this script is
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
EXAMPLE_DIR=`pwd`

# check whether echo has the -e option
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi

$ECHO
$ECHO "$EXAMPLE_DIR : starting"
$ECHO
$ECHO "This example shows how to calculate interatomic force constants in"
$ECHO "real space for AlAs in zincblende structure."

# set the needed environment variables
. ../../../environment_variables

# required executables and pseudopotentials
BIN_LIST="pw.x ph.x q2r.x matdyn.x plotband.x"
PSEUDO_LIST="Al.pz-vbc.UPF As.pz-bhs.UPF"

$ECHO
$ECHO "  executables directory: $BIN_DIR"
$ECHO "  pseudo directory:      $PSEUDO_DIR"
$ECHO "  temporary directory:   $TMP_DIR"
$ECHO "  checking that needed directories and files exist...\c"

# check for gnuplot
GP_COMMAND=`which gnuplot 2>/dev/null`
if [ "$GP_COMMAND" = "" ]; then
        $ECHO
        $ECHO "gnuplot not in PATH"
        $ECHO "Results will not be plotted"
fi

# check for directories
for DIR in "$BIN_DIR" "$PSEUDO_DIR" ; do
    if test ! -d $DIR ; then
        $ECHO
        $ECHO "ERROR: $DIR not existent or not a directory"
        $ECHO "Aborting"
        exit 1
    fi
done
for DIR in "$TMP_DIR" "$EXAMPLE_DIR/results" ; do
    if test ! -d $DIR ; then
        mkdir $DIR
    fi
done
cd $EXAMPLE_DIR/results

# check for executables
for FILE in $BIN_LIST ; do
    if test ! -x $BIN_DIR/$FILE ; then
        $ECHO
        $ECHO "ERROR: $BIN_DIR/$FILE not existent or not executable"
        $ECHO "Aborting"
        exit 1
    fi
done

# check for pseudopotentials
for FILE in $PSEUDO_LIST ; do
    if test ! -r $PSEUDO_DIR/$FILE ; then
       $ECHO
       $ECHO "Downloading $FILE to $PSEUDO_DIR...\c"
            $WGET $PSEUDO_DIR/$FILE $NETWORK_PSEUDO/$FILE 2> /dev/null
    fi
    if test $? != 0; then
        $ECHO
        $ECHO "ERROR: $PSEUDO_DIR/$FILE not existent or not readable"
        $ECHO "Aborting"
        exit 1
    fi
done
$ECHO " done"

# how to run executables
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
PH_COMMAND="$PARA_PREFIX $BIN_DIR/ph.x $PARA_POSTFIX"
MATDYN_COMMAND="$PARA_PREFIX $BIN_DIR/matdyn.x $PARA_POSTFIX"
Q2R_COMMAND="$PARA_PREFIX $BIN_DIR/q2r.x $PARA_POSTFIX"
PLOTBAND_COMMAND="$BIN_DIR/plotband.x "
$ECHO
$ECHO "  running pw.x as:     $PW_COMMAND"
$ECHO "  running ph.x as:     $PH_COMMAND"
$ECHO "  running q2r.x as:    $Q2R_COMMAND"
$ECHO "  running matdyn.x as: $MATDYN_COMMAND"
$ECHO "  running plotband.x as: $PLOTBAND_COMMAND"
$ECHO "  running gnuplot as: $GP_COMMAND"
$ECHO

# clean TMP_DIR
$ECHO "  cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/alas*
rm -rf $TMP_DIR/_ph0/alas*
$ECHO " done"

# self-consistent calculation
cat > alas.scf.in << EOF
 &control
    calculation='scf'
    restart_mode='from_scratch',
    tstress = .true.
    tprnfor = .true.
    prefix='alas',
    pseudo_dir = '$PSEUDO_DIR/',
    outdir='$TMP_DIR/'
 /
 &system
    ibrav=  2, celldm(1) =10.89, nat=  4, ntyp= 3,
    ecutwfc =50.0,
    occupations = 'smearing' ,
    degauss = 0.01 ,
    smearing = 'methfessel-paxton' ,
 /
 &electrons
    conv_thr =  1.0d-6
    mixing_beta = 0.7
 /
ATOMIC_SPECIES
   Fe   55.84700  Fe.pbe-n-kjpaw_psl.1.0.0.UPF
    V   50.94150  V.pbe-spn-kjpaw_psl.1.0.0.UPF
   Al   26.98154  Al.pbe-n-kjpaw_psl.1.0.0.UPF
ATOMIC_POSITIONS crystal
   Fe      0.250000000    0.250000000    0.250000000    
   Fe      0.750000000    0.750000000    0.750000000    
    V      0.500000000    0.500000000    0.500000000    
   Al      0.000000000    0.000000000    0.000000000    
K_POINTS automatic
  2 2 2   1 1 1
EOF
$ECHO "  running the scf calculation...\c"
$PW_COMMAND < alas.scf.in > alas.scf.out
check_failure $?
$ECHO " done"

# phonon calculation on a (444) uniform grid of q-points
cat > alas.ph.in << EOF
phonons of AlAs
 &inputph
  tr2_ph=1.0d-12,
  niter_ph = 99,
  prefix='alas',
  alpha_mix(1) = 0.1,
  ldisp=.true.,
  nq1=2, nq2=2, nq3=2
  outdir='$TMP_DIR/',
  fildyn='alas.dyn',
 /
EOF
$ECHO "  running the phonon calculation ...\c"
$PH_COMMAND < alas.ph.in > alas.ph.out
check_failure $?
$ECHO " done"

cat > q2r.in <<EOF
 &input
   fildyn='alas.dyn', zasr='simple', flfrc='alas444.fc'
 /
EOF

$ECHO "  transforming C(q) => C(R)...\c"
$Q2R_COMMAND < q2r.in > q2r.out
check_failure $?
$ECHO " done"

cat > matdyn.in <<EOF
 &input
    asr='simple',  
    flfrc='alas444.fc', flfrq='alas.freq', q_in_band_form=.true.,
 /
 5
  0.00 0.00 0.00 40
  1.00 0.00 0.00 10
  0.75 0.75 0.75 30
  0.00 0.00 0.00 40
  0.50 0.50 0.50 1
EOF

$ECHO "  recalculating omega(q) from C(R)...\c"
$MATDYN_COMMAND < matdyn.in > matdyn.out
check_failure $?
$ECHO " done"

cat > plotband.in <<EOF
alas.freq
0 450
freq.plot
freq.ps
0.0
50.0 0.0
EOF

$ECHO "  writing the phonon dispersions in freq.plot...\c"
$PLOTBAND_COMMAND < plotband.in > /dev/null
check_failure $?
$ECHO " done"

if [ "$GP_COMMAND" = "" ]; then
    break
else
cat > gnuplot.tmp <<EOF
set encoding iso_8859_15
set terminal postscript enhanced solid color "Helvetica" 20
set output "alas.dispersions.ps"
#
set key off

set xrange [0:3.72]
dim=450
set yrange [0:dim]
set arrow from 1,0. to 1,dim nohead  lw 2
set arrow from 1.55,0. to 1.55,dim nohead  lw 2
set arrow from 2.85,0. to 2.85,dim nohead  lw 2
set ylabel "frequency (cm^{-1})"
unset xtics
lpos=-15
set label "{/Symbol G}" at -0.05,lpos
set label "X" at 0.95,lpos
set label "K" at 1.51,lpos
set label "{/Symbol G}" at 2.81,lpos
set label "L" at 3.69,lpos

plot "freq.plot" u 1:2 w l lw 3  
EOF
$ECHO "  creating the postscript file alas.dispersion.ps...\c"
$GP_COMMAND gnuplot.tmp
check_failure $?
$ECHO " done"
fi


cat > phdos.in <<EOF
 &input
    asr='simple',  dos=.true.,
    flfrc='alas444.fc', fldos='alas.phdos', nk1=16,nk2=16,nk3=16
 /
EOF

$ECHO "  calculating phonon DOS ...\c"
$MATDYN_COMMAND < phdos.in > phdos.out
check_failure $?
$ECHO " done"

if [ "$GP_COMMAND" = "" ]; then
    break
else
cat > gnuplot1.tmp <<EOF
set encoding iso_8859_15
set terminal postscript enhanced solid color "Helvetica" 20
set output "alas.phdos.ps"
#
set key off
set xrange [0:450]
set xlabel "frequency (cm^{-1})"
set ylabel "DOS"
plot 'alas.phdos' u 1:2 w l lw 3
EOF
$ECHO "  generating plot of phonon_dos in the file alas.phdos.ps...\c"
$GP_COMMAND  gnuplot1.tmp
check_failure $?
$ECHO " done"
fi

$ECHO
$ECHO "$EXAMPLE_DIR: done"
#----------------------------
--------------------------------------------------------------------------------
■ References
[1] http://www.stat.phys.titech.ac.jp/SATL_qe_tutorial/phonon.html 
[2] http://www.quantum-espresso.org/wp-content/uploads/Doc/INPUT_PH.html
[3] http://www.misasa.okayama-u.ac.jp/~masami/pukiwiki/index.php?QE%A4%C7%A4%CE%BF%B6%C6%B0%A5%E2%A1%BC%A5%C9%B7%D7%BB%BB%A5%E1%A5%E2
--------------------------------------------------------------------------------
■ benchmark (Core i7-4770S)
****************************************************
GaAs (1.0 GB, primitive cell, 2 atoms, 2 k-point) in example02 (run_example)
Core i7-4770S

change in espresso-5.4.0/environment_variables

mpirun -np 1
************************************
-ni 1 -nk 1 -nd 1 -nb 1 -nt 1: 9m44s
  phonon(9m40s) >> scf(4s) > q2r(<1s) or matdyn(<1s)
************************************

mpirun -np 4
************************************
"": 4m16s
  phonon(3m33s) >> scf(2s) > q2r(<1s) or matdyn(<1s)

-ni 1 -nk 1 -nd 4 -nb 1 -nt 1: 3m36s
  phonon(3m33s) >> scf(2s) > q2r(<1s) or matdyn(<1s)

-ni 1 -nk 1 -nd 1 -nb 4 -nt 1: error

-ni 1 -nk 1 -nd 1 -nb 1 -nt 4: 4m01s
  phonon(4m00s) >> scf(2s) > q2r(<1s) or matdyn(<1s)

-ni 4 -nk 1 -nd 1 -nb 1 -nt 1: 4m02s
  phonon(4m00s) >> scf(3s) > q2r(<1s) or matdyn(<1s)

-ni 1 -nk 2 -nd 2 -nb 1 -nt 1: 4m31s
  phonon(4m28s) >> scf(3s) > q2r(<1s) or matdyn(<1s)
************************************

mpirun -np 8
************************************
-ni 1 -nk 1 -nd 8 -nb 1 -nt 1: 3m31s
  phonon(3m27s) >> scf(3s) > q2r(<1s) or matdyn(<1s)
************************************

time: phonon = scf * 107 s (mpirun -np 4 -ni 1 -nk 1 -nd 4 -nb 1 -nt 1)
time: phonon = scf * 140 s (mpirun -np 1)
speed is 2.7 times as in mpirun -np 4 as in mpirun -np 1.

************************************
-ni: image
-nk: pools
-nd: processors(linear algebra)
-nb: band
-nt: task
****************************************************
--------------------------------------------------------------------------------


QRコード
携帯用QRコード
アクセス数
ページビュー数