ASE指北

ASE指北以及个人常用功能简介

简介

ASE ([Atomic Simulation Environment][https://wiki.fysik.dtu.dk/ase/index.html]) ([源码][https://gitlab.com/ase/ase]): 一种用Python编程语言编写的原子仿真环境,旨在设置,操纵和分析原子模拟。

ASE的设计目标:

    • 易于使用
    • 灵活
    • 可定制
    • Pythonic
    • 开源

ASE是一个强大的引擎,可以同时提供计算接口,数据分析以及可视化的功能。

此外,ASE可以绑定多种计算器(VASP,CP2K等等),也可以绑定自己训练的神经网络模型。这里我常用的是VASP,可以根据个人服务器配置阅读文档。

此外,ase支持多种格式的文件读写

ASE NEB简介

直接上代码

效果

ASE 构建邻近原子列表

用途:

  • 用于提取特征等等
  • 构建邻接矩阵
  • 其他用途

不同类型的邻接矩阵

ASE DB简介

支持数据库类型

    • JSON: 简单易读
    • SQLite3: 不需要配置, server-less, .db
    • PostgreSQL: server based

默认是用的SQLite

ASE DB 还支持命令行,并提供了一些简单的query查询功能,可以做初步的数据搜索查询。

根据化学式筛选:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 支持数据库常见的增删改查功能
from ase.db import connect
with connect('jwzhang.db') as db:
db.write(traj, data={'info': 'jwzhang'})
with connect('jwzhang.db') as db:
count = db.count()
for idx in range(1, count+1): # ase db 的ID从1开始
db.update(idx, foo='bar')
with connect('jwzhang.db') as db:
for idx in range(1, count+1):
del db.get(idx) # or db.delete(idx)

ase自带了一些keys, 可用于检索查询数据。

ASE 可视化

1
2
3
ase gui neb.traj
ase gui neb.traj@::2 -o demo.gif # 查看部分结构,步长为2
ase gui neb.traj@::1 -o demo.gif # 将traj结构输出成gif

直接打开traj文件会显示所有的结构,以及不同结构的能量曲线。

自定义ASE计算器

自己可以写一个计算器类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from ase.calculators.calculator import Calculator # Base-Class for all calculators
'''
model: neural network model, output atom's energy and forces
'''
class MyCalculator(Calculator):
def __init__(self, energy=None, forces=None, **kwargs):
Calculator.__init__(self, model, **kwargs)
self.model_energy = energy
self.model_forces = forces
self.model = model
def calculate(self, atoms=None, properties=['energy']):
Calculator.calculate(self, atoms) # copy atoms
model_results = self.model(atoms)
results = {}
if self.model_energy is not None:
results['energy'] = model_results['energy']
if self.model_forces is not None:
results['forces'] = model_results['forces']
self.results = results

与PyMatgen交互

ase traj 和 pymatgen structure之间转化

1
2
3
4
5
6
from ase.io import read
from pymatgen.io.ase import AseAtomsAdaptor
adaptor = AseAtomsAdaptor()
atoms = read('jwzhang.traj')
structure = adaptor.get_structure(atoms)

参考

人艰不拆,生活不易