【调剂】北京石油化工学院2024年16个专业接受调剂
查看: 7419  |  回复: 53
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 luyaobao 的 795 个金币 ,回帖就立即获得 5 个金币,每人有 1 次机会

luyaobao

木虫 (著名写手)


[交流] 分子动力学模拟及其LAMMPS实现

(课程尚未完成,持续更新中)(三万字超长文预警)

前言

1. 分子动力学基础

1.1 原理.

1.2 势能

1.3 温度、压强

2. linux系统常见命令和操作

3. lammps介绍和并行版安装(linux版)

4. lammps模拟基本流程

5. 建模和后处理软件概述

6. 出错解决思路

7. 专题一:纳米流动(部分内容)

8. 专题二:纳米流体(待更新)

9. 专题三:润湿(部分内容)

9.1建模

10. 专题四:拉伸、压缩、弯曲、扭转、剪切(待更新)

11. 专题五:传热(待更新)

12. 专题六:粘度和扩散(待更新)

13. 专题八:摩擦和磨损(待更新)

14. 专题九:反应分子动力学reaxff(待更新)

15. 专题十:耗散粒子动力学(待更新)

16. 专题十一:自由能(待更新)

17. 专题十二:原子沉积和镀膜(待更新)

前言

分子动力学模拟在科研中的使用越来越广泛。lammps作为分子动力学中一款优秀的开源软件,使用率非常高。大量高水平的论文都是采用lammps完成的,其中不乏nature,science,prl,jacs,nature communication,pnas等顶刊。但是对于零基础的同学,特别是本科生和低年级硕士生,lammps的学习曲线还是比较陡峭的。很多同学都是课题组内第一个使用分子动力学模拟和lammps,其困难可想而知。如果能有一个针对lammps的系列教程对学生掌握这个工具会大有裨益。本教程就是希望能够在学生使用lammps初期降低学习难度,少走弯路,快速上手,将自己的精力集中在具体的科学问题上,而不是软件的学习上。本教程假设你之前对linux,分子动力学和lammps一无所知,从头开始讲,因此比较浅显,并未就某些问题进行深入介绍(其实是深入的我也不会,哈哈)。

我将分子动力学研究科学问题分为三个部分:软件使用,分子动力学理论,科学问题发现。如果把分子动力学比作武林,那么软件的使用仅仅是招式,分子动力学理论则是内功心法,而科学问题则是对手。要想成为一名武林高手,在江湖上闯出一番事业,既要熟练掌握各种招式,也要有很深的内功修为,同时也要有一些值得尊敬的对手。只有用深厚的内功催动精妙的招式,才能打败可敬的对手,受到江湖传颂。本教程只是lammps的使用教程,它会教给你使用lammps的一招一式,但要将招式练得熟练,还需要自己在科研中积累大量模拟经验。而内功心法的修炼则需要长时间的学习经典教材和文献。好的对手必须要广泛阅读文献,与导师深入沟通确定具有很好学术价值的科学问题。那么有没有一种方法像武侠小说中的主角,掉下悬崖然后打通任督二脉,迅速成为高手。答案是当然是没有的。但是作为物理学分支,我推荐阅读《费曼物理讲义》第一卷,可以起到类似的作用。总之,科研没有坦途,静心学习,努力思考必有所成。

“lammps即large-scale atomic/molecular massively parallel simulator,可以翻译为大规模原子分子并行模拟器,主要用于分子动力学相关的一些计算和模拟工作,一般来讲,分子动力学所涉及到的领域,lammps代码也都涉及到了。lammps由美国sandia国家实验室开发,以gpl license发布,即开放源代码且可以免费获取使用,这意味着使用者可以根据自己的需要自行修改源代码。lammps可以支持包括气态,液态或者固态相形态下、各种系综下、百万级的原子分子体系,并提供支持多种势函数。且lammps有良好的并行扩展性。”——摘自百度百科。lammps的官网是https://www.lammps.org/。在lammps的官网中有大量关于软件的信息,可以好好探索一番。有几个地方可以经常看看。第一是publication部分https://www.lammps.org/papers.html,记录引用lammps的所有文章,多看看对自己的研究有所启发。maillist部分https://www.lammps.org/mail.html是lammps的支持社区。当你有问题的时候可以检索maillist,你遇到的问题别人也遇到过。所以查看开发者对这些问题的解答。

如何学习lammps?你可以把本教程当做一个开始。lammps的手册中详细介绍了软件的各个方面。一定要好好阅读手册。手册的前四章要认真阅读。经常使用的命令也要仔细阅读。当你要实现某种功能的时候就把手册打开看看命令。仔细阅读学习lammps官方手册是成为lammps高手的必经之路,阅读学习一本分子动力学模拟经典教材是增加修为的关键。希望本教程能教会你lammps的基本招式。祝你好运!

lammps官网推荐了几本分子动力学模拟教材:

books about molecular dynamics generally or lammps specifically

note that these are not endorsements of particular books. we simply want to make the lammps user community aware of them as potentially useful resources.

general md books:

allen & tildesley - computer simulation of liquids
frenkel & smit - understanding molecular simulation: from algorithms to application
griebel, knapek, zumbusch - numerical simulation in molecular dynamics: numerics, algorithms, parallelization, applications
tuckerman - statistical mechanics: theory and molecular simulation
books about lammps specifically:

mubin & li - extending and modifying lammps (see below)

1. 分子动力学基础

1.1 原理

本节只是简要介绍分子动力学的原理,如果要深入学习相关内容,可阅读前言中推荐的教材。

分子动力学的基础是牛顿力学,也即经典力学。经典力学中有三个主要内容:质点、力和运动。牛顿第二定律是经典力学的核心,下面两个质点的方程大家一定不陌生。


我们把他写成离散的形式,也称为差分形式:




如果delta_t足够小那么离散形式可以以足够的精度近似连续形式。首先我们假设质点的受力之依赖于它的位置,也就是说只是位置的函数。事实上这是一个很普遍成立的假设,比如重力或者万有引力,在质量确定的情况下只依赖于两个物体之间的相对距离。在比如静电力,在电荷确定的情况下只依赖于两个带电质点的相对距离。有了这个假设,我们考虑一个一维的简单情形。有两个质点放置在光滑的地面上,如下图。


在t=0时刻,质量为m_a位于x_0^a的质点a以速度v_0^a朝质量为m_b位于x_0^b且静止(即v_0^b=0)的质点b运动。两个质点之间的受力f_ab只是质点a与质点b之间距离x_ab的函数,也即只要知道x_ab,我们就能计算出来f_ab。然后,我们要问的问题是在后续的时间中两个质点是怎么运动的?我们这时设定一个很小的delta_t。我们知道初始速度那么有



这样我们就知道了t_0+delta_t时刻,质点a和b的位置和速度。由新的位置又可以得到新的受力。重复上述公式就可以知道后续所有时刻两个质点的位置和速度,也就是知道两个质点的运动细节。总结一下我们结算所有时刻质点的运动细节要提前知道哪些信息。质点的质量、初始速度、初始位置和依赖于位置的受力函数。如果我们再选一个足够小的delta_t,那么我们就能够准确的得到质点a和b的所有运动信息。

我们把情形扩展到二维。在一个光滑的台球桌面上,白球在初始时刻以确定的速度撞向其他摆好的台球。如果我们把台球都看成质点,又知道所有台球的质量、初始速度、初始位置和依赖于位置的受力函数,我们就能预测击球后所有时刻台球的运动轨迹,从而判断台球是否能够进袋。我们再把情形扩展到三维。考虑宇宙中只存在太阳和太阳系的八大行星。我们是否能够通过万有引力去预测所有行星的轨迹。答案当然是可以的。只是此时我们知道某个行星除了来自太阳的引力,还有来自其他行星的应力。我们在计算某个行星的受力时,要考虑该行星与其余所有天体之间的受力。这就是经典力学能够告诉我们的东西。

在这个概念上,拉普拉斯提出了一个想法。如果存在一只神奇的动物,它能基于经典力学解算出世界上所有东西的位置和速度并能加以分析,那么世界上发生的一切及其背后的原因都一览无余的呈现在它眼前。这就是经典力学的世界观和认识论。分子动力学的理论就是基于这样的认识方法。像上面的例子一样,分子动力学的目的就是为了求解任意时刻所有组成物体原子的位置和速度,从而认识物质世界。


为什么这个方法具有很大的威力呢?这是多年科学实践告诉我们的。事实上著名物理学家理查德·费曼对这个问题有着精彩的描述。理查德·费曼在其传世物理教材《费曼物理讲义》中提出这样一个有意思的问题:“假如由于某种大灾难,所有的科学知识都丢失了,只有一句话传给下一代,那么怎样才能用最少的词汇来表达最多的信息呢?”费曼认为这句话应该是原子假设:“所有物体都是用原子构成的——这些原子是一些小小的粒子,它们一直不停地运动着,当彼此略微离开地时互相吸引,当彼此过于靠近时又相互排斥。”这句话之所以重要是因为基于这个原子假设我们能解释巨量自然界中的现象。比如,气体压强来自于大量气体分子对壁面撞击;水蒸发吸热来自于水分子从体相水中逃逸至外界环境而带走能量所致。。。。。更多详细例子可阅读《费曼物理讲义》第一卷的相关内容。

费曼把原子假设放在如此高度的原因总结起来就是——掌握组成物体内部原子的行为就可解释和理解物体的性质和行为。只是这个时候我们关注的是大量原子在一起表现出来的整体特性,而不是关注具体某个原子的运动细节。事实上,实践告诉我们大量原子在一起就会表现出某些特定的确定的性质和行为,也就我们实际生活生产中能直接测量和感受的性质和行为。到这里我们可以看到分子动力学实际上就是一只拉普拉斯兽。分子动力学的基本任务就是获取物体在任意时刻组成原子的所有位置和动量然后利用统计力学知识理解物体的性质和行为。如果这样还不能说服你分子动力学的实力。就讲一个事实——2013年诺贝尔化学奖颁给了创立跨尺度分子模拟的三位科学家。通过分子动力学模拟我们可以深刻理解我们所研究的对象。目前各种硬件超强的计算能力为分子动力学创建了一个大有可为的时代!!

分子动力学的基本任务就是获得研究对象不同时刻的位置和动量,然后基于统计力学知识获得想要的物理量,解释对象的性质和行为。因此,分子动力学的模拟流程超级简单。第一步,设置研究对象组成原子或者粒子(下面统一称为粒子)初始位置和速度;第二步,基于粒子的位置计算每个粒子受到的合力,并基于牛二定律计算粒子的加速度;第三步,基于加速度计算粒子下一时刻的速度;第四步,基于下一时刻的速度计算下一时刻的位置;第五步,循环第二步到第四步的过程,得到一系列时刻粒子的位置和速度;第六步,基于位置和速度信息得到描述对象性质和行为的物理量。


分子动力学的基本原理就是这么简单,正因为简单所以有效。需要指出的是在实际编程求解的过程考虑到计算精度等原因上述过程在某些细节上会略有改动。但是,基本上你可以认为这就是分子动力学的原理和流程。上述过程由lammps帮你实现,你需要做的就是设置研究对象的基本信息,告诉给lammps,然后开始模拟。

1.2 势能

前面我们知道要获得所有原子的轨迹,需要知道原子的质量,初始位置,初始速度和依赖于位置的受力函数。原子的质量,初始速度和初始位置都是我们人为设定的值。不同研究对象的原子质量,初始速度和位置很容易获得。不同研究对象更本质的差别在于依赖于位置的受力函数,这个函数又被称为相互作用。相互作用的形式和参数决定了研究对象的性质和行为。在分子动力学中,这个相互作用通过原子之间的势能进行描述,因此又称为势能函数或势函数。而受力是势能对位置的负梯度,因为实践表明原子之间的受力都是保守力。举个例子,重力和重力势能。取竖直向上为正方向,则重力表达式为


重力势能的表达式是


即重力势能对位置的负梯度就是重力


为什么要用势能,而不是受力来表达相互作用呢?这是因为在绝大多数模拟中采用的是笛卡尔坐标。势能是标量,而力是矢量,数学上处理起来更容易。在计算受力的时候,直接用势能对两个原子之间的相对位置进行求导,然后将这个力乘以方向余弦就能得到三个方向上的受力。举例说明,在三维空中有两个原子


两个原子之间的距离


那么原子对原子的受力就为


这样不管是程序的简洁性还是计算效率都会很好。所以要开展分子动力学计算,首先必须确定所有原子之间的势能函数,即势能关于两个原子之间相对位置的函数。确定函数分为两个部分:函数表达式和表达式中的常数值。对于一个对象,描述其相互作用的势能函数表达式和表达式中常数值的集合称为该对象的力场。通常一种力场可以用来描述一类对象。分子动力学模拟一般研究的对象可以分为:惰性气体,分子物质,金属晶体和非金属晶体。分子动力学模拟绝大多数情况用来研究固体和液体,即凝聚态。对于气体分子动力学模拟效率太低,有更好的办法进行研究。简单液体原子之间相互作用只具有范德瓦尔斯作用的物质。描述范德瓦尔斯作用最常用的表达式是lennard-jones12/6势能。通常用lj12/6描述的物质也称为简单液体。





上图是lj/126势函数的图像。对于该势函数有几个重要的点要说一下。势能的最低点的到零点之间的绝对值为ε,称为势能函数的特征能量,势能的零点位于处r=σ,称为势能函数的特征长度。势能函数的最低点位于处r=2^1/6σ,在该点处势能对位置的导数是零,所以该点处受力也为零。该点也称为平衡位置,我们可以看到在平衡位置出势能是负的。所以当体系处于平衡状态时,原子之间的相对距离大概也在平衡位置附近,所以势能为负的。这也就是为什么大多数情况分子动力学算出来的势能都是负的。在r<2^1/6σ,两个原子之间表现为相互排斥,在r>2^1/6σ,两个原子之间表现为相互吸引。从势函数的图像上可以看出在较大的时候,势能趋于零,其导数也趋于零。也就是当两个原子距离很远的时候,原子之间的相互作用可以忽略不计。因此在实际计算的时候都会使用截断的lj/126。截断距离成为截断半径,其值大概在。就像重力势能一样,势能的计算需要一个参考位置。lj/126的参考位置选择在了无限远处。类似lj/126势能以及其他拓展的lj势能,都称为对势,其含义是两个原子之间的相互作用只由这一对原子决定,与其它相邻原子没有关系。分子物质原子之间有化学键连接的物质。比如常见的水,甲烷,乙醇,醋酸,氯化钠,聚乙烯,酯类,氨基酸,rna,dna等。分子物质是分子动力学模拟应用最广的对象之一。为了描述分子物质研究者开发出了一系列力场。值得说明的是力场是一个经验性的东西。研究者通过自己的物理直觉和反复试验,最终建立起适合某一类物质的力场。对于分子物质,相互作用包括两类:非键结势能和键结势能。非键结用来描述没有化学键连接原子之间的相互作用,键结势能用来描述有化学键连接原子之间的相互作用,如下图。


在一个体系中任意两个非键结的原子,如果其距离小于截断半径那么都要考虑它们之间的非键结相互作用。对于大多数力场非键结势能用lj12/6描述。对于键结原子之间的相互作用则通过键结势函数进行描述。键结相互作用分为键能(bond),键角能(angle),二面角能(dihedral),离平面能(improper)。两个以化学键相连的两个原子都具有键能相互作用,当化学键偏离平衡长度的时候两个原子就会出现相互作用。三个化学键连接的相邻原子之间均具有键角能,当三个原子之间的角度偏离平衡角度的时候就会产生键角能。四个化学键连接的相邻原子之间会存在二面角能相互作用,当四个原子构成的二面角偏离平衡二面角的时候四个原子之间会出现二面角相互作用。四个相邻化学键连接的相邻原子之间有时还会存在离平面势能作用,当第四个原子偏离前三个原子所构成平面的平均夹角时,四个原子之间会存在离平面能相互作用。不同的分子会具有不同的键结势能。如氧气分子就只具有键能相互作用,水分子具有键能和键角相互作用,十二烷分子具有键能,键角能和二面角相互作用分子。元素构成较为复杂的分子,如rna,就会同时具有四种键结相互作用。具体一个分子具有哪些键结能相互作用,由描述该分子的力场所定义。你只需要使用合适的软件在建模的时候会自动定义好各种键结信息和势能函数的参数。值得指出的是,在分子体系中原子一般都带有电荷,所以非键结原子之间会存在静电相互作用。在大多数力场中,原子的电荷都是部分电荷,也就是电荷一般都是零点几几几。这是由于在共价键中任何一个原子都并没有完全得到或失去一个电子,只是部分的得到或失去电子,因此在描述其电荷的时候都是零点几几几。少数强电解质会有整数电荷,比如氯化钠中的氯离子和钠离子,分别是-1和+1电荷。这里的电荷单位是一个电子或质子所带的电荷量,也就是单位电荷量。

为什么会采用多种键结势能函数来描述分子体系呢?这是因为键结的原子之间电子云的相互作用会对分子的构型进行限制,导致分子会具有特定的几何形状。分子动力学为描述这种情形就采用这样键能组合的形式。这是一种经验的方法。实践表明这是一种很好的办法。只要有合适的势函数形式和参数,采用的力场就能够准确描述分子的构型和之间的相互作用。目前研究者针对分子体系已经开发出多套力场。
金属晶体和非金属晶体

这两类物质具有特殊的结构,研究者为它们开发了额外的势函数,称为多体势函数,来描述原子之间的作用。所谓多体就是说两个原子之间的相互作用不仅取决于这两个原子还与其周围的原子有关系。针对某种物质研究者已经开发出相应的力场参数,只需要搜索一般就能找到对应的势函数参数或文件。我对这些势函数不太了解,就不在这里赘述了。

以上就是关于势能和势函数的内容。需要指出的是为了提高模拟精度,研究者还针对开发出了针对某一种物质的势函数。当你要模拟这些物质时,直接查找原始文件中的参数就行。关于力场的选择,当然是选针对要研究体系的力场。但是对于lammps来说建模是个很麻烦的事。如果你能找到一种力场描述的体系,并且成功建模,那你就偷着乐吧。不同力场之间的差别并不是那么明显。事实上,分子动力学模拟最大的价值就在于给出研究对象的一般性规律和背后的机理,而不是计算出某些精确的数值。而大多数力场能够捕捉研究对象的本质特征,这就基本上能够保证这个力场能够再现研究对象的本质规律,这对于我们来说就已经足够了。当然,力场的开发一直在发展中以越来越精确的描述研究对象。比如几年来发展出来的机器学习力场就能够以量子的精度开展分子动力学模拟。这是分子动力学模拟方法中的一大进展。当你要验证一个力场的时候,计算研究对象你所关心的物理量的数值和实验或者文献对比,如果接近,力场就能用。

1.3 温度、压强(这里写的有点简单了,先就这样吧) 温度对于分子动力学模拟是一个很重要的物理量,因为分子动力学一般用来模拟凝聚态,如果温度过高就气化了。初中物理告诉我们温度是原子热运动剧烈程度的度量。原子热运动越剧烈,温度越高。也就是说温度和原子的热运动速度是直接相关的。根据统计力学三维系统中温度和原子速度具有以下对应关系


其中,是n原子总个数,k_b是玻尔兹曼常数。通过调整原子的速度就可以实现控制系统的温度。

压强是另一个重要的物理量。压强在分子动力学中这样定义的


其中,v是系统体积。第一项来自原子热运动的贡献。第二项来自原子之间相互作用的贡献,称为维里项。通过调整系统的体积和原子的位置就可以实现控制系统的压强。对于液体来说压强就等于我们平时所接触到的压强。而对于固体来说这里的压强实际上就是内应力。事实上,压强其实就是系统内部应力张量的对角线分量。压强和温度都是强度量,就是说其值与系统规模无关。与之相对应的是广延量,比如能量,当系统规模增大时,系统能量增加。

更多分子动力学的细节将结合lammps使用过程进行介绍。

2. linux系统常见命令和操作

lammps是在针对linux系统开发的。虽然windows系统也能用但是会出现很多问题,所以强烈推荐你使用linux系统运行lammps。要搞模拟你一定要熟悉linux的命令行操作逻辑,要习惯使用脚本来写lammps命令。很多软件包括开源的和商业的都是采用脚本控制的方式来执行的。

在linux系统中使用最多的不是鼠标点点点,而是在终端中输入命令行来执行操作。执行一条命令是指在终端中输入该命令,然后回车执行。在ubuntu系统中可以使用ctrl+alt+t来打开终端,其他linux操作系统可以在软件列表中点击打开终端。这里只列举最常用的命令。

cd命令用来进入某个目录,比如cd /home就是进入home文件夹。在linux中.表示当前目录,..表示上一级目录。ls命令列出当前目录下的所有文件和文件夹。pwd命令返回当前目录的路径。mkdir创建文件夹,如mkdir software表示在当前目录下创建software文件夹,mkdir /home/softeare,表示在/home文件夹下创建software文件夹。rm命令删除文件或文件夹。tar解压缩命令当压缩文件的扩展名是.tar.gz时可以使用tar -xvzf 压缩文件名,将压缩文件解压。which命令,查找可执行文件的路径,如which lmp_g++_mpich就是查找可执行文件lmp_g++_mpich的所在路径,如果返回路径那么这个命令就可以被系统找到,如果什么也没返回就是找不到。echo命令返回变量的值,如echo $path就是返回path的值。环境变量是指系统或软件定义的变量,一般用于文件查找。最常见的环境变量就是path,该变量记录了众多可执行文件的位置。如果一个可执行文件的路径被添加到path中了,那么在运行该文件时可以直接在终端中写该文件的名字,如果没有被添加那么就要写出该文件的绝对路径才能执行该文件。将一个路径添加到path中需要修改.bashrc文件。输入执行vim ~/.bashrc,就可以打开.bashrc文件,按i键进入编辑模式,将光标定位在文件末尾并添加以下一行

path=$path:<路径名>,按esc键退出编辑模式,输入:wq后回车,这样就保存好了刚才的编辑,并退出了.bashrc文件回到了终端。在终端输入source ~/.bashrc就可以是刚才的操作发生作用。sudo是临时取得root权限命令,当你要在系统目录中添加或修改文件的时候就需要把sudo加到执行命令前面,如sudo cp ./lmp /usr/bin就是把当前目录下的lmp文件拷贝到系统目录/usr/bin中。带有sudo的命令回车执行后需要输入用户密码,当你在输入密码的时候终端上不会显示密码,但是确实是输进去了,输完回车如果密码正确就开始执行命令了。其他命令可以百度能够找到大量资料。当你在使用linux系统时需要问一个问题,你就百度,一定能找到答案。

3. lammps介绍和并行版安装(linux版)

这里介绍在ubuntu在编译并行版lammps并执行。首先假设你已经有了一台安装了ubuntu系统的电脑。你的用户名叫me。电脑联网。分别在lammps官网,mpich2官网和fftw官网下载对应的lammps,mpich和fftw的最新版源代码,然后

第一步按ctrl+alt+t打开一个终端,输入执行以下命令

sudo apt-get update

sudo apt-get install build-essential

sudo apt-get install vim

第二步输入执行

mkdir /home/me/software

mkdir /home/me/software/mpich

mkdir /home/me/software/fftw

第三步将下载好的三个源代码的压缩文件拷贝进/home/me/software目录下

第四步输入执行

tar -xvf <lammps压缩文件的名称>

tar -xvf <mpich压缩文件的名称>

tar -xvf <fftw压缩文件的名称>

第五步进入解压出来的mpich的目录执行

./configure -prefix=/home/me/software/mpich --disable-fortran

make

make install

第六步进入解压出来的fftw的目录执行

./configure -prefix=/home/me/software/fftw

make

make install

第七步输入执行

vim ~/.bashrc

打开.bashrc文件后按i键进入边界模式,将光标定位在文件末尾并添加以下一行

path=$path:/home/me/software/mpich/bin

按esc键退出编辑模式,输入:wq后回车,这样就保存好了刚才的编辑,并退出了.bashrc文件回到了终端。在终端输入

source ~/.bashrc

which mpirun

若输出了mpirun的目录则mpich安装配置成功

第八步终端输入执行以下命令

cd /home/me/software/解压出来lammps文件夹名称/src

第九步打开目录/home/me/software/解压出来lammps文件夹名称/src/make/options下的makefile.g++_mpich文件。在文件以下位置修改为

mpi_inc = -dmpich_skip_mpicxx -dompi_skip_mpicxx=1 -i/home/me/software/mpich/include

mpi_path = -l/home/me/software/mpich/lib

mpi_lib =

fft_inc = -i/home/me/software/fftw/include

fft_path = -l/home/me/software/fftw/lib

fft_lib =

保存退出。

第十步在终端依次执行

make yes-molecule

make yes-kspace

make yes-rigid

make yes-manybody

make g++_mpich

等待编译完成src目录下会生成lmp_g++_mpich的可执行文件,将此可执行文件拷贝至你的in文件所在的位置输入

mpirun -np <并行核数> ./lmp_g++_mpich -in <in文件名字>

运行正常则编译成功。

4. lammps模拟基本流程

lammps的模拟需要写一个脚本,称之为in文件。我将一个典型的in文件书写分为六个部分:1、定义模拟的基本规则,2、定义对象的几何模型,3、定义对象的力场参数,4、定义分组信息,5、弛豫部分,6、正式模拟过程。

第一部分 定义模拟的基本规则

根据前面说的分子动力学原理,那么第一步就是设置粒子的初始位置和速度?等等。在这之前我们还需要做一些前期准备工作。首先是设置单位制,即涉及到的物理量的单位都是什么。为什么要这么做呢?就是为了能够定量描述我们的对象。回想在高中的著名实验——小球平抛。我们怎么描述小球的运动呢?我们会说小球经过多少秒,向前运动了多少米,下落了多少米。这里就采用了国际制单位描述小球的运动。只有先确定了单位制,我们才好定量描述研究对象。不同的研究对象,为了描述方便会采用不同的单位制。比如描述高铁的速度我们会用km/h,而不是m/s。同样,在lammps中面对不同的研究对象,lammps内置了不同的单位制。所以in文件中的

第一条命令要写的就是设置单位制,即写units命令。语法就是、

units <style> #举例:units real

lammps所有的单位制可在手册中查到。常见的单位系统有,描述分子体系的real,描述金属体系的metal,描述简单液体的lj。

第二条命令是设置边模拟维度,即你模拟的是三维问题还是二维问题。通常我们的模拟都是三维的。语法是

dimension <n> #举例:dimension 3

第三条命令是设置边界条件,即boundary命令。通常我们希望描述对象的体相性质。但是,看看阿佛加德罗常数的值我们就可以知道实际的对象都会包含超级多的粒子。这么多的粒子的爱计算机无法承受。那怎么办呢?分子动力学中采用了有限代替无限的做法。就是取对象的一部分然后加上周期性边界条件来代替几乎无限大的对象。如图中所示所谓周期性边界条件就是粒子如果从边界穿出去,就会从对面穿回来。这样就实现了以有限的粒子数代替了无限大的对象。由边界所围起来的区域通常称为模拟盒子。模拟盒子的形状最常用的就是长方体。之所以采用长方体是因为编程容易处理。


设置边界条件在分子动力学模拟中优先级很高,所以第二条命令要写边界条件,语法是

boundary <x> <y> <z> #举例:boundary p p p

boundary p p p就是指三个方向上都是周期性边界条件。这个设置在lammps中最常用。lammps中还提供了其他类型的边界条件,常用的有固定边界条件(f)和缩放边界条件(s)。当我们需要在某个方向上不想采用周期性时就可用f或s。f作用就是粒子从边界跑出去就回不来了,计算就把它丢掉了。s的作用是边界的位置会随着粒子的位置而缩放,当最靠近边界的粒子往外移动时边界位置也跟着移动,反之亦然。需要指出的是每个方向上都有两个边界,当写一个参数是如p就表示该方向上两个边界都是周期性,f和s也如此。但是,还可以这么写boundary p fs p,这就表示在x和z方向上是周期性边界,在y方向上下面是f,上面是s。因此写该条命令时根据需要进行设置。

第四条命令是设置建立邻居列表的,即neighbor命令。根据分子动力学原理我们需要计算每个原子的受力。而任何一个粒子的受力都来自于其周围粒子给它的合力。但是,我们知道只有距离较近的粒子才会对该粒子产生受力,距离较远的粒子给与的力可以忽略不计。这就是邻居的含义。所以要计算一个粒子所受的合力,首先要找到该粒子周围有哪些邻居,即建立邻居列表。每一个粒子都有自己的邻居列表。neighbor的语法是

neighbor <skin> <style> #举例:neighbor 3 bin

所谓邻居就是距离中心粒子一定范围内的粒子,这个范围称之为作用力的截断半径(r_c)。也就是以中心粒子为球心,r_c为半径内的所有粒子都是邻居。skin是比r_c多出来的一部分,所以建立邻居列表的时候是以r_c+skin为半径进行寻找的。为什么要这么做呢?这是因为建立邻居列表是挺费时间的一件事,那么好不容易建立起来那就尽可能多用几次。而事实上由于分子动力学模拟的时间步长较短,粒子在一个时间步长内走不了多少距离。那么只要邻居列表中的原子移动距离都小于skin,那么这个列表就可以在下一步中继续使用。这就是skin的含义。后面style指的是建立邻居列表的方法,最常用的就是bin方法。这个方法的具体含义可以查看分子动力学教材。入门只需要知道bin在大多数情况下都是最快的,用它就没错了。而r_c在后面的命令中设置。


第五条命令是设置邻居列表的更新频率,即neigh_modify命令。lammps提供了很多方式设置邻居列表的更新频率。如果邻居中的粒子已经不在r_c+skin范围内了,那么邻居列表就必须要更新了。当需要更新而未更新时就会出现dangerous builds。当算完之后lammps输出的dangerous builds不为零,那么你就要修改neigh_modify命令了,或者加大skin的值。这条命令使用比较复杂,需要根据模拟经验和具体的模拟测试确定最优值。对于新手,可以直接使用以下设置:

neigh_modify every 1 delay 0 check yes

以上都是计算设置,每个模拟这些设置都大同小异。下面开始就是针对模拟对象的设置。

第六条命令设置原子类型,即atom_style命令。我们模拟的基本构成是原子。不同的对象粒子所具有的属性是不同的。对于某个对象,粒子不需要的属性就不需要设置,以节省内存加速计算。比如研究对象是分子(如水分子),那么构成分子的粒子(style为full)就需要具有以下属性:粒子编号,粒子所属分子的编号,粒子类别(atom type),带电量,x坐标,y坐标,z坐标。如果研究对象是惰性气体(如氩)或金属单质(如铁),那么粒子(style为atomic)的属性就是:粒子编号,粒子类别,x坐标,y坐标,z坐标。lammps中内置了相当多的原子类型可以查看手册寻找自己需要的类型。这里要说的是atom style和atom type中文翻译都一样,具体是啥意思。简单来说atom style定义了大类,atom type定义了大类中的小类。比如一个水分子中,所有粒子的atom_style都是full,但是在这个style下,又区分为氧原子type和氢原子type。一个模拟中可以由多个type,但是只能有一个style。atom_style定义好后就约束了data文件中具体内容。atom_style的语法是

atom_style <style> #举例:atom_style full

粒子属性定义完后,就可以定义粒子之间相互作用的方式了。所谓相互作用其实就是粒子之间作用力的计算公式。计算公式是通过势能来表述的。因为势能在空间上的梯度就是力,即f=-divu。比如重力势能对高度求导就是重力。为什么要用势能表述呢?因为势能是标量而力是矢量,因此使用标量在构建或者拟合相互作用表达式时就容易的多。而在实际计算中只需要对势能进行求导就能获得受力。任何对象的组成粒子之间相互作用都分为非键结和键结。非键结就是不同通过化学键的相互作用,键结就是通过化学键的相互作用。有些对象只有非键结相互作用,如液态氩或单质铁。有些对象两种都有,比如水或蛋白质。非键结相互作用包括范德华和静电。在lammps非键结相互作用即范德华和静电通过pair_style和pair_coeff命令设置。pair_style和pair_coeff定义了短程相互作用,即相互作用具有截断半径。范德华仅有短程相互作用,而静电是既有短程又有长程作用,如果体系中有静电作用,那么定义完pair_style和pair_coeff,还要定义长程静电求解类型kspace_style。用在分子体系的键结相互作用分为键(bond),键角(angle),二面角(dihedral),离平面(improper)。不同的对象会包含不同的键结作用,比如水分子就只包括键和键角,而分子量稍大的分子会需要全部的键结相互作用来描述。这些相互作用构成描述体系的力场。这些力场是从量子力学出发而得到的经典近似。以下为定义相互作用的命令:

第七条命令设置pair_style。首先定义非键结相互作用。不同的力场有不同的pair_style,模拟中要根据对象选择合适的pair_style。lammps集成了目前几乎所有的pair_style。模拟时只需要根据对象进行选择即可。pair_style对于绝大多数模拟都需要定义。不同的pair_style具有不同的语法,具体可查阅手册。pair_style中一般会定义截断半径的大小。以最简单的包含范德华的pair_style为例,其语法是

pair_style lj/cut <cutoff> #举例:pair_style lj/cut 9.0

第八条命令设置bond_style。这条命令是可选的,根据不同的对象可定。其设置简单,没啥好说的,就是计算两个粒子通过化学键的相互作用,其语法为

bond_style <style> #举例:bond_style harmonic

第九条命令设置angle_style。这条命令是可选的,根据不同的对象可定。其设置简单,没啥好说的,就是计算相邻三个粒子的相互作用,其语法为

angle_style <style> #举例:angle_style harmonic

第十条命令设置dihedral_style。这条命令是可选的,根据不同的对象可定。其设置简单,没啥好说的,就是计算四个相邻粒子之间的相互作用,其语法为

dihedral_style <style> #举例:dihedral_style opls

第十一条命令设置improper_style。这条命令是可选的,根据不同的对象可定。其设置简单,没啥好说的,就是计算四个相邻粒子之间的相互作用,其语法为

improper_style <style> #举例:improper_style opls

第十二条命令设置special_bonds。这条命令是可选的,当有键结作用出现时,设定有键结相互作用的粒子之间是否还具有pair相互作用。一般来说,是没有的,所以这条命令一般写作:

special_bonds lj/coul 0.0 0.0 0.5

第十三条命令设置kspace_style。这条命令是可选的,当有静电作用出现时,需要加上。不同的pair_style对应不同的kspace_style,其语法:

kspace_style <style> <value> #举例:kspace_style pppm 0.0001

以上就是第一部分的内容。对于不同的研究对象力场设置部分会有所不同。如简单液体只需要pair_style就行了,分子物质一般都会设置,晶体也一般只需要pair_style。如果你的对象有多种物质还可以使用hybrid类的力场命令进行组合设置。

第二部分 定义对象的几何模型

第十四条命令read_data。这条命令用来读取粒子的初始位置,键结信息等。这些信息写在一个data文件中。建立data文件称为lammps的建模过程。lammps的建模是个非常重要的步骤。我们可以在in文件中利用creat_box和create_atoms命令建立。但是这两条命令只能用来创建晶体结构。对于分子结构需要自己使用第三方工具或者编程建立data文件实现。我习惯于自己写data文件建立模拟对象的构型。lammps的data文件建立比较麻烦,一般要使用多个工具联合建模。这里不再赘述,后面会专门讲lammps建立data文件的教程。data文件中的信息要根据atom_style和分子的拓扑结构进行建立。以一个由分子构成的模拟对象,也即atom_style是full为例data文件内容为:

lammps description #第一行写描述信息

116803 atoms #共多少个atoms

70386 bonds #共多少个bonds

41643 angles #共多少个angles

13700 dihedrals #共多少个dihedrals

2550 impropers #共多少个impropers

191 atom types #共多少个atoms types

195 bond types #共多少个bonds types

356 angle types #共多少个angles types

548 dihedral types #共多少个dihedrals types

102 improper types #共多少个angles types

0 97.92 xlo xhi #x方向的上下边界

0 97.92 ylo yhi #y方向的上下边界

-15.0 160 zlo zhi #z方向的上下边界

masses

1 15.9994 # 1号atom type的质量

2 1.008 # 2号atom type的质量

......

atoms

1 1 1 0.0 0.0 0.0 145.0 #粒子编号,粒子所属分子的编号,粒子类别(atom type),带电量,x坐标,y坐标,z坐标

2 1 1 0.0 0.0 2.04 147.04

......

bonds

1 2 13825 13826 #bond的编号,bond type,组成bond的第一个,第二个的原子编号

2 3 13826 13827

.......

angles

1 2 13825 13826 13827 #angle的编号,angle type,组成angle的第一个,第二个,第三个的原子编号

2 3 13825 13826 13828

......

dihedrals

1 1 13825 13826 13828 13829 #dihedral的编号,dihedral type,组成dihedral的第一个,第二个,第三个,第四个的原子编号

2 2 13826 13828 13829 13830

......

impropers

1 1 13826 13825 13827 13828 #improper的编号,improper type,组成improper的第一个,第二个,第三个,第四个的原子编号

2 2 13835 13834 13836 13837

......

第三部分 定义对象的物理模型

这部分命令用来指定势函数中的具体参数是多少。

第十五条命令pair_coeff。根据定义的pair_style和粒子type的个数来决定pair_coeff的内容和条数。具体书写时可查看手册中对应的pair_style的例子。如pair_style是lj/cut,粒子type个数为2,则该命令写为

pair_coeff 1 1 0.1553 3.166 9.0

pair_coeff 1 2 0.1423 3.125 9.0

pair_coeff 2 2 0.2753 3.196 9.0

第十六条命令bond_coeff。根据定义的bond_style和bond type的个数来决定bond_coeff的内容和条数。具体书写时可查看手册中对应的bond_style的例子。

第十七条命令angle_coeff。根据定义的angle_style和angle type的个数来决定angle_coeff的内容和条数。具体书写时可查看手册中对应的angle_style的例子。

第十八条命令dihedral_coeff。根据定义的dihedral_style和dihedral type的个数来决定dihedral_coeff的内容和条数。具体书写时可查看手册中对应的dihedral_style的例子。

第十九条命令improper_coeff。根据定义的improper_style和improper type的个数来决定improper_coeff的内容和条数。具体书写时可查看手册中对应的improper_style的例子。

第四部分 定义分组信息

很多情况下我们需要对研究对象的不同部分施加不同的操作。lammps中通过对对象中的原子进行分组实现。

第二十条命令 group。group命令可以采用多种方式进行分组定义

region fix block inf inf inf inf inf 10.0 units box

group fix region fix

group thermos type 1

group a1 id >= 76

group sub id 100:10000:10

group big molecule 123

group polya molecule <> 50 250

group boundary subtract all a2 a3

group boundary union lower upper

group boundary intersect upper flow

group boundary delete

group mine dynamic all region myregion every 100

第五部分 弛豫

在弛豫部分我们首先需要定义基本输出日志信息,这是为了监控我们的模拟是否正确。一般输出的都是系统量,如温度、压强、总动能、总势能等。所以

第二十一条命令thermo。thermo命令控制每多少步输出一次。如果不设置lammps默认只在第一步和最后一步输出日志信息。语法是

thermo <n> #举例:thermo 1000

第二十二条命令thermo_style。thermo_style控制究竟要输出哪些全局量。具体能够输出哪里量可查阅手册thermo_style命令描述。如果不设置该条命令,那么lammps就会输出默认信息。其语法是

thermo_style <style> <args>

第二十三条命令dump。该条命令用来每隔一段时间输出系统所有原子的信息,这些信息可以是原子的位置,受力,速度,质量,编号等。当你要输出所有原子的信息时就是用这条命令。将这条命令的输出文件进行可视化可以初步判断你的模拟是否正确。以下是最常用的设置

dump 1 all custom 10000 dump.lammpstrj id mol type mass x y z

第二十四条命令minimize。这条命令是可选的。如果你的几何模型和物理模型都设置正确,那么可以不用这条命令。这条命令执行的是能量最小化。为什么要执行能量最小化呢?这是因为我们在建模的时候,有时几何模型和物理模型不是那么完美,经常出现的就是某些原子之间的位置靠得太近,这就会导致系统的能量很大,容易出现运行错误。执行能量最小化就是将系统的能量调节至尽可能小。lammps实现这个命令的方式是通过计算原子之间的受力和能量,通过一些优化算法,移动原子的位置从而是体系总能量达到尽可能小。所以如果你发现你的体系中能量超级大,压强超级大而运行出错,那么你可以试试能量最小化命令。一般使用下面这些参数设置就能实现你的目的,如果能量最小化后还出错,那么你就要排查你的几何模型和物理模型是不是太差了,能量最小化也无能为力了。至于能量最小化采用什么算法,用默认的就行了,也就是说你不用有额外的设置,直接minimize就行了,花里胡哨的没啥用。

minimize 0.0 1.0e-8 1000 100000

第二十五条命令compute。该命令是lammps中极其重要的一类命令。当你需要计算某个量时你就可以考虑使用compute命令。lammps提供了丰富的compute命令,具体使用时,根据你的需求,查阅手册看lammps中有没有实现你需要的功能的compute。compute和dump一样可以针对某个group的粒子进行计算。一个in文件中可以有多个compute,但每个compute的id不能重复。计算出来的值可以被很多命令使用,如dump,fix等。最常用的就是计算温度,如

compute myt all temp

第二十六条命令velocity。velocity命令有不少功能,最常用的功能就是根据目标温度创建粒子的初始速度。最常用的形式为

velocity all create 300.0 4928459 rot yes dist gaussian

第二十七条命令timestep。该命令设定求解牛顿差分方程中时间步的大小。不同体系会要求不同大小的时间步长

。一般来说分子体系会要求时间步长为1fs。简单液体体系可放宽至5fs。晶体体系可以是2fs。反应力场reaxff体系会要求更小的时间步,0.1-0.5fs。时间步长的选取原子是,要足够小以准确捕捉体系中最快的动力学过程,又要足够大以节省计算时间。通常你的时间步长大小参考文献设置就行了。或按照上面举的例子进行设置,就没啥问题了。

第二十八条命令fix。fix是lammps中另一类极其重要的命令。其实现功能就是对某个组的粒子施加某种操作。最重要的功能就是用来更新某个组的粒子的速度和位置,因此每个in文件中都必然会有fix命令。我们通常所说的系综就是通过fix命令实现。如fix nve实现nve系综,fix nvt实现nvt系综,fix npt实现npt系综。关于系综这里要多说一点。系综是统计力学的基本概念。所谓系综,简单来说就是系统无限个副本的集合。但是分子动力学中的系综和统计力学上的系综有联系又有区别。比如在lammps中nve系综就是只直接求解牛顿方程而不对速度和位置做任何干涉的系综。把fix nve与温度控制fix联用就实现nvt系统,把fix nve与温度控制的fix和压强控制的fix同时联用就实现了npt系综。也可以只使用fix nvt命令直接实现nvt,只使用fix npt命令实现npt系综。系综当你的边界条件是p或f时系统体积是不变的。当你使用s边界时系统体积是可变得,此时也就没有什么nvt或nve了。但是需要强调的是npt是通过改变盒子体积来实现控压的所以在控压的方向上只能使用p边界条件。所以基本上你可以忘记系综的概念。把fix nve或fix nvt或fix npt当做更新原子位置和速度的命令,fix nve直接根据牛二进行更新,fix nvt在更新的时候会对速度进行干涉以达到设定的温度,fix npt会对速度和位置同时进行干涉以达到设定的温度和压强。至于nvt和nve下体积变不变取决于你的边界条件。同一个系统中可能同时存在fix nve和fix nvt,这是因为有些模拟要求一部分原子的位置和速度直接根据牛二进行更新,而另一部分却要求在更新原子速度时保持温度不变。但是不会同时出现fix nve和fix npt,因为fix npt在根据设定的压强在更新原子位置和速度时,计算的是所有原子对压强的贡献。所以fix npt不适合局部控压。

某个组的粒子只有使用了fix+系综的命令才会更新位置和速度。因此如果你想保持某组的粒子在模拟过程中固定不动,最简单的办法就是不对它施加任何fix命令。通常我们在使用fix时都会使用先来一条fix+系综,然后调用其他fix实现某些目的,如要让模拟对象发生一定变形,就用fix deform,要让对对象施加一个电场就用fix efield。当你想用实现某种操作时,打开手册查看fix的一些命令看有没有实现你功能的fix命令。fix的某些命令也可以用于输出信息,如fix ave/chunk输出模拟盒子不同位置处的原子属性的时间平均值;fix ave/time输出某些全局量的平均值。

第二十九条命令 run。终于要开始跑了。这个命令最常用的就是你要run多少步。在弛豫阶段一般会run 1ns的长度,通常是1000000步。这里可以控制采用什么算法对牛二进行求解。采用默认的就行,也就是说你不用额外设置,直接run就行了。花里胡哨的没啥用,默认的往往是最好的。其设置是

run 1000000

以上就是弛豫部分。为什么要进行弛豫呢?这是因为系统中原子的初始位置和初始速度都是认为设定的,这是系统的状态并不在热力学平衡状态。通常我们希望在正式模拟时系统的起点在热力学平衡状态。只有经过弛豫后系统才会达到热力学平衡状态。在弛豫开始的时候你会看到系统的温度和压强会有非常剧烈的变化,这是正常的。经过一段时间后温度和压强这些量就会在一个值附近小幅振荡。那么怎么判断系统是否达到平衡了呢?这是个挺麻烦的事,不同的体系有不同的标准。通常我们会看系统的温度,压强,能量这些值不会在持续上升或下降就差不多平衡了。但是这个事很难说。所以为了保险起见,通常模拟中会设置冗余的弛豫步数来确保系统达到平衡。这个值一般是1000000步。需要说明的是,系统温度是根据系统动能算出来的,一般很快就不咋变了。但是压强是根据受力算出来的振荡会很大。一般要看温度或压强的时间平均值,也就是不同时间步的平均值来判断系统的温度或压强是否达到了设定值。

第三十条命令write_restart。这个命令可以写出restart文件,以便后续从这个点接着算。restart文件是一个二进制文件。使用这条命令是个好的习惯,可以让你省很多事,又不会额外增加计算量。其语法是

write_restart <filename> #举例write_restart restart.equ

最后一部分 正式模拟

这部分其实才是模拟的核心。不同的研究对象和目的设置和使用的命令都会不同。无法在基本流程中写,将在后面的专题中介绍。

5. 建模和后处理软件概述

本节介绍了包装 lammps 的商业和免费软件,为开发模型、运行仿真和分析结果提供了一个用户友好的环境。

materials design, inc.

materials design, inc. 开发了medea®,这是一种原子模拟和建模环境,可提供与lammps一起使用的生产力、模型构建和分析工具。medea®使用流程图简化了lammps模拟。生成的lammps模拟很容易在同事之间共享、编辑以供将来重复使用,并且可以由lammps专家进行定制。

使用medea®,可以使用各种晶体系统方法构建原子模型,并使用medea®非晶和热固性构建器,这是为lammps创建输入的工具。它们还为预测机械性能提供了经过验证的方法,包括基于lammps模拟的弹性常数、扩散率、传输性能和内聚能。medea®还有助于管理用于模拟有机、无机和金属系统的力场;材料设计团队在为有机和金属系统开发精确力场方面拥有良好的记录。

scienomics

scienomics公司开发了一个lammps接口,作为其材料和工艺模拟 (maps) 平台的一部分,该平台允许lammps新手和专家快速有效地创建lammps输入文件-用于原子模拟和dpd模拟。scienomics为 lammps用户提供完整的电话和电子邮件支持。maps中的lammps插件还允许用户为lammps创建输入文件,对lammps模拟的输出进行可视化和分析。maps也有许多力场可供选择(用于原子建模和粗粒度建模)与 lammps。他们还有一个名为amorphous builder和crosslink builder的工具,可用于为lammps创建输入几何图形,以及用于分析reaxff模拟结果的工具和其他强大的功能,用于计算弹性属性、结构属性、传输属性等关键属性.

maps是一个综合性的软件平台,结合了构建-模拟-分析的工作流程。这使用户能够以高效和无缝的方式对复杂材料系统进行建模,从包括lammps在内的一系列仿真引擎中进行选择以对过程进行建模,并分析输出以提取许多属性,例如机械、热、传输、流变等. 有关所有这些工具和服务的更多详细信息,请参见scienomics网页。

xenoview

由sergei shenogin伦斯勒纳米技术中心)开发。该软件对非商业用户免费。 xenoview是基于windows的分子动力学模拟软件。它的界面为从头开始构建结构提供了广泛的工具。此外,您可以从多种格式(例如pdb格式)导入结构。 键可以自动定义,力场可以自动分配。xenoview可以导出可在lammps中用于大规模模拟的数据文件和输入脚本。有关详细信息,请参阅xenoview主页。

atomman

atomman 工具是由nist的lucas hale开发的开源(免费)软件。它是一个用于与大规模原子系统交互的python包。它允许用户完全从python中准备、运行和分析md模拟。

l 允许对数百万个原子进行高效和快速的计算,每个原子都有许多自由定义的每个原子属性。

l 生成包含缺陷的原子系统,例如点缺陷和位错单极子。

l 用于缺陷分析的内置函数,例如滑移向量和 nye 张量。

l 直接从 python 调用 lammps 并立即检索结果数据或 lammps 错误语句。

l 轻松将系统与 ase 和 pymatgen 的其他 python 原子环境相互转换。

l 可以加载基于 cif 晶体结构文件、poscar 和 lammps 原子和转储文件的系统。

l 内置单位转换工具。

l 独立于平台:适用于 linux、windows 和 mac。

loos = lightweight object-oriented structure analysis library

loos是一个用于分析分子动力学模拟的软件包。 它与包无关、开源,可在所有主要的linux发行版以及osx上运行。它分发了大约150个预打包的分析工具,范围从标准任务(轨迹操作、主成分分析等)到新工具(评估模拟收敛、测量膜和膜蛋白的特性)。 此外,它专为快速开发新的分析工具而设计,尤其是在使用python包装器时。loos可从https://github.com/grossfieldlab/loos下载

freud = analysis library for post-processing md and mc data

freud是一个python库,由sharon glotzer的小组(密歇根大学)开发和支持,它提供了一套简单、灵活、强大的工具,用于分析从分子动力学或蒙特卡罗模拟中获得的轨迹。 高性能、并行化 c++ 用于计算标准工具,例如径向分布函数、相关函数、阶参数和聚类,以及包括平均力和扭矩 (pmft)势和局部环境匹配在内的原始分析方法。freud库支持多种输入格式和输出numpy数组,支持与许多典型材料科学工作流程的科学python生态系统集成。

教程:g(r) 分析

文档:https://freud.readthedocs.io

源代码:https://github.com/glotzerlab/freud

molecular builders

要模拟分子系统,lammps要求您输入分子拓扑结构(键、角、二面体等列表)以及适合您的模型的力场系数。因此,构建分子系统的任务是一个预处理步骤,并且本身可能是一项复杂的任务。

本节介绍有助于自动化此过程的工具。

一般来说,封装可以从键拓扑推断角度、二面角和不正确的相互作用。 他们有生成分子几何的命令。他们可以从packmol和其他pdb文件生成器生成的文件中读取坐标。

enhanced monte carlo (emc)

由位于http://verizon.net的't veld (basf)的pieter j.开发和维护。

增强型monte carlo或简称emc为使用compass、charmm、opls、martini、dpd或胶体力场创建和操作粒子模拟的输入结构提供了环境。为此,脚本语言管理对其功能的访问。当前版本通过smiles字符串提供对分子或粗粒度结构的操作,在需要时为选定的力场键入这些结构,并应用蒙特卡罗原理构建构象以不重叠原子。emc提供lammps、pdb和xyz格式的输出端口。可以在http://montecarlo.sourceforge.net上找到适用于linux、macos或windows的编译版本。

moltemplate

由andrew jewett (ucsb) 开发和维护。

该工具与 lammps 一起在tools/moltemplate目录中分发。有关更多详细信息,请参见该目录和moltemplate主页。

moltemplate专为构建粗粒度生物分子模型而设计。moltemplate可以同时创建:lammps data文件(包含几何和拓扑)和lammps input脚本(包含力场、修复和组)。与其他转换工具生成的文件不同,moltemplate允许用户访问 lammps中可用的所有力场。用户可以将分子保存为moltemplate紧凑、可读的模板文件格式(“.lt”),并与他人共享。分子可以用作更大分子的构建块。 “罐装”力场(例如 dreiding、gaff、trappe 和用户创建)也可以(原则上)以这种格式保存并稍后应用于分子。

分子可以被复制、组合和链接在一起以定义新分子。(这些可用于定义更大的分子。支持无限级别的对象组合、嵌套和继承。)一旦构建,可以自定义单个分子和子单元(原子和键,以及子单元可以移动、删除和替换)。

vmd topotools

由axel kohlmeyer(temple u开发和维护。

有关详细信息,请参阅 topotools 主页。

topotools是一个分子生成器,它利用vmd和tcl的强大功能创建lammps data文件并将它们转换为其他格式或从其他格式转换。topotools有两个组件:一个可以提取和操作拓扑信息的中间件脚本,以及在它之上构建的几个高级应用程序,例如可以使其能够读取/写入数据文件、复制和合并系统。 与vmd一起,topotools可以从pdb文件、psf文件和原子对距离推断拓扑结构,使蛋白质溶剂化。

intermol a conversion tool for molecular dynamics simulations

intelmol是用python编写的,可以在intermol中本地进行 desmond<=>gromacs<=>lammps转换;amber->x 是通过将amber 转换为 gromacs,然后使用parmed 转换为其他程序来执行的。amber->charmm 由parmed直接执行。

avogadro

作为开源项目开发和维护。有关详细信息,请参阅 avogadro 主页。

avogadro是一款先进的分子编辑器和可视化工具,专为计算化学、分子建模、生物信息学、材料科学和相关领域的跨平台使用而设计。 它提供灵活的高质量渲染和强大的插件架构。

packmol

作为开源项目开发和维护。有关详细信息,请参阅 packmol 主页。

packmol通过在定义的空间区域中包装分子来创建分子动力学模拟的初始点。包装保证短程排斥相互作用不会破坏模拟。

atomsk

作为开源项目开发和维护。有关详细信息,请参阅 atomsk 主页。

atomsk旨在创建、操作和转换原子系统。它支持多种文件格式,其中包括 lammps文件格式,还支持vasp、quantum espresso、imd、dl_poly、atomeye cfg格式或xcrysden xsf格式,可以轻松转换文件以进行从头计算、经典势模拟或可视化。 此外,atomsk还可以对原子位置进行一些简单的变换,如旋转、变形、插入位错。

octa 和j-octa

octa是一个开源软件包,由模拟引擎(分子动力学、流变模拟、自洽场理论、有限元方法等)和用于建模软物质系统的gui(可视化、简单分子构建器和分析工具)组成。

octa还为多种模拟器的协作使用提供了环境,即多物理场和多尺度模拟。

lammps和cognac(md 引擎)文件之间的转换程序也包括在内。此功能使lammps用户能够使用octa gui并结合其他理论(如 scft)运行经典的md模拟。

通过使用商业版本的j-octa,还可以进行全原子和粗粒度md的复杂分子构建。

molecular simulation design framework (mosdef)

mosdef提供了一组可扩展的python工具,旨在促进使用分子模拟对软物质系统进行初始化、原子分型和筛选。

automated topology builder (atb) and repository - molecular topology building blocks for organic molecules

atb项目由alan e. mark教授(澳大利亚昆士兰大学)领导;atb网站上有一份其他贡献者的列表。

atb以与lammps和其他分子动力学软件包兼容的格式提供有机分子的拓扑文件。lammps拓扑文件支持使用moltemplate工具(随lammps分发)构建复杂系统。moltemplate允许结合力场参数和分子模板文件来构建复杂的系统,从而实现类似于在生物分子md模拟包(例如gromos、amber、charmm等)中构建系统拓扑的工作流程。

atb 站点为各种分子(> 20,000并且还在增长)提供拓扑结构。可以使用基于名称或化学式的内部搜索工具并从结果列表中选择分子来找到分子。一旦进入感兴趣分子的页面,您可以选择“molecular dynamics (md) files”并选择“lammps”作为输出“格式”如果数据库中不存在分子,可以通过提交新的要处理的分子。

data sites

本节列出了提供可与lammps一起使用的数据的www站点。例如,原子配置,可用于初始化lammps模拟的模型。或者使用lammps完成的计算存档,可以浏览以获取物理或模型。

jarvis database for md potential calculations on dft geometries

jarvis for force-fields (jarvis-ff)是一个高通量计算数据库,用于对具有各种力场/原子间势的密度泛函理论 (dft)优化的几何结构进行lammps计算。 该项目的目标是通过网络界面为评估力场提供一个简单的查找表,并提高数据的可重复性。jarvis-ff是美国国家标准与技术研究院 (nist)材料基因组计划(mgi)的一部分。

orsi group at queen mary university of london

mario orsi的小组为各种水系统(不同的力场)收集了很好的lammps输入脚本和数据文件。他们也在为蛋白质和脂质膜系统添加文件。

[ Last edited by 月只蓝 on 2022-5-22 at 17:11 ]
回复此楼

» 收录本帖的淘贴专辑推荐

缺陷计算 科研软件 分子动力学模拟相关

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

luwis

至尊木虫 (著名写手)



luyaobao(金币+5): 谢谢参与
2楼2022-05-22 15:27:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

whgregory

木虫 (正式写手)



luyaobao(金币+5): 谢谢参与
求更新,感谢

发自小木虫Android客户端
5楼2022-05-22 17:16:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Lh725

新虫 (小有名气)



luyaobao(金币+5): 谢谢参与
30楼2022-05-30 11:01:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Euphoriagg

新虫 (小有名气)



luyaobao(金币+5): 谢谢参与
31楼2022-06-14 09:53:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

haisheng1792

新虫 (文坛精英)



luyaobao(金币+5): 谢谢参与
34楼2022-06-24 12:46:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

我是Alun

新虫 (初入文坛)



luyaobao(金币+5): 谢谢参与
点赞
35楼2022-08-18 10:21:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

haibinlucky

木虫 (小有名气)



luyaobao(金币+5): 谢谢参与
厉害!
37楼2022-09-20 11:54:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yptv7361

禁虫 (著名写手)

本帖内容被屏蔽

38楼2022-09-23 11:48:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mzw891128

铁虫 (小有名气)



luyaobao(金币+5): 谢谢参与
点赞!期待专题六!
41楼2022-11-21 15:42:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

inaturelz

木虫 (著名写手)



luyaobao(金币+5): 谢谢参与
mark一下,楼主加油

发自小木虫Android客户端
45楼2023-04-20 14:22:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qiyangtt

铁虫 (小有名气)



luyaobao(金币+5): 谢谢参与
楼主有兴趣做代算吗,+微tjs7188私聊
49楼2023-11-09 14:03:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2022-05-22 15:50   回复  
luyaobao(金币+5): 谢谢参与
2022-05-22 15:58   回复  
luyaobao(金币+5): 谢谢参与
tzynew6楼
2022-05-22 18:37   回复  
luyaobao(金币+5): 谢谢参与
i 发自小木虫Android客户端
gter_wang7楼
2022-05-22 19:13   回复  
luyaobao(金币+5): 谢谢参与
2022-05-22 19:31   回复  
luyaobao(金币+5): 谢谢参与
yes 发自小木虫Android客户端
nono20099楼
2022-05-22 21:39   回复  
luyaobao(金币+5): 谢谢参与
gter_wang10楼
2022-05-22 22:01   回复  
tigerwood211楼
2022-05-22 23:12   回复  
luyaobao(金币+5): 谢谢参与
ok
jiaoxg12楼
2022-05-23 09:14   回复  
luyaobao(金币+5): 谢谢参与
2022-05-23 16:45   回复  
luyaobao(金币+5): 谢谢参与
2022-05-23 17:13   回复  
luyaobao(金币+5): 谢谢参与
5 发自小木虫IOS客户端
kanghuijun15楼
2022-05-23 18:41   回复  
luyaobao(金币+5): 谢谢参与
dsctg16楼
2022-05-24 08:26   回复  
luyaobao(金币+5): 谢谢参与
2022-05-24 09:10   回复  
luyaobao(金币+5): 谢谢参与
2022-05-24 16:43   回复  
luyaobao(金币+5): 谢谢参与
假大空19楼
2022-05-24 19:23   回复  
luyaobao(金币+5): 谢谢参与
tigerwood220楼
2022-05-25 06:36   回复  
ok
2022-05-25 08:52   回复  
luyaobao(金币+5): 谢谢参与
1
gdflly0822楼
2022-05-25 21:48   回复  
luyaobao(金币+5): 谢谢参与
2022-05-26 09:17   回复  
luyaobao(金币+5): 谢谢参与
kanghuijun24楼
2022-05-26 13:57   回复  
2022-05-26 19:48   回复  
luyaobao(金币+5): 谢谢参与
发自小木虫Android客户端
2022-05-27 09:03   回复  
luyaobao(金币+5): 谢谢参与
liang888727楼
2022-05-27 14:41   回复  
luyaobao(金币+5): 谢谢参与
祝福!!
myttiger28楼
2022-05-28 10:03   回复  
luyaobao(金币+5): 谢谢参与
twenty4929楼
2022-05-28 19:56   回复  
luyaobao(金币+5): 谢谢参与
110001180532楼
2022-06-24 00:02   回复  
luyaobao(金币+5): 谢谢参与
发自小木虫Android客户端
2022-06-24 08:07   回复  
luyaobao(金币+5): 谢谢参与
发自小木虫Android客户端
XG-WUST36楼
2022-08-18 22:11   回复  
2022-10-17 17:04   回复  
luyaobao(金币+5): 谢谢参与
XG-WUST40楼
2022-10-17 23:08   回复  
XG-WUST42楼
2022-11-21 22:22   回复  
2023-02-10 16:17   回复  
XG-WUST44楼
2023-02-10 21:54   回复  
luyaobao(金币+5): 谢谢参与
q 发自小木虫IOS客户端
一剪梅946楼
2023-09-07 14:49   回复  
luyaobao(金币+5): 谢谢参与
送红花一朵
f
2023-09-07 16:54   回复  
冰墩墩+48楼
2023-09-09 17:54   回复  
luyaobao(金币+5): 谢谢参与
2024-02-18 11:53   回复  
luyaobao(金币+5): 谢谢参与
发自小木虫Android客户端
相关版块跳转 我要订阅楼主 luyaobao 的主题更新
提示: 如果您在30分钟内回复过其他散金贴,则可能无法领取此贴金币
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 最近遇到这样一个问题 4+3 asd123gfa689 2024-04-18 6/300 2024-04-18 18:43 by chaodanming
[找工作] 事业单位还是大学好? +14 青萍之沫 2024-04-16 15/750 2024-04-18 18:04 by 鱼翔浅底1
[有机交流] 傅克酰基化,产率大于百分之一百,求解,很急 90+4 hsn991013 2024-04-15 10/500 2024-04-18 15:38 by lkw0604
[博后之家] 博后进站年龄可以超过35岁? +8 suesong0818 2024-04-14 8/400 2024-04-18 08:38 by charles-c
[教师之家] 美国教授开除中国研究生:我就不该录取你! +5 苏东坡二世 2024-04-15 5/250 2024-04-18 08:31 by David1982
[基金申请] 申请省自然科学基金,研究区能否是省外区域 100+3 喜欢兔兔的我 2024-04-15 11/550 2024-04-17 23:49 by 喜欢兔兔的我
[考研] 275求调剂 +8 调剂0856 2024-04-14 10/500 2024-04-17 23:23 by 华北刘兵
[基金申请] 请问教育部人文社科难度大吗 +9 锦衣卫寒战 2024-04-15 14/700 2024-04-16 23:10 by 锦衣卫寒战
[有机交流] 粗产品在甲醇中回流2次是啥意思? +4 DDT. 2024-04-12 9/450 2024-04-16 12:01 by 宁静远行
[考研] 334求调剂 +4 学药救人 2024-04-14 4/200 2024-04-15 15:05 by hunanzang
[考研] 322求调剂 +6 本己上岸 2024-04-15 7/350 2024-04-15 14:19 by mthwyj
[考研] 273求调剂 +5 Late婉安 2024-04-15 7/350 2024-04-15 13:01 by Late婉安
[考研] 287求调剂 +6 南沨 2024-04-14 6/300 2024-04-14 23:08 by lincunhui
[考研] 280求调剂 +4 黑皮冰棒 2024-04-12 7/350 2024-04-14 23:06 by 永字号
[考研] 290求调剂 +3 杨yhr 2024-04-14 5/250 2024-04-14 21:50 by coco1981
[考研] 309求调剂 +3 留不住放不下 2024-04-14 6/300 2024-04-14 15:28 by 19902169
[考研] 338求调剂 +3 18280338551 2024-04-14 5/250 2024-04-14 10:03 by tcni
[考研] 290,一志愿报考重庆大学生物与医药专硕,求调剂 +4 GPX4 2024-04-13 5/250 2024-04-13 17:19 by lincunhui
[论文投稿] material research express还没交开源版面费,已经线上出版了 10+3 lzjslyz 2024-04-12 3/150 2024-04-13 11:09 by kingzgh
[考研] 277求调剂 +10 尊的很想上学 2024-04-12 11/550 2024-04-13 07:11 by coco1981
信息提示
请填处理意见