Matlantisでは、MDシミュレーションの実行や解析にASE(Atomic Simulation Environment)やmatlantis-featuresを用いて実行することができます。本記事では、ASEとmatlantis-featuresの使い分けについて紹介します。
ASEについて
ASEはOSS(オープンソースソフトウェア)ライブラリです。多くの機能が実装されており、構造の最適化、様々なシミュレーションの実行を行うことができます。(参考:ASE の基本的な Modules)
ASEでPFPを用いる場合、以下のようにしてPFPを設定します。
from pfp_api_client import Estimator, ASECalculator # モデルのversionを指定 model_version = "v8.0.0" calc_mode = "PBE" estimator = Estimator(model_version=model_version, calc_mode=calc_mode) calculator = ASECalculator(estimator) # ASEのatomsオブジェクトにPFPを渡す atoms.calc = calculator
matlantis-featuresについて
matlantis-featuesはMatlantis環境で提供しているライブラリです。
ASEはシミュレーションすることを重視して設計されていますが、 matlantis-featuresは物性値を求めることを重視して設計されています。
そのため、基本的なMDシミュレーションを行い、物性値を求める場合は、matlantis-featuresをお使いいただき、複雑なシミュレーションを実行したい場合はASEをお使いいただくことを推奨しております。
matlantis-featuresの詳細な機能に関しては、matlantis-features reference、ASEとの他の違いについては、Matlantis-guide bookをご確認ください。
matlantis-featuresとASEの大きく違う点として、PFPの設定方法あります。
matlantis-featuresでは、以下のようにestimator_fnを設定して関数の引数として与えます。
from matlantis_features.utils.calculators import pfp_estimator_fn from pfp_api_client.pfp.estimator import EstimatorCalcMode # モデルのversionを指定 model_version = "v8.0.0" calc_mode = "PBE" estimator_fn = pfp_estimator_fn(model_version=model_version, calc_mode=calc_mode)
例えば、Example launcherにある diffusivity では以下のようにしています。
md = MDFeature(
integrator=integrator,
n_run=20000,
traj_file_name="md_diffusion.traj",
traj_freq=100,
show_progress_bar=True,
show_logger=True,
logger_interval=1000,
estimator_fn=estimator_fn,
)
matlantis-features を用いたMD計算の方法などの説明は、Example laucher > Matlantis Examples > MD Advanced usage にもありますのでご参照ください。 matlantis-features タグがついたものは、すべて matlantis-features を使っています。estimator_fnの詳細な使い方に関しては、こちらをご覧ください。
Matlantis AtomsとASEのAtomsの変換
MatlantisAtomsはASEのatomsと同様にファイルから作成できるだけでなく、Smiles等からも作成することもできます。作成方法は以下の通りです。
from matlantis_features.atoms import MatlantisAtoms
atoms_from_file = MatlantisAtoms.from_file("Strucuture.xyz")
atoms_from_smiles = MatlantisAtoms.from_smiles("CCO")MatlantisAtomsではなく、ASEのAtomsを用いた場合、逆にASEのAtomsではなくMatlantisAtomsを用いたい場合は以下のように相互変換することが可能です。
from ase import Atoms
from matlantis_features.atoms import MatlantisAtoms
# ASEで作ったatomsオブジェクト
atoms = Atoms('H2', positions=[[0, 0, 0], [0, 0, 0.74]])
# ASEのAtomsからMatlantisAtomsへの変換
matlantis_atoms = MatlantisAtoms.from_ase_atoms(atoms)
# MatlantisAtomsからASEAtomsへの変換
ase_atoms = matlantis_atoms.ase_atoms
ASEのTrajectoryファイルをmatlantis-featuresを用いて解析したい場合
matlantis-featuresのpost_featuresなどの機能はmatlantis-featuresを用いて、実行したMDのtrajectoryを用いて解析することを前提としています。しかし、ASEで複雑なMDシミュレーションを実行し、そのMDのtrajectoryをmatlantis-featuresで解析したいことが出てくるかもしれません。
ASEのMDのtrajectoryにはtime情報がないため、そのままでは解析できません。
その場合、以下のコードを実行して、time情報を追加することで、matlantis-featuresで解析することができるようになります。
from ase.io import write
traj = Trajectory("output/md.traj") # 解析したいtrajファイル
traj2 = []
dt = 1 # fs, 実行したMDのtime step
interval = 100 # 実行したMDのinterval
i = 0
for atoms in traj:
atoms.info["step"] = i
atoms.info["time"] = i * dt
traj2.append(atoms)
i += interval
write("output/md_r.traj",traj2, format="traj")