NEBモジュール
RepetitiveNEB
from ase.io import write
from grrmpy.neb import RepetitiveNEB
from grrmpy.io import write_html
rneb = RepetitiveNEB(images)
rneb.attach(lambda:write("NEB.traj",rneb.images))
rneb.attach(lambda:write_html("NEB_Diagram.traj",rneb.images))
# ある条件でNEB計算がを終えるたびに構造を保存する場合(上書きせず別ファイルへ保存).
# 3回NEB計算するのでrange(3). それぞれNEB_0.traj,NEB_1.traj,NEB_2.trajに保存される.
rneb.update(lambda func:iter([write(f"NEB_{i}.traj",rneb.images) for i in range(3)]):next(func))
rneb.run(
climb_list = [False,False,True],
maxstep_list = [0.05,0.1,0.25],
fmax_list = [0.05,0.05,0.05],
steps_list = [300,2000,2000]
)
- class grrmpy.neb.repetitive_neb.RepetitiveNEB(images, constraints=[], parallel=True, mic=None, calc_func=<function pfp_calculator>, name=None)[ソース]
- 一つのNEBイメージに対して,異なる条件で複数回NEB計算を行なうためのクラス.デフォルトではclimb,maxsteps,fmax,stepsなど,NEBやOptimizerの引数を変えられる.
Parameters:
- images: list of Atoms
- Atomsのリスト
- constraints: ASE Constraint
- constrainオブジェクト,複数制約をかける場合リストで与える.
- parallel: bool
- 並列計算を行なう場合True.
- mic: bool
- 最小イメージ規則にする場合True. デフォルトでは周期境界条件の場合自動でTrueにする.
- calc_func: functions object
- claculatorを返す関数
- name:
- 指定した名前でlogファイルが作成される.
Properties:
RepetitiveNEBのプロパティ(の一部).このクラスを継承するし, 新たなクラスを作成することでカスタマイズされたNEBを作成することができる.例えば,updateにイメージを切断,挿入する関数を与えることでSNEBは作成された.- images: list of Atoms
- 現在実行中のNEBのimages
- neb: NEB
- 現在実行中のneb
- opt: Optimizer
- 現在実行中のOptimizer
- converged: bool
- 直近のNEBの収束状況
- attach_stop(*args, **kwargs)[ソース]
- True or Falseを与える関数を設定するASEのoptimizerのようにイタレーション毎に与えた関数が実行される.関数の戻り値がTrueになった場合, 計算が停止する.
- property default_param
run()実行時のデフォルトの引数
- run(**params)[ソース]
- 計算を実行する設定可能な引数がdefault_paramで確認できる.
Parameters:
- base_optimizer: Optimizer
- NEB計算に使用するOptimizer.ここで指定したOptimizerを継承して作成されるOptWithCondオプティマイザーが実際には使用される.
- climb_list: list of bool
毎回のNEB計算のclib
- maxstep_list: list of float
- 毎回のNEB計算のmaxstep_list要素にNoneを指定した場合,forceに合わせて自動でmaxstepを変化させる.どのように変化させるかはautomate_maxstep_true,automate_maxstep_falseで指定できる.
- fmax_list: list of float
- 毎回のNEB計算のfmax
- steps_list: list of int
- 毎回のNEB計算のsteps
- neb_kwargs: dict
- NEBのインスタンス時の引数を指定したい場合に用いる例えばばね定数kを変えたい場合{"k"=0.2}のようにするここで指定した値は全てのNEB計算に適用される
- opt_kwargs: dict
- Optimizerのインスタンス引数を指定したい場合に用いる.
- automate_maxstep_true: dict
- climb=True時にautomaxstepを使用した際のmaxstep値
- automate_maxstep_false: dict
- climb=False時にautomaxstepを使用した際のmaxstep値
- same_energy_and_fmax_arg: dict
- 停止基準
- steep_peak_arg:
- 停止基準
SNEB
- Step1:
緩い収束条件でNEB計算を行ない,最もエネルギーの高い点をTSとする.
- Step2:
- TS構造の両隣の構造のエネルギーを順次確認し,エネルギーの谷間があった場合,その点をnew_ini,new_fin構造とする(青点).この時浅い谷間は無視する.具体的にはtolerance kJ/mol以下の谷間は無視する.
- Step3:
- TSとnew_ini,TSとfin_iniのエネルギー差をそれぞれ100とした時,threshold以下の点を切り捨てて新たにNEW_INI,NEW_FINを設定する.(これはTS付近にimageを集中させNEB計算を早く終わらせるために行う.)
- Step4:
NEW_INIとNEW_FINを新たな始構造,終構造とし,NEB計算を行なう.
- Step5:
Step1-Step4の操作を繰り返す(デフォルトでは4回行なう)
重要
html
を設定すると NEBのエネルギーダイアグラムを表示できる が,
この活性化エネルギーはあくまで目安であり,本当の活性化エネルギーはIRCするまで分からない.- class grrmpy.neb.auto_neb.SNEB(*data, logfile='-', html=None, mic=None, parallel=True, calc_func=<function pfp_calculator>, optimizer=<class 'ase.optimize.fire.FIRE'>, with_stop=True, max_n=12, times=2, constraints=[])[ソース]
Parameters:
- *data:
- 3種類の方法でinput構造を与えることができる.- ini,fin構造と初めの中間イメージの数を与える(3つの引数を与える)- ini,fin構造を与える(2つの引数を与える.初期イメージの数は13になる)- images構造を与える(1つの引数を与える.calculatorを付ける必要はない)imageの数は奇数個を推奨する.
Examples:
インスタンス化方法
>>> sneb = SNEB(ini,fin,html="NEB_progress.html") # 13個で中間イメージが作られる >>> # または >>> sneb = SNEB(ini,fin,15,html="NEB_progress.html") # 15個で中間イメージが作られる >>> # または >>> sneb = SNEB(images,html="NEB_progress.html")
Constraintsがある場合
>>> f = FixAtoms(indices=[0,1,2,3]) >>> sneb = SNEB(ini,fin,html="NEB_progress.html",constraints=f)
>>> f = FixAtoms(indices=[0,1,2,3]) >>> c = FixBondLength(0, 1) >>> sneb = SNEB(ini,fin,html="NEB_progress.html",constraints=[f,c])
- logfile: str or Path
logファイルを出力する場合,ファイル名.
- html: str or Path
途中のNEBイメージを保存する場合にファイル名を設定.
- micbool
周期境界条件の際, 最小距離でイメージを作成する場合.True. 設定しない場合(None). ini構造が周期境界条件である場合.自動的にTrueにする.
- parallel: bool
並行処理を行なう場合.True. デフォルトはTrue.
- calc_func: object
calculatorを返す関数.デフォルトはpfpのcalculator
- optimizer: class
NEB計算を行なう際のOptimizer. デフォルトはFIRE.
- with_stop: bool
- optimizerにstop機能を付ける場合True.max_n回連続でEnergyとForceが同じ状況がtimes回あった時計算を終了する.grrmpy.optimize.functions.add_stop_to()を参照
- max_n: int:
with_stop=Trueの場合に指定. with_stop(add_stop_to)の引数. デフォルト12
- times: int
with_stop=Trueの場合に指定. with_stop(add_stop_to)の引数. デフォルト2
注釈
*data以外の引数は全てキーワード引数になるので注意!!
Propertes:
- archive
全てのNEBイメージが2次元リストで保存されている
- images
現在のNEBイメージ
- property imax
NEB計算上でTSと判断されたindex番号
- run(nimages=[13, 9, 12], maxstep=[0.2, 0.2, 0.1, None], fmax=[0.12, 0.1, 0.07, 0.05], steps=[500, 1000, 1000, 2000], tolerance=5, threshold=[30, 20, 20], dist=0.1, min_nimages=3, climb_steps=15, climb=False)[ソース]
Parameters:
- nimages: list of integers
毎回のNEB計算のイメージの数, 5以上の奇数.
- maxstep: list of float
毎回のNEB計算のmaxstep値,Noneを要素にとった場合,fmaxに応じて自動調整する.
- fmax: list of float
毎回のNEB計算のfmax値
- steps: list of integers
毎回のNEB計算のsteps値
- tolerance: float
tolerance(kJ/mol)以下の谷間は無視する.デフォルトは5 kJ/mol
- threshold: list of float
山の高さのthreshold%以下の点は切り捨てる.デフォルトは30%
- dist: float
- 新たなNEBイメージを作成する際に,TS付近に2つイメージを作成する.TS構造からの変位をdistで設定する
- min_nimages: integer
- NEBバンドを切断する際,最低min_nimages個の点を残す.デフォルトは3(一個だけ突出しているTS(Wみたいな形)のNEBバンドがあった時のために設定する)
- climb_steps: integer
- climb=Falseで収束しなかった場合,その後のTrueでのNEB計算のStep数をclimb_steps回にする.Noneの場合,climb=Falseの時と同じstepsで計算する.一番最後のNEB計算ではclimb_stepsに関係なくclimb=Falseの時と同じstepsで計算する.
- climb: bool
- Falseの場合,climbはFalse,False,False,False...Trueで行なう.Trueの場合はclimbはFalse,True,Fase,True,False....Trueで行なうFalseにした場合,climb_stepsを設定する意味はなくなる.
ANEB
TSから nsampling
離れた点を新たな始構造,終構造(new_ini,new_fin)としてNEB計算を行なう.
- class grrmpy.neb.auto_neb.ANEB(*data, logfile='-', html=None, mic=None, parallel=True, calc_func=<function pfp_calculator>, optimizer=<class 'ase.optimize.fire.FIRE'>, with_stop=True, max_n=12, times=2, constraints=[])[ソース]
Propertes:
- archive
全てのNEBイメージが2次元リストで保存されている
- images
現在のNEBイメージ
- property imax
NEB計算上でTSと判断されたindex番号
- run(fmax=[0.12, 0.1, 0.07, 0.05], steps=[500, 1000, 1000, 2000], maxstep=[0.2, 0.2, 0.1, None], nimages=[13, 9, 12], nsampling=[3, 3, 3], dist=0.1)[ソース]
- ini,fin構造の間に3つのイメージを作成し,緩い収束条件でNEB計算を行なう.計算後のTS構造の両隣の構造を新たなini,fin構造としてNEB計算を行なう.この操作を合計len(nimages)回繰り返す(NEB計算をlen(nimages)回行なう).最後のNEB計算のみ収束条件を厳しく(=fmax)する.デフォルトではn=4回のNEB計算を行なう.
Parameters:
- fmax: float or list of float
- floatで与えた場合,[fmax*2,fmax*2,fmax*2,...fmax]の収束条件で計算する.(最後だけ厳しい収束条件で計算する)listで与えた場合, [fmax_0, fmax_1, fmax_2,...fmax_n]の収束条件で計算する.
- steps: integers or list of integers
- integersで与えた場合,[steps,steps,steps,...steps*5]のステップ数で計算する.listで与えた場合, [steps_0, steps_1, steps_2,...steps_n]のステップ数で計算する.
- maxstep: float or list of float
- maxstep. Noneの場合,Forceに合わせて自動的に調整する.詳しくはgrrmpy.optimize.attach.automate_maxsteps()を参照floatで与えた場合,maxstepの値で計算する.listで与えた場合, [maxstep_0, maxstep_1, maxstep_2,...maxstep_n]の収束条件で計算する.None,またはNoneの要素を与えた場合,forceに合わせて自動的に調整する.
- nimages: list of integers
- 毎回のNEB計算の中間イメージ数.[nimages_0, nimages_1, nimages_2,...nimages_n]イメージ数で作成する.
- nsampling: integers or list of integers
- TS構造からforward側,reverse側にそれぞれnsampling個隣の構造を新たなini,fin構造としてイメージを作成する.integersで与えた場合,nsamplingのイメージ数で作成する.listで与えた場合, [nsampling_0, nsampling_1, nsampling_2,...nsampling_n]イメージ数で作成する.Noneの場合,自動的に調整する.
- dist: float
- 新たなNEBイメージを作成する際に,TS付近に2つイメージを作成する.TS構造からの変位をdistで設定する
- Retrun:
bool: 収束した場合True.