NEBモジュール

RepetitiveNEB

(climb=False,mastep=0.05,step=300)→(climb=False,mastep=0.1,step=2000)→(climb=True,mastep=0.25,step=2000)
の条件でNEB計算を行ないたい時は.
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(*args, **kwargs)[ソース]

ASEのOptimizerと同じ

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:
停止基準
update(function)[ソース]

1回のNEB計算が終了する毎に実行される関数を指定できる

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回行なう)

../../_images/SNEB.png

重要

通常のNEB計算とは異なり,計算後のTS構造を 必ずIRC計算する必要がある ので注意.
引数 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計算を行なう.

../../_images/ANEB.png
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.