相互作用粒子的模拟框架
atooms的Python项目详细描述
原子
atooms是一个用于模拟相互作用粒子的Python框架它使得使用表达性语言开发仿真和分析工具变得容易,同时又不牺牲效率。为了实现这一点,atooms依赖于用c、cuda或fortran编写的后端。
快速启动
atooms的目标是为粒子模拟的基本对象(如molecular dynamics或Monte Carlo模拟)提供一个连贯的接口。 仿真数据通常存储在轨迹文件中,atooms使其易于分析、操作和转换。
在这个简单的例子中,我们读取由多个帧组成的xyz format中的轨迹文件在模拟过程中,每一帧都保持系统在给定时刻的状态。访问轨迹文件中粒子的坐标如下:
fromatooms.trajectoryimportTrajectorywithTrajectory('input.xyz')astrajectory:forsystemintrajectory:print('The position of particle 0 is',system.particle[0].position)
注意轨迹支持迭代和索引,就像列表一样。
在这里,我们选择轨迹的最后一帧,将系统密度更改为unity,并将此新配置写入适合RUMD模拟包的轨迹格式:
withTrajectory('input.xyz')astrajectory:system=trajectory[-1]system.density=1.0print('The new density is',len(system.particle)/system.cell.volume)fromatooms.trajectoryimportTrajectoryRUMDwithTrajectoryRUMD('rescaled.xyz.gz','w')astrajectory:trajectory.write(system,step=0)
我们现在可以使用Lennard-Jones势运行1000个分子动力学步骤:
fromatooms.backends.rumdimportRUMDfromatooms.simulationimportSimulationbackend=RUMD('rescaled.xyz.gz',forcefield_file='lj_rumd.ff',output_path='/tmp/outdir',integrator='nve')sim=Simulation(backend)sim.run(1000)print('Final temperature and density',sim.system.temperature,sim.system.density)
forcefield文件lj_rumd.ff
(在data/
中可用)定义了交互势
文件
请参阅tutorial了解atooms对象的逐步介绍,并参阅public API documentation了解详细信息。
安装
从python包索引
pip install atooms
从代码库中
git clone https://gitlab.info-ufr.univ-montp2.fr/atooms/atooms.git
cd atooms
make install
模拟后端
atooms有一个通用的模拟接口,可以抽象出基于粒子模拟的大多数常见部分。实际的模拟代码由一个模拟后端包装,该后端公开一个最小但一致的接口这使得我们能够开发更复杂的仿真框架(例如parallel tempering),这些框架本质上与底层的仿真代码是分离的。
轨迹转换
atooms提供了一个命令行工具,用于在各种轨迹格式之间进行转换。下面的命令将把RUMD生成的轨迹文件转换为更简单的xyz格式
$ trj.py convert -i rumd -o xyz trajectory.xyz.gz output.xyz
如果不指定输出路径,轨迹将写入标准输出。这对于快速检查复杂的轨迹格式或导入sed/awk非常有用
trj.py
提供了微调输出文件格式的方法。键入trj.py --help
以获取选项列表和支持的轨迹格式。
自定义轨迹格式
通过重新初始化现有的轨迹类,很容易添加新的轨迹格式。只需创建一个名为atooms_plugins
然后在那里添加你的轨迹模块。它们将自动
可用于所有使用atooms的客户端代码假设您在
atooms_plugins/test.py
(最后一个路径是相对于当前路径的
目录)。现在可以将现有的XYZ轨迹转换为自定义
格式:
$ trj.py convert output.xyz output.abc
记住在atooms_plugins
的根目录中添加一个空的__init__.py
文件。
实际上,atooms_plugins
包可以放在PYTHONPATH
中的任何位置
附加套餐
atooms是可组合的:很容易添加新的功能,并且只添加您真正需要的功能。 其他软件包可从atooms main repository获得。 这些包将安装在atooms命名空间中,以防止名称冲突
如果要将自己的包添加到atooms命名空间中,请按此方式对其进行构造
atooms/your_package atooms/your_package/__init__.py
其中__init__.py
包含
frompkgutilimportextend_path__path__=extend_path(__path__,__name__)
将包根文件夹添加到$pythonpath。现在,您可以将包导入为
importatooms.your_package
作者
丹尼尔科斯洛维奇:http://www.coulomb.univ-montp2.fr/perso/daniele.coslovich/