使用lammps的python接口¶
除了通过读取lammps脚本的方式开始lammps任务,也可以通过python调用lammps,从而进行快速的概念验证。LAMMPS 发行版包含一个python目录,其中包含从Python运行LAMMPS所需的Python代码。该模块封装了lammps的c
接口。该模块使得可以从Python或交互式的IPython
执行以下操作:
- 创建一个或多个 LAMMPS 实例
- 调用 LAMMPS 命令或从输入脚本读取它们
- 增量运行 LAMMPS
- 提取 LAMMPS 结果
- 修改内部 LAMMPS 数据结构
LAMMPS 可以与 Python 以三种不同方式协同工作。首先,Python 可以利用其 ctypes 接口与 LAMMPS 的 C API 进行对接,从而使 Python 脚本能够创建 LAMMPS 实例并启动模拟。这种方法被称为使用 LAMMPS 模块来“扩展” Python 的功能。
其次,还提供了 pylammps
类,这是一个用 Python 编写的类,为常见的 LAMMPS 功能提供了更多基于对象的接口,以简化在 Python 中使用 LAMMPS 的过程。这个类还大大减少了需要编写参数化 LAMMPS 脚本的代码量,同时也让变量和计算能够被直接访问。
第三,LAMMPS 可以与 Python 解释器协同工作,这使得 LAMMPS 输入脚本或样式能够直接调用 Python 代码,并在输入脚本和您编写的 Python 函数之间进行信息交互。通过上面提到的 LAMMPS Python 模块,这段 Python 代码还可以回调 LAMMPS 以查询或更改其属性。从 Python 的角度来看,这被称为将 Python "嵌入" 到 LAMMPS 中。在这种模式下,Python 具备执行复杂操作,这是常规 LAMMPS 输入脚本语法无法实现的。
上节教程中,我们介绍了如何编译lammps的动态库。LAMMPS Python模块通过Python的ctypes模块,通过动态加载LAMMPS共享库中的函数,使Python能够调用LAMMPS的C API。由于动态加载的原因,需要确保LAMMPS以“shared”模式编译。同时,启用C++ exception编译LAMMPS利于python 处理lammps的异常。
要使Python能够调用LAMMPS代码,需要以下两个组件:
位于python
文件夹中的LAMMPS Python模块
LAMMPS共享库(liblammps.so
,liblammps.dylib
或liblammps.dll
),编译完成后位于build
或src
文件夹中。
要在Python中使用LAMMPS,以及让LAMMPS能够与Python互操作,需要使用make install-python
安装LAMMPS Python包(lammps)。如果需要通过并行的方式执行lammps,请安装mpi4py
包。
创建lammps实例¶
在接下来过程中,我们将同时介绍lammps和pylammps两级封装。通过lammps调用python则在脚本教程中加以介绍。使用python封装的lammps的好处是可以提供交互式的操作,同时可以直接访问lammps的内部数据结构。此外,相较于直接在终端中运行lammps的可执行文件,python封装的lammps在输入错误指令之后只会抛出错误,而不会终止程序运行。