HSE計算が不意に終了する
Up to User's Forum (General)Phaseユーザー様、開発者様
富士フイルム 奥野と申します。
お世話になっております。
こういう質問をこの場でしていいのかどうかわかりませんが、問題ありましたらご指摘ください。
私は、フリーソフトでウルトラソフトでHSE,PBE0などの計算が出来ることから、最近になってPhaseの利用を始めた者です。
さて、そのHSEの計算ですが、sampleに入っているものは問題なく動くのですが、実際にちょっとした系(といっても簡単な立方晶のペロブスカイトです。)で、計算すると、Iterationが開始されることもなく、
#symmetry op. = 32
0.0000 0.0000 -1.0000 0.0000 0.0000 0.0000 -1.0000 0.0000
1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000
← ここで落ちている。
また、落ちている部分も一定でなく、別の系(やや構造を大きくしたSuperCell、といっても、原子数が40個でk点は4,4,4程度、カットオフも25.00 rydberg くらいなので、メモリなどは十分につんだ環境で計算しています。)
!bPP 2 1 2 2 1 1066 5 il1,tau1,il2,tau2,il3,nrcml,mopsc
!bPP 10 2 1 2 2 1 1066 5 : MM, L1,T1,L2,T2,L3,NRC,MORD
!bPP nfp,nfout,kord,mm,il1,tau1,il2,tau2,il3 = 39 6 20 11 2 1 2 2 3
!bPP 2 1 2 2 3 1125 5 il1,tau1,il2,tau2,il3,nrcml,mopsc
← ここで落ちることもある。
エラーメッセージなしで落ちています。念のため、コンパイルは
- Supported platformsで 1) GNU Linux (EM64T/AMD64)を選択
- Supported compilersで 2) Intel Fortran compilerを選択
- Supported programming-modelsで 1) MPI parallelを選択
- Supported MPI librariesで 2) Open MPIを選択
- Enter MPI library directory. で/usr/local/openmpi-intel121を入力
- Supported BLAS/LAPACKで 2) Intel Math Kernel Library (MKL)を選択
- Enter BLAS/LAPACK library directory. で
/opt/intel/composer_xe_2011_sp1/mkl/lib/intel64 を指定
と選択しています。サンプル計算はうまくいっているようなので、特にコンパイル結果が悪さしたとも思えません。
また、並列計算をさせる際に、ne,nkの分け方で(系にもよるかと思いますが)
効率のよい並列計算の割り振りはどのように考えてne,nkを割り振ればよろしいものでしょうか?
なお、計算はPBEで収束させた結果を
initial_wavefunctions = file
initial_charge_density = file
で、初期値にして利用しています。
以下が私のインプットファイルで、SrTiO3のHSE計算です。並列計算は8で ne,nkの指定なしで行っています。(LDA+U,PBEなどの計算はなんの問題もなくできています。)
file_namse.data
c ====<< & or & >>===
c & : VPP, VP
c $ : DEC, HP, SUN
&fnames
F_INP = './nfinput.data'
F_POT(1) = '../pp/Sr_ggapbe_us_01.pp'
F_POT(2) = '../pp/Ti_ggapbe_us_02.pp'
F_POT(3) = '../pp/O_ggapbe_us_02.pp'
F_DYNM = './nfdynm.data'
F_CHGT = './nfchgt.data'
F_ENF = './nfefn.data'
F_CNTN = './continue.data'
F_ZAJ = './zaj.data'
&end
Input ファイル
Control{
condition = 0 ! {0|1|2|3}|{initial|continuation|fixed_charge|fixed_charge_continuation}
cpumax = 5 day ! {sec|min|hour|day}
max_iteration = 60000
}
accuracy{
cke_wavefunctions = 25.00 rydberg ! cke_wf
cke_chargedensity = 230.00 rydberg ! cke_cd
num_bands = 30
ksampling{
method = mesh ! {monk|mesh|file|directin|gamma}
mesh{ nx=6, ny=6, nz=6}
}
smearing{
method = tetrahedral ! {parabolic|tetrahedral}
width = 0.002 hartree
}
xctype = ggapbe
hybrid_functional{
sw_hybrid_functional = ON
sw_screened_exchange = ON
alpha = 0.25
omega = 0.106
reduction_factor{
f1=2
f2=2
f3=2
}
}
scf_convergence{
delta_total_energy = 1.e-9 hartree
succession = 3 !default value = 3
}
force_convergence{
delta_force = 0.1e-3
}
initial_wavefunctions = file !{random_numbers|matrix_diagon}
initial_charge_density = file
}
structure{
unit_cell_type=bravis
unit_cell{
a = 7.52477 , b= 7.52477 , c= 7.52477
alpha=90.0, beta=90.0, gamma=90.0
}
symmetry{
crystal_structure = simple_cubic
sw_inversion = 0
}
magnetic_state = para !{para|af|ferro}
atom_list{
coordinate_system = internal ! {cartesian|internal}
atoms{
!#default mobile=no
!#tag rx ry rz element
0.0 0.0 0.0 Sr
0.5 0.5 0.5 Ti
0.0 0.5 0.5 O
0.5 0.0 0.5 O
0.5 0.5 0.0 O
}
}
element_list{ !#tag element atomicnumber zeta dev
Sr 38 0.00 2.0
Ti 22 0.00 2.0
O 8 0.00 2.0
}
}
wavefunction_solver{
solvers{
!#tag sol till_n dts dte itr var prec cmix submat
!!mddavidson -1 0.1 0.1 500 tanh on 3 on
Davidson -1 0.1 0.1 500 tanh off 3 off
}
}
charge_mixing{
sw_mix_charge_hardpart = on
mixing_methods{
!#tag no method rmxs rmxe itr var prec istr nbmix update
1 simple 0.90 0.95 40 linear on
2 simple 0.50 0.90 400 tanh on
3 pulay 0.40 0.40 100 * on 3 15 RENEW
}
}
structure_evolution{
method = gdiis !{quench|gdiis|velocity_verlet|quench_with_constraint}
dt = 100.0
gdiis{
gdiis_box_size = 4
gdiis_update = RENEW
c_forc2gdiis = 0.0050
c_iteration2GDIIS = 3
}
stress{
sw_stress = 0
iconstpw = 0
}
}
postprocessing{
dos {
sw_dos = on
method = t
}
}
printlevel{
base = 1
timing = 1
solver = 1
evdff = 1
rmm = 0
snl = 0
gdiis = 1
eigenvalue = 1
spg = 1
kp = 2
pulay = 0
matdiagon = 0
vlhxcq = 0
totalcharge = 1
submat = 0
strcfctr = 0
inputfile = 2
davidson = 1
}
上記の件、ご対処方法、あるいは心当たりなどある方、ご教示いただけると幸いです。
奥野さま
株式会社アスムスの甲賀と申します.お世話になります.
ksamplingブロックの下に,次の設定を挿入すれば異常終了はしなくなるのではないかと思います.
base_reduction_for_GAMMA = off
また,対応している波動関数ソルバーはlm+msd法とrmm法のみなので,
wavefunction_solverブロックの設定も書き換えていただく必要があります.
現公開版のハイブリッド汎関数法は,特にウルトラソフト擬ポテンシャルを利用する場合に計算時間の点で問題があり(PBE計算の数万倍もしくはそれ以上の計算時間),非常に単純な問題をのぞき有効にご活用いただくのは難しいかもしれません.
公開時期は未定ですが,次期公開版では改善される予定です.
ne, nkに関して申し上げますと,通常k点並列の方が効率がよいのでなるべくnkが大きくなるように設定するのがよいと思います.
ただし,k点数はさほど多くない場合もありますので,そのようなケースではバンド並列も組み合わせてご利用いただくと効率のよい計算ができると思います.