【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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时