1 个稳定版本
7.4.1 | 2020 年 8 月 20 日 |
---|
#102 在 模拟
11MB
177K SLoC
包含(《MSI 安装程序`, 560KB) Lepton 用户手册.doc
OpenMM-sys
这个包提供了 bindgen
生成的 OpenMM C API 包装器的声明,可选地从其源代码构建静态/动态库。构建步骤高度可配置,通过 Cargo 特性和/或环境变量向库消费者公开最重要的 OpenMM CMake 选项。
OpenMM 是一个用于分子模拟的工具包。它可以作为一个独立的应用程序来运行模拟,也可以作为从您的代码中调用的库。它通过自定义力场和积分器提供了极端的灵活性、开放性和高性能(尤其是在最新的 GPU 上),使其在模拟代码中独一无二。
要求
此包需要以下程序安装在您的系统上
- C / C++ 编译器(平台默认设置最佳:Windows 上的 MSVC,Linux 上的 GCC 和 macOS 上的 Clang)
- CMake
安装
最简单的安装方法是将以下内容添加到 Cargo.toml
[dependencies]
openmm-sys = "7.4"
这就完成了!安装完全自包含。然而,构建 OpenMM 库可能需要一些时间 - 在作者的中期 2012 MacBook Pro 上需要 3-5 分钟。要查看构建过程中的 CMake 构建步骤,请在使用 Cargo 构建时使用 -vv
(非常详细)
cargo build -vv
好消息是您可以将安装文件夹(编译期间打印)复制/移动到其他位置,并将 OPENMM_HOME
环境变量设置为指向其位置。以下是一个示例终端输出
$> cargo build -vv
<Elided CMake output>
warning: [OpenMM-sys] Dynamically linking against the OpenMM library.
warning: [OpenMM-sys] The OpenMM library was built and installed in `/Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out`. You can copy / move that directory somewhere else and set the `OPENMM_HOME` environment variable to point to its path. This way, the OpenMM library will no longer require building.
从显示的路径复制文件并设置 OPENMM_HOME
$> mkdir ~/openmm
$> cp -r /Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out ~/openmm
$> export OPENMM_HOME=/Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out
未来的 Rust 包将使用 OPENMM_HOME
中的 OpenMM 安装,而不是编译其源代码 - 大大提高编译时间!
由 OPENMM_HOME
指向的目录树应类似于以下内容
$OPENMM_HOME
├── bin
├── build
├── docs
├── examples
├── include
├── lib
│ ├── libOpenMM.dylib
│ ├── libOpenMMAmoeba.dylib
│ ├── libOpenMMAmoeba_static.a
│ ├── libOpenMMDrude.dylib
│ ├── libOpenMMDrude_static.a
│ ├── libOpenMMRPMD.dylib
│ ├── libOpenMMRPMD_static.a
│ ├── libOpenMM_static.a
│ └── plugins
└── licenses
实际的 OpenMM 库位于 OPENMM_HOME/lib
。
基于 Conda 的替代安装
OpenMM 还为不同系统提供了预构建的二进制文件,您可以使用 conda
(与推荐的 Anaconda Python 发行版一起打包)轻松安装。
$> conda install -c omnia -c conda-forge openmm
这种方法的缺点是,您现在需要找到 OpenMM 库的安装位置,以便设置 OPENMM_HOME
。例如,在作者的机器上,运行 which python
产生
$> which python
/usr/local/anaconda3/envs/openmm_env/bin/python
从该路径中删除最后两个组件应该得到一个包含 lib
和所需 OpenMM 库的位置
export OPENMM_HOME=/usr/local/anaconda3/envs/openmm_env/
基本配置
默认情况下,OpenMM 的 CMake 安装程序将检查哪些平台可用,并为这些平台构建所有插件。例如,如果您的系统上可用 CUDA 并且将构建 AMOEBA 插件(在 CMake 中设置为 OPENMM_BUILD_AMOEBA_PLUGIN = "ON"
),则默认包含 CUDA 实现(OPENMM_BUILD_AMOEBA_CUDA_LIB = "ON"
)。下面列出了可以从该软件包中选择的最重要功能。
除了设置 OPENMM_HOME
环境变量之外,还有一些其他设置,在 Cargo.toml
中很容易配置。
[dependencies.openmm-sys]
features = ["static-lib", "cuda"]
在这种情况下,OpenMM 作为 静态库 构建和使用,包括 CUDA 平台。以下是可用功能的完整列表
-
库类型
shared-lib
- 构建共享(动态)OpenMM 库。static-lib
- 构建静态 OpenMM 库并将它们链接在一起。如果同时选中shared_lib
和static_lib
,则将同时构建它们,但您的 crate 将链接到静态库。
-
配置 "捆绑包"
no-default
- 关闭所有 OpenMM CMake 选项。您可以使用此选项来选择要编译的特定功能。minimal
- 不构建任何插件、示例、API 文档或 Python 包装器。
-
平台
cpu
- 构建优化的 CPU 平台。opencl
- 构建 OpenMMOpenCL 库。cuda
- 为 Nvidia GPU 构建 OpenMMCuda 库。
-
插件
amoeba
- 构建 Amoeba 插件。drude
- 构建 Drude 插件。pme
- 构建 PME 插件。rpmd
- 构建 RPMD 插件。
-
杂项
examples
- 构建 OpenMM 的示例。generate-api-docs
- 生成基于 Doxygen 的文档。
-
包装器
c-and-fortran-wrappers
- 构建 C 和 Fortran 包装器。如果您想使用此 crate,则这是必需的,因为它使用 C API。
注意:由于 OpenMM 源代码打包超出了 crates.io 每个 crate 10 MB 的限制,因此我们无法构建此 crate 的 Python 包装器。如果您需要 Python 包装器,请使用其他安装路径(conda、从源代码编译等)。
高级配置
可以使用一些环境变量进一步配置构建步骤。
OPENMM_CMAKE_OPTIONS
- 这个变量可以包含 空格分隔 的key=value
对,这些对将会通过-D
标志传递给CMake
(例如,OPENMM_CMAKE_OPTIONS
=OPENMM_BUILD_CUDA_LIB=ON PYTHON_EXECUTABLE=usr/bin/python
)。你可以运行cmake -LA <openmm_source_dir>
来查看所有可用的选项。CXXSTDLIB
- 有时需要显式地给出 C++ 标准库共享库的位置给链接器。由于我无法解释的原因,名称在不同的编译器之间有所不同(例如,Clang 中的 "libc++" 和 GCC 中的 "libstdc++")。将此环境变量设置以覆盖默认的平台相关选项。
最后,你可以使用 CMake 自己编译 OpenMM。有关更多信息(以及可能比我更好的解释),请参阅 OpenMM 作者在其 网站上 提供的信息 - 请参阅“从源代码编译 OpenMM”部分。
示例
在 examples/
文件夹中查看 OpenMM 的 Rust 的一些底层使用。请注意,它使用 OpenMM 的 C 包装器,因此所有函数调用都必须是 unsafe
- 请参阅 openmm-rust
crate 以获得安全、高级的 API。
版本控制
此 crate 版本的最后两位数字对应于 OpenMM
的最新 次要版本,而最后一位数字对应于此 crate 的补丁。例如,openmm-sys
版本 7.4.0 对应于 OpenMM
7.4.2(编写时的最新版本)。
如果你对拥有不同版本的 Rust 包装器感兴趣,请随时通过 a.l.nicusan <at> bham.ac.uk 联系我。
bindgen 使用方法
用于生成 OpenMM C 包装器的 Rust 绑定的 shell 脚本包含在 src/bindings
中,包括包装器本身。
许可证
此 crate 是 MIT 许可。有关 OpenMM 的许可证,请参阅 openmm/docs-source/licenses
目录。
致谢
所有荣誉归 Peter Eastman 博士、OpenMM 的作者、斯坦福 Pande 实验室和斯坦福大学。如果你在您的工作中使用了 OpenMM,请引用以下出版物
P. Eastman, J. Swails, J. D. Chodera, R. T. McGibbon, Y. Zhao, K. A. Beauchamp, L.-P. Wang, A. C. Simmonett, M. P. Harrigan, C. D. Stern, R. P. Wiewiora, B. R. Brooks, and V. S. Pande. “OpenMM 7: Rapid development of high performance algorithms for molecular dynamics.” PLOS Comp. Biol. 13(7): e1005659. (2017)