【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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss