クイックスタート

構造最適化

  • matlanticgrrm

from matlanticgrrm.atomslist import set_calculator, pfp_calculator
from matlanticgrrm.optimize import ListLBFGS
from matlanticgrrm.grrmdata import log2atoms

atoms_list = log2atoms("*_EQ_list.log","*com","POSCAR") # GRRMデータのインポート
set_calculator(atoms_list, pfp_calculator) # calculatorの取り付け
opt = ListLBFGS(atoms_list,"EQ_list",logfolder="Log",errorlog='error.log') # AtomsリストをOptimizerに渡す
opt.run(fmax=0.001) # 計算実行
# --> Log/0.log, Log/1.log, Log/2.log ... にログが書き込まれる
# --> EQ_list.traj, EQ_list.pickle, error.logが作成される
  • ASEとの比較

from matlanticgrrm.atomslist import pfp_calculator
from ase.optimize import LBFGS
from ase.io import read,write

atoms = read("*.cif") # 何らかのデータをインポート
atoms.calc = pfp_calculator() # calculatorの取り付け
opt = LBFGS(atoms, logfile="EQ.log") # AtomsリストをOptimizerに渡す
opt.run(fmax=0.001) # 計算実行
# -->  EQ.logにログが書き込まれる

write("EQ.traj",atoms)
# --> EQ.trajが作成される

NEB

from matlanticgrrm.atomslist import set_calculator, pfp_calculator
from matlanticgrrm.optimize import ListFIRE
from matlanticgrrm.neb import ListNEB
from matlanticgrrm.grrmdata import get_connections
from matlanticgrrm.io import lread

eq_list = lread("*traj","*pickle") # 構造最適化で作成されたtraj,pickleファイル
connections = get_connections("*_TS_list.log")

imagess = make_images(eq_list,connections,8) # imagesのリスト(Atomsの2Dリスト)を作成

for images in imagess:
    """imagessにcalculatorを取り付ける(時間がかかる)"""
    if images:
        set_calculator(images,pfp_calculator)

neb_list = ListNEB(imagess,climb=True, parallel=False) # imagesをListNEBに渡す

opt = ListFIRE(neb_list, "NEB_list", logfolder="Log", errorlog="error.log")
opt.run(fmax=0.05) # 計算実行
# --> Log/0.log, Log/1.log, Log/2.log ... にログが書き込まれる
# --> NEB_list.traj, NEB_list.pickle, error.logが作成される

""""結果の表示(エネルギーダイアグラム), TS構造を保存""""
neb_graphs(imagess, html="neb_graph.html",traj="neb_ts.traj")
# --> neb_graph.html, neb_ts.trajが作成される
neb_graphsでエネルギーダイアグラム図はneb_graph.htmlに保存される.
自動でTSの位置を取得しneb_ts.trajに保存される.

VIB

コードのダウンロード (拡張子をipynbに変えて使用する)

from matlanticgrrm.visualize import view, view_images, view_with_index
from matlanticgrrm.atomslist import pfp_calculator,set_calculator
from matlanticgrrm.vibrations import ListVibrations, vib_graphs
from matlanticgrrm.io import lread, lwrite
from ase.io import read,iread,write

neb_ts = lread("*.traj") # TS構造をインポート

set_calculator(neb_ts,pfp_calculator)

view_with_index(neb_ts[0])
indices = [_, _, _, _] # Vibration計算で動かす原子のindex番号を控える

vib = ListVibrations(neb_ts,errorlog="VIB.log",indices=indices)

vib.run()

vib.summary(html="vib_table.html");

# n_list=Noneの時は虚振動の trajファイルを作成する
# 特定のモードのtrajを作成したい場合index番号を入力
vib.write_mode(n_list=None)