相互作用粒子的模拟框架

atooms的Python项目详细描述


原子

pypiversionlicenseDOI

atooms是一个用于模拟相互作用粒子的Python框架它使得使用表达性语言开发仿真和分析工具变得容易,同时又不牺牲效率。为了实现这一点,atooms依赖于用c、cuda或fortran编写的后端。

快速启动

atooms的目标是为粒子模拟的基本对象(如molecular dynamicsMonte 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/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX 11可编辑组合框引发IndexOutOfBoundsException   java选择数组中的数组元素   java我从来没有找到创建2D ArrayList的正确方法   java JPA查找orderById的顶部数据,并按字符串过滤Id   使用java在ejabberd中进行xmpp外部身份验证   从ajax调用向java传递点运算符   java如何使用ReadWriteLock   使用Spring控制器和jQueryAjax的java重定向   java使JFrame中的JPanel可滚动   java如何用多个。jar库?   java EditText在RecyclerView中失去了对滚动的关注   java为什么我们必须扩展Servlet或GenericServlet或HttpServlet来创建Servlet应用程序?如果不扩展,我们可以开发Servlet应用程序吗?   使用递归java查找数组中的最大值   具有不同字段数的html表单的java域传输对象   java文本视图扩展;不支持操作异常   java如何使用iText的HTMLWorker类将多语言HTML字符串呈现为PDF