This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
quantumespresso:respack [2020/07/31 20:55] koudai [計算の収束] |
quantumespresso:respack [2020/09/19 19:42] koudai [計算の収束] |
||
---|---|---|---|
Line 5: | Line 5: | ||
* 誘電関数から求まる動的物理量(電子エネルギー欠損スペクトル、光学伝導度、反射率) | * 誘電関数から求まる動的物理量(電子エネルギー欠損スペクトル、光学伝導度、反射率) | ||
* 制限乱雑位相近似 (constraint random-phase approximation, | * 制限乱雑位相近似 (constraint random-phase approximation, | ||
- | * cRPAの理論はこちらのテキストの7章を参照してください https:// | + | * cRPAの理論はこちらのテキストの7章を参照してください |
+ | * https:// | ||
* 日本語および英語のマニュアルでは使用例とその結果が充実しているので、初心者でも特に困ることはないと思います | * 日本語および英語のマニュアルでは使用例とその結果が充実しているので、初心者でも特に困ることはないと思います | ||
- | | + | |
- | * f電子系やスピン軌道相互作用がある系には非対応。 | + | * f電子系やスピン軌道相互作用がある系には非対応 |
+ | * 擬ポテンシャルはノルム保存型のものにのみ対応しています。例えば以下のサイトからダウンロードできます | ||
+ | * http:// | ||
+ | * https:// | ||
Line 27: | Line 31: | ||
</ | </ | ||
- 作業ディレクトリを作成し、その中に入ります< | - 作業ディレクトリを作成し、その中に入ります< | ||
- | $ mkdir buiid | + | $ mkdir build |
$ cd build | $ cd build | ||
</ | </ | ||
Line 41: | Line 45: | ||
$ sudo make install | $ sudo make install | ||
</ | </ | ||
- | * makeにやや時間がかかります | ||
- パスをとおします< | - パスをとおします< | ||
$ echo ' | $ echo ' | ||
Line 54: | Line 57: | ||
- QuantumESPRESSO の pw.x によるSCF計算 | - QuantumESPRESSO の pw.x によるSCF計算 | ||
- RESPACKの calc_wannier による最局在ワニエ関数の計算。事前にSCF計算が必要 | - RESPACKの calc_wannier による最局在ワニエ関数の計算。事前にSCF計算が必要 | ||
- | - RESPACKの calc_chiqw による誘電関数の計算。事前にワニエ関数の計算が必要 | + | - RESPACKの calc_chiqw による誘電関数の計算。cRPAを使う場合は事前にワニエ関数の計算が必要 |
- RESPACKの calc_w3d による直接相互作用の計算。事前にcalc_chiqwのcRPA計算が必要 | - RESPACKの calc_w3d による直接相互作用の計算。事前にcalc_chiqwのcRPA計算が必要 | ||
- RESPACKの calc_j3d による交換相互作用の計算。事前にcalc_chiqwのcRPA計算が必要 | - RESPACKの calc_j3d による交換相互作用の計算。事前にcalc_chiqwのcRPA計算が必要 | ||
Line 94: | Line 97: | ||
dxy 0.2d0 0.0d0 0.0d0 0.0d0 !n: dx | dxy 0.2d0 0.0d0 0.0d0 0.0d0 !n: dx | ||
& | & | ||
- | N_sym_points =5, !n: 計算ラインを構成する対称 k 点数 | + | N_sym_points = 5, !n: 計算ラインを構成する対称k点数 |
- | Ndiv =40/ !n: 対称 k 点間の分割数 | + | Ndiv = 40/ !n: 対称k点間の分割数 |
- | 0.500 0.500 0.500 !n: 対称 k 点 ; SK_sym_pts(1: | + | 0.500 0.500 0.500 !n: 対称k点(逆格子ベクトルの分率座標) |
- | 0.000 0.000 0.000 !n: 対称 k 点 ; SK_sym_pts(1: | + | 0.000 0.000 0.000 !n: 対称k点 |
- | 0.500 0.000 0.500 !n: 対称 k 点 ; SK_sym_pts(1: | + | 0.500 0.000 0.500 !n: 対称k点 |
- | 0.500 0.250 0.750 !n: 対称 k 点 ; SK_sym_pts(1: | + | 0.500 0.250 0.750 !n: 対称k点 |
- | 0.500 0.500 0.500 !n: 対称 k 点 ; SK_sym_pts(1: | + | 0.500 0.500 0.500 !n: 対称k点 |
& | & | ||
flg_vis_wannier = 0, !o: 実空間ワニエ関数を計算 (しない: 0, する: 1) | flg_vis_wannier = 0, !o: 実空間ワニエ関数を計算 (しない: 0, する: 1) | ||
Line 113: | Line 116: | ||
& | & | ||
Ecut_for_eps | Ecut_for_eps | ||
- | Num_freq_grid | + | Num_freq_grid |
N_CALC_BAND | N_CALC_BAND | ||
- | MPI_num_proc_per_qcomm = 6, !o: コミュニティ当たりのプロセス数。MPIを使用する際に指定 | + | MPI_num_proc_per_qcomm = 2, !o: コミュニティ当たりのプロセス数。MPIを使用する際に指定 |
MPI_num_qcomm | MPI_num_qcomm | ||
MPI_io_rank | MPI_io_rank | ||
Line 142: | Line 145: | ||
たとえばPWscfの入力ファイルが prefix.scf.in だった場合、次のようにします。 | たとえばPWscfの入力ファイルが prefix.scf.in だった場合、次のようにします。 | ||
< | < | ||
- | $ mpirun -n 12 < prefix.scf.in > prefix.scf.out | + | $ mpirun -n 24 < prefix.scf.in > prefix.scf.out |
</ | </ | ||
* 既約k点の情報が必要なので、SCF計算 (ネームリスト< | * 既約k点の情報が必要なので、SCF計算 (ネームリスト< | ||
- | * k点数を変更したり、バンド計算など別の計算を行った後にRESPACKを使用する場合は、prefix.save を削除してから再度SCF計算を実行してください | + | * k点数を変更したり、バンド計算など別の計算を行った後にRESPACKを使用する場合は、ディレクトリ |
* k点は automatic により生成し、シフトしていないもの (0 0 0) を使用してください | * k点は automatic により生成し、シフトしていないもの (0 0 0) を使用してください | ||
Line 160: | Line 163: | ||
< | < | ||
+ | $ export OMP_NUM_THREADS=12 | ||
+ | $ export MKL_NUM_THREADS=12 | ||
$ calc_wannier < respack.in > LOG.wannier | $ calc_wannier < respack.in > LOG.wannier | ||
</ | </ | ||
+ | * OpenMPによる並列化のみ対応しています | ||
+ | * エネルギーウインドウはワニエ基底に射影するバンドの範囲です。 | ||
+ | * エネルギーインナーウィンドウ内のすべてのバンドがワニエ基底によるバンドと一致するように計算されます。指定しなくても計算可能ですが、できるだけ広い範囲を指定することでより確実なワニエ基底を得ることができます。 | ||
===== 分極関数の計算 ===== | ===== 分極関数の計算 ===== | ||
Line 170: | Line 178: | ||
< | < | ||
- | $ mpirun -n 12 calc_chiqw < respack.in > LOG.chiqw | + | $ export OMP_NUM_THREADS=12 |
+ | $ export MKL_NUM_THREADS=12 | ||
+ | $ mpirun -n 2 calc_chiqw < respack.in > LOG.chiqw | ||
</ | </ | ||
+ | * OpenMPとMPIのハイブリッド計算を行います。OMP_NUM_THREADSおよびMKL_NUM_THREADSにMPIの1スレッドあたりのOpenMP並列数を指定してください | ||
+ | * MPI_num_qcommには、すべてのqで計算するときに、いくつの点を同時に並列計算を行うかを指定します | ||
+ | * MPI_num_proc_per_qcommには、qの各点の計算に使用するスレッド数を指定します | ||
* MPIのプロセス数は MPI_num_proc_per_qcomm * MPI_num_qcomm に一致させます | * MPIのプロセス数は MPI_num_proc_per_qcomm * MPI_num_qcomm に一致させます | ||
- | * この計算に一番時間がかかります | + | * 励起状態の計算になるので、多くの非占有バンドを取り入れる必要があります |
+ | * バンドの数、エネルギーカットオフ、k点数、ユニットセルの体積に比例して非常に多くのメモリを消費します | ||
+ | * 観測される物理量としての光学応答を調べたければ通常のRPAを、相互作用パラメータを求めたければ制限RPAを使用します。それぞれ収束に必要なパラメータは異なるので注意してください。 | ||
+ | * 一般に、通常のRPAの方が計算コストが大きいです | ||
===== 相互作用の計算 ===== | ===== 相互作用の計算 ===== | ||
& | & | ||
- | 事前に制限RPA法(calc_chiqw で flg_cRPA=1)を使った計算が必要です。 | + | 事前に制限RPA法(calc_chiqw で flg_cRPA=1)を使ったすべてのq (flg_calc_type = 0) での計算が必要です。 |
* 直接相互作用< | * 直接相互作用< | ||
+ | $ export OMP_NUM_THREADS=12 | ||
+ | $ export MKL_NUM_THREADS=12 | ||
$ calc_w3d < respack.in > LOG.w3d | $ calc_w3d < respack.in > LOG.w3d | ||
</ | </ | ||
* 交換相互作用< | * 交換相互作用< | ||
+ | $ export OMP_NUM_THREADS=12 | ||
+ | $ export MKL_NUM_THREADS=12 | ||
$ calc_j3d < respack.in > LOG.j3d | $ calc_j3d < respack.in > LOG.j3d | ||
</ | </ | ||
====== 計算の収束 ======= | ====== 計算の収束 ======= | ||
- | 分極関数の計算で収束させなければならないパラメータは次の2つです | + | 分極関数の計算で収束させなければならないパラメータは次の3つです |
* k点数 | * k点数 | ||
Line 196: | Line 216: | ||
最初は次の値を使用します | 最初は次の値を使用します | ||
- | * k点数 ... SCF計算で全エネルギーを収束させたもの | + | * k点数 ... ワニエでバンドが再現できる最低限の数 |
- | * Ecut_for_eps ... ecutwfcの1/ | + | * Ecut_for_eps ... 2, 3, 4 Ryあたりで計算して様子を見る |
+ | |||
+ | 次の手順で収束させます | ||
- | 次の手順で収束させます(flg_calc_type=1としてEELSの結果をプロットするのが便利です) | + | - 多めの数のnbndでSCF計算を実行する(最初はフェルミ準位より40~50eV程度上のバンドが入るくらいで試すと良い) |
+ | - (制限RPAの場合)相互作用の大きさを求めたい軌道のワニエ基底を計算する。 | ||
+ | - N_CALC_BAND に関して計算を収束させる。足りなくなったらnbndを増やしたSCF計算を再び行う | ||
+ | - Ecut_for_eps に関して計算を収束させる() | ||
+ | - N_CALC_BANDの収束をチェックする | ||
+ | - SCF計算でk点数を増やし、計算を収束させる | ||
- | - 多めの数のnbndでSCF計算を実行する(フェルミ準位より50eV程度上のバンドが入るくらい) | ||
- | - N_CALC_BANDを増やし、分極関数を収束させる。足りなくなったらnbndを増やしたSCF計算を再び行う | ||
- | - Ecut_for_eps を増やしていき、計算を収束させる。 | ||
- | - SCF計算でk点数を増やし、分極関数を収束させる | ||
- | 有効相互作用を求める場合は、さらに Num_freq_grid(周波数のグリッド数)を増やして有効相互作用の値の収束を確認しましょう。 | + | * 有効相互作用を求める場合は、さらに Num_freq_grid(周波数のグリッド数)を増やして有効相互作用の値の収束を確認しましょう。 |
+ | * 計算が重いので、有効相互作用の有効数値は2桁出すのが精一杯かもしれません | ||
Line 222: | Line 246: | ||
omega_max=200 | omega_max=200 | ||
+ | set logscale x | ||