ASE

Atomic Simulation Environment(ASE)は、原子スケールのシミュレーションを構築・操作・実行・可視化・解析するためのツール群およびPythonモジュール群である。GPAW、VASP、Quantum ESPRESSOなど多数の外部電子状態計算コード(calculator)に対して統一的なインターフェースを提供する柔軟なフロントエンドとして機能する。Pythonにより作業手順をスクリプト化できるため、複雑なシミュレーションワークフロー、構造最適化、分子動力学などを効率的に実行可能である。主にデンマーク工科大学(DTU)で開発されており、GNU LGPLライセンスの下で無償に利用できる。

MatDaCs ツールレビュー: ASE(Atomic Simulation Environment)

概要

ASEは、原子シミュレーションの構築・実行・解析の手順を標準化するPythonツールキットである。共通のAtomsオブジェクトとCalculatorインターフェースを定義し、複数の電子状態計算エンジンや力場エンジンを同一のAPIで扱えるようにする。

ASEとは

ASEは、構造の保存・操作に用いるAtomsデータモデルを中心としたオープンソースライブラリである。Calculator抽象化により外部コード(DFT、古典ポテンシャル、MLポテンシャルなど)へのアクセスを統一し、構造最適化、分子動力学、NEBなどの代表的ワークフローも提供する。

主な機能

  • 統一されたcalculatorインターフェース: 多様な計算バックエンドを同一のPython APIで呼び出せる。
  • 構造操作: Atomsを介して構造の作成・変換・解析を行える。
  • 組み込みアルゴリズム: 最適化、MD、NEB、振動解析などの基本機能が含まれる。
  • 相互運用性: 構造生成、DFT実行、MLパイプラインをつなぐ「糊」として機能する。

インストール

ASEはPyPIから配布されている。

pip install ase

最新リリースやインストール方法は公式ドキュメントにまとまっている。

典型的なワークフロー(ASEの基本パターン)

ASEの多くの作業は、以下の流れに沿って構成される。

  • Atomsオブジェクトを作成する(builderやファイルから読み込む)。
  • Calculator(DFT、力場、MLポテンシャル)を関連付ける。
  • 最適化あるいはMDを実行する。
  • エネルギー、力、軌跡などを後処理する。

このパターンはcalculatorが異なっても一貫しており、下流コードを大きく変えずに計算エンジンを差し替えやすい。

例(マテリアルズ・インフォマティクス + 計算材料)

ここでは、材料インフォマティクス的なベースラインと、シミュレーションワークフローの両方を示すために、2つの例をまとめる。

例1 · バルクEOSベースライン(材料インフォマティクス)

目的: 立方金属について構造とエネルギーの関係を作り、状態方程式(EOS)をフィットする。

ASEの使い方:

  • 構造生成: ase.build.bulk('Cu', 'fcc', a=a)で格子定数を掃引してfcc Cuセルを作る。
  • calculator設定: atoms.calc = EMT()で軽量な経験的calculatorを割り当てる。
  • エネルギー/体積の取得: atoms.get_potential_energy()atoms.get_volume()を記録する。
  • EOSフィット: ase.eos.EquationOfState(volumes, energies).fit()で平衡体積と体積弾性率を得る。
  • 後処理: CSV出力やパリティプロットの作成を行う。

最小実装:

from ase.build import bulk
from ase.calculators.emt import EMT
from ase.eos import EquationOfState

a_values = [3.4, 3.45, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8]
energies, volumes = [], []
for a in a_values:
    atoms = bulk('Cu', 'fcc', a=a)
    atoms.calc = EMT()
    energies.append(atoms.get_potential_energy())
    volumes.append(atoms.get_volume())

eos = EquationOfState(volumes, energies)
v0, e0, B = eos.fit()
a0 = (4 * v0) ** (1.0 / 3.0)

結果(Cu fcc, EMT):

  • 最適格子定数: a0 = 3.590 Å
  • 体積弾性率: B = 0.832 eV/ų

例2 · MD + RDF(計算材料)

目的: 短い分子動力学(MD)を実行し、動径分布関数(RDF)で構造を解析する。

ASEの使い方:

  • 構造生成: bulk('Al','fcc', a=4.05) * (4,4,4)で4×4×4スーパーセルを作る。
  • calculator設定: atoms.calc = EMT()で力とエネルギーを与える。
  • 速度初期化: MaxwellBoltzmannDistribution(..., temperature_K=600)を用いる。
  • MD実行: Langevin(...)で200ステップ走らせる。
  • 軌跡と温度: Trajectoryでフレームを保存し、atoms.get_temperature()で温度を記録する。
  • RDF: ase.geometry.rdf.get_rdf(...)でg(r)を計算する。

最小実装:

from ase.build import bulk
from ase.calculators.emt import EMT
from ase.md.langevin import Langevin
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
from ase import units
from ase.io import Trajectory
from ase.geometry.rdf import get_rdf

atoms = bulk('Al', 'fcc', a=4.05) * (4, 4, 4)
atoms.calc = EMT()
MaxwellBoltzmannDistribution(atoms, temperature_K=600)

dyn = Langevin(atoms, 2.0 * units.fs, temperature_K=600, friction=0.02)
traj = Trajectory('ase_md.traj', 'w', atoms)
dyn.attach(lambda: traj.write(atoms), interval=1)
dyn.run(200)

r, g_r = get_rdf(atoms, rmax=4.5, nbins=200)

所感

  • ASEは薄いが強力なオーケストレーション層であり、性能はASE自体よりもcalculatorバックエンドに依存する。
  • ファイルI/OとAtomsモデルにより、MLパイプラインやデータセット構築と統合しやすい。

まとめ

ASEは計算材料ワークフローの基盤的ツールであり、MatDaCsのレビューにおいてMatminerやDScribeと並ぶ重要な補助関係にある。構造生成からシミュレーションまでの流れを整理し、複数バックエンドを想定したスクリプトを保守しやすくし、再現性の高い実験記録に寄与する。

参考