【LAMMPS学习】八、基础知识(1.7) LAMMPS 与 MDI 库代码耦合

2024-04-11 02:12

本文主要是介绍【LAMMPS学习】八、基础知识(1.7) LAMMPS 与 MDI 库代码耦合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

8. 基础知识

此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。

 8.1.通用基础知识

8.1.1.重新启动模拟 

8.1.2.可视化 LAMMPS 快照

8.1.3.从一个输入脚本运行多个模拟

8.1.4.多副本模拟 

8.1.5. LAMMPS 的库接口

8.1.6. LAMMPS 与其他代码耦合

8.1.7.将LAMMPS 与 MDI 库进行代码耦合 

两个(或多个)代码的客户端/服务器耦合是指一个代码作为“客户端”并将请求消息(数据)发送到一个(或多个)“服务器”代码。服务器用回复消息(数据)来响应每个请求。这使得两个(或更多)代码能够协同工作来执行模拟。在这种情况下,LAMMPS 可以充当客户端或服务器代码。它通过使用由分子科学软件研究所 (MolSSI) 开发的 MolSSI 驱动程序接口 (MDI) 库来实现此目的,并受 MDI 包的支持。

将 LAMMPS 耦合到其他代码部分描述了将代码与 LAMMPS 耦合的替代方法。

客户端/服务器耦合的一些优点是代码可以作为独立的可执行文件运行;它们不需要连接在一起。因此,这两个代码都不需要具有库接口。这也使得在不同数量的处理器上运行这两个代码变得容易。如果为特定类型的模拟定义消息协议(格式和内容),则原则上实现客户端协议的任何代码都可以与实现服务器端协议的任何代码一起使用。两个代码都不需要知道它正在使用什么特定的其他代码。

在 MDI 术语中,客户端代码是“驱动程序”,服务器代码是“引擎”。一个驱动程序代码可以与一个或多个引擎代码的一个或多个实例进行通信。驱动程序和引擎代码可以用任何语言编写:C、C++、Fortran、Python 等。

除了允许驱动程序和引擎作为独立可执行文件运行之外,MDI 还允许引擎成为客户端代码的插件。在这种情况下,服务器代码被编译为共享库,并且服务器的一个(或多个)实例由驱动程序代码实例化。如果驱动程序代码并行运行,它可以将其 MPI 通信器拆分为多个子通信器,并在子通信器上启动每个插件引擎实例。该子通信器内的驱动程序处理器与相应的引擎实例交换消息,并且还可以将MPI消息发送到驱动程序中的其他处理器。驱动程序代码还可以销毁引擎实例并重新实例化它们。 LAMMPS 可以作为独立或插件 MDI 引擎运行。当它作为驱动程序运行时,它可以使用独立或插件 MDI 引擎。

MDI 驱动程序与 MDI 引擎通信的方式是进行 MDI_Send() 和 MDI_Recv() 调用,这在概念上类似于 MPI_Send() 和 MPI_Recv() 调用。每个发送或接收操作都使用字符串来标识命令名称,以及可选的一些数据,这些数据可以是单个值或任何数据类型的值向量。在 MDI 库内部,驱动程序和引擎之间通过 MPI 调用或套接字交换数据。这是用户的运行时选择。

MDI 包提供了 mdi 引擎命令,使 LAMMPS 能够作为 MDI 引擎运行。其文档页面解释了 LAMMPS 引擎识别并可以响应的各种标准和自定义 MDI 命令。

该软件包还提供了一个 mdi 插件命令,使 LAMMPS 能够作为 MDI 驱动程序运行,并将 MDI 引擎作为插件库加载。

该软件包还包括fix mdi/qm 命令,其中 LAMMPS 作为 MDI 驱动程序与作为 MDI 引擎的量子力学代码一起运行。 fix_mdi_qm.cpp 文件的 post_force() 方法显示驱动程序如何向另一个代码发出 MDI 命令。此命令可用于耦合到 MDI 引擎,该引擎可以是独立代码或插件库。

正如 fix mdi/qm 命令文档中所述,它可用于执行从头开始 MD 模拟或能量最小化,或评估一系列独立系统的量子能量和力。 examples/mdi 目录包含所有这些用例的示例输入脚本。

该软件包还有一个fix mdi/qmmm 命令,其中 LAMMPS 作为 MDI 驱动程序与量子力学代码一起作为 MDI 引擎运行,以执行 QM/MM 模拟。 LAMMPS 输入脚本将系统划分为 QM 和 MM(分子力学)原子。如下所述, examples/QUANTUM 目录具有以这种方式耦合到 3 个不同量子代码的示例。

examples/mdi 目录包含 Python 脚本和 LAMMPS 输入脚本,它们使用 LAMMPS 作为 MDI 驱动程序或引擎,或两者。目前,提供了 5 个示例用例:

  • 使用 2 个 LAMMPS 实例运行从头开始 MD (AIMD)。作为驱动程序,LAMMPS 在 NVE 或 NPT 模式下执行时间步进。作为一个引擎,LAMMPS 计算力并且是量子代码的替代品。

  • LAMMPS 作为驱动程序运行 MD 模拟。每 N 步,它都会将当前快照传递给 MDI 引擎,以评估能量、维里力和原子力。作为引擎,LAMMPS 是量子代码的替代品。

  • LAMMPS 循环处理一系列数据文件,并将配置传递给 MDI 引擎,以评估能量、维里力和原子力,从而充当模拟驱动程序。作为引擎,LAMMPS 被用作量子代码的替代品。

  • Python 脚本驱动程序调用一系列不相关的 LAMMPS 计算。计算可以是单点能量/力评估、MD 运行或能量最小化。

  • 使用 Python 驱动程序代码和 2 个 LAMMPS 实例作为引擎运行 AIMD。第一个 LAMMPS 实例执行 MD 时间步进。第二个 LAMMPS 实例充当计算力的替代 QM 代码。

注:在使用 LAMMPS 作为引擎的任何示例中,可以在其位置使用实际的 QM 代码(前提是它支持 MDI),无需修改输入脚本或启动命令,但指定 QM 代码的名称除外。

examples/mdi/Run.sh 文件说明了如何启动驱动程序和引擎代码,以便它们通过 MPI 或套接字使用 MDI 库进行通信,或者使用引擎作为独立代码或插件库进行通信。

截至 2023 年 3 月,这些是通过 LAMMPS 发行版中包含的 Python 包装脚本提供的具有 MDI 支持的量子代码。这些可以与 fix mdi/qm 和 fix mdi/qmmm 命令一起使用来执行整个系统的 QM 计算(例如 AIMD)或 QM/MM 模拟。有关更多详细信息,请参阅 examples/QUANTUM 子目录:

  • LATTE - 仅限 AIMD

  • PySCF - 仅 QM/MM

  • NWChem - AIMD 或 QM/MM

还有至少两种具有直接 MDI 支持的量子代码:Quantum ESPRESSO (QE) 和 INQ。还有一些 QM 代码通过 QCEngine 或 i-PI 获得间接支持。前者意味着它们需要一个支持 MDI 的包装程序 (QCEngine),该程序可以写入/读取文件以将数据传递给量子代码本身。 QCEngine 支持和 i-PI 支持的量子代码列表位于 MDI 网页上。

这些直接和间接支持代码应该可用于完整的系统计算(例如 AIMD)。它们是否支持 QM/MM 模型取决于各个 QM 代码。

b5194c14cbd7479d8b2784b961e33f2c.png

这篇关于【LAMMPS学习】八、基础知识(1.7) LAMMPS 与 MDI 库代码耦合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892803

相关文章

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave