LAMMPS 即 Large-scale Atomic/Molecular Massively Parallel Simulator (大规模原子分子并行模拟器),是由美国能源部桑迪亚国家实验室开发的一种开源的经典分子动力学模拟代码
in 文件描述一个符合牛顿定律的模拟过程,内容大致包含三个部分:
构建所模拟的体系,创造一个模拟环境的以及最后输出想得到的数据
一、各类文件
1 in :程序写入
2 log :写入状态信息(if the switch is used?)
3 screen : 决定结果的是否进行屏幕输出
4 var name : 定义一个变量,name指变量名,可为字母也可为字符串,形式$x / $ {abc}
二、指令系统介绍
1.一般来说指令的顺序并不重要,但在以下几种情况中必须注意:1. LAMMPS并不是全部读完所有指令才执行,而是读一行执行一次,因此下面的两组语句是不同的:
timestep 0.5 #以下的两个模拟其步长均为0.5 fmsec
run 100
run 100
run 100 #第一个模拟采用缺省值步长为1 fmsec
timestep 0.5
run 100 #第二个采用步长为0.5 fmsec
2. 某些指令只在其他指令之后才生效,如要得到系统温度必须先进行各种定义
3 .若A指令在B之前,B可以引用A定义的变量
三、in语法规则
1.在LAMMPS中要区分大小写,一般指令名称用小写字母,文件及用户定义ID Strings 用大写。
2. LAMMPS对每行语句的语法要求如下:
- 当语句太长一行放不下时,在语句一行结束的时候输入字符 “&” 表示下一行的语句接着上一行继续。
- #注释,但有例外
- 紧跟在$后的为定义变量
- 单词间用空格隔开
- 第一个词为指令名,后面的字段都是相关的参数
四. 语句结构
1.Lammps官网命令,写in data文件时注意看:https://lammps.sandia.gov/doc/Commands_all.html
2.in文件包括四个部分:初始值,定义原子和盒子,设定条件,run
- 大致了解这些命令如下 #附断裂实例操作 : https://youtu.be/M8NPAk0Cs7Q
- lattice(晶格参数),region(选择一个而区域),create_box(创建一个盒子),create-atoms(创建原子)——通过这四个命令创建原子(按晶格的方式),这种方式适合没有分子拓扑信息的晶体,如金属,盐等有规则晶体信息的物质。
五.撰写data,in文件并计算
以TIP4P水分子为例。#用in文件撰写简单的小分子模拟
水分子模型参数(看下面in文件对照着来看):Lammps官网-教程-8.5节howto discussions:https://lammps.sandia.gov/doc/Howto.html
#强力安利软件:UltraEdit——超强大的文本编辑器,编辑in data文件。(真的超好用,之后遇到很多更复杂的文件,如力场,记事本已经无法满足了,会乱序)
data file for tip4p
3 atoms
2 bonds
1 angles
#非刚体结构in文件中不能写masses,刚体的话要写。 full中read_data格式无masses
Coords #坐标 x y z
1 1.360 1.39 0.570
2 1.770 0.81 1.220
3 0.430 1.31 0.740
Types #原子编号 类型
1 1
2 2
3 2
Charges #电荷
1 -1.0484
2 0.5242
3 0.5242
#下面时拓扑信息 可看最开头总数
Bonds #键的编号 键的类型 谁和谁连在一起
1 1 1 2
2 1 1 3
Angles #一个角
1 1 2 1 3
# in file for tip4p model
echo screen #调试用,打印到屏幕或log文件。 none or screen or log or both
units real #lj or real or metal or si or cgs or electron or micro or nano
dimension 3 #2 or 3
boundary p p p #p f s m
atom_style full #重要 full:molecular + charge; atomic:only the default values;charge:charge
bond_style harmonic
angle_style harmonic
#创建一个box,并选择一个区域把水放进去
region box block 0 10 0 10 0 10 #规划区域:定义一个长方体区域叫box,长宽高 单位angstrom
create_box 2 box bond/types 1 angle/types 1 extra/bond/per/atom 2 extra/angle/per/atom 1 #create_box N region-ID keyword value .....;box支持多少种(大于等于实际最大值):原子类型 键 角 每个原子包含键和角
molecule tip4 mol.data #导入模型,需要molecule安装包才支持。
#read_data tip4.data #计算完后,生成restart.data,再把in文件改一下并且下面的设置部分改一下继续算。
#region w2 block 10 30 10 30 10 30 #可定义一个之间空的区域w2
lattice sc 5.0 #设置晶格:晶胞类型,晶格常数。让加入的原子分子在个点上。注意边界也有分子
create_atoms 0 region w1 mol tip4 515 units box #从0开始,实际上没有0这种原子类型。设1之后,加上分子就有三种原子类型,上面create_atoms可改为3
#create_atoms 0 random 10 1234 w1 mol tip4 12 3units box #random不用在格点上,故lattice可不用。随机生成,前面部分是生成原子,如果后面跟了分子,则是生成以随机点为质心的分子,前面注意要对应box要支持这种分子的拓扑结构,要对应。如果没跟分子,不能从0开始
mass 1 15.9994 #原子类型,质量
mass 2 1.008
neighbor 2.0 bin #截断半径相关的东西
neigh_modify delay 0 every 1 check yes #邻近原子列表更新速度
pair_style lj/cut/tip4p/long 1 2 1 1 0.125 8.5 #相互作用势:原子编号类型, 键和角的相互作用势:OM距离 ,截断
pair_coeff 1 1 0.1852573718 3.1589
pair_coeff 1 2 0.0000000000 1.5795
pair_coeff 2 2 0.0000000000 0.0000
bond_coeff 1 1000 0.9572
angle_coeff 1 3000 104.52
kspace_style pppm/tip4p 1.0e-5 #计算长程库仑项,需要kspace安装包才支持
dump 1 all custom 10 tip4.lammpstrj id type x y z #将信息写入tip4.lammpstrj,此后可用vmd打开视图
dump_modify 1 sort id
#dielectric 80.0
fix 1 all shake 0.0001 2 0 b 1 a 1 #设置偏差控制精度提示,步数,步数,键和角
fix 2 all nve #系综,后面可跟定义的参数
fix 3 all temp/rescale 1 300 300 1 1.0 1.0
#minimize 1.0e-12 1.0e-12 1000 1000 #能量最小化参数,指数越大最小化成都越深
thermo 1000
timestep 0.05 #步长fs
run 100000
write_data tip41.data #输出
write_restart tip41.restart