本文为自学笔记, 仅供参考, 如有理解不正确的地方欢迎指正.
安装
git clone git@github.com:lammps/lammps.git
cd lammps/
cd src/
make mpi
make serial -j20
#针对特定的版本 g++_openmpi等
vi MAKE/OPTIONS/Makefile.g++_openmpi
make g++_openmpi -j20
编译的相关指令
- 需要什么包就编译什么包,编译了all,有的编译不成功最后生成serial/mpi时反而容易编译失败
make package
使用make package
可以查看支持的package命令和安装卸载命令
(python37) cndaqiang@mommint:~/code/lammps/src$ make package
Standard packages: asphere body class2 colloid compress coreshell dipole gpu granular kim kokkos kspace latte manybody mc message misc mliap molecule mpiio mscg opt peri poems python qeq replica rigid shock snap spin srd voronoi
User-contributed packages: user-adios user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars user-diffraction user-dpd user-drude user-eff user-fep user-h5md user-intel user-lb user-manifold user-meamc user-mesodpd user-mesont user-mgpt user-misc user-mofff user-molfile user-netcdf user-omp user-phonon user-plumed user-ptm user-qmmm user-qtb user-quip user-reaction user-reaxc user-scafacos user-smd user-smtbq user-sdpd user-sph user-tally user-uef user-vtk user-yaff
Packages that need system libraries: compress mpiio python user-lb
Packages that need provided libraries: gpu kokkos message poems user-atc user-awpmd user-colvars user-mesont
Packages that need external libraries: kim latte mscg voronoi user-adios user-h5md user-molfile user-netcdf user-plumed user-qmmm user-quip user-smd user-vtk
make package list available packages
make package list available packages
make package-status (ps) status of all packages
make package-installed (pi) list of installed packages
make yes-package install a single pgk in src dir
make no-package remove a single pkg from src dir
卸载user-quip
通过
make no-user-quip
安装body
make yes-body
等
清空编译环境
用于重新编译
make clean-all
make clean-machine
make no-all
重新编译即可
输入文件与执行
- 注释
#
- 参数即命令, lammps运行后逐条输入命令,如下图, 开始设置计算参数或者运行
run n
,执行结束后,继续输入run n
则会继续计算 - 当然也可以通过下面的方式执行
- 重定向
lmp_serial < in.water
- 管道
cat in.water | lmp_serial
- 参数
lmp_serial -i in.water
- 重定向
- 命令对大小写敏感
- 续行用
&
结尾 - 使用
variable
定义变量,加$
调用, 可以print, if
等语法执行 - 命令之间有前后顺序, 命令二次执行可能会覆盖/补全前面的设置,如
atom_style
就是最后一次设置的值为最终结果 - lammps的计算元素主要有原子、元素、mol、组、区域(atom or type or mol or group or region)这几类, 可以通过
region,group
等命令进行定义,
很多命令也会调用相应的region ID, group ID
进行进一步的设置
其他的命令如fix,dump
每一次执行也要创建一个ID,后面可以根据这个ID进行修改已经输入的命令(fix_modify,dump_modify
) - 命令的风格一般是
命令 本命令的ID 修改的计算元素/命令的ID 修改的性质/style 一堆参数
示例in.water
units electron
atom_style full
pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007
bond_style class2
angle_style harmonic
kspace_style pppm/tip4p 0.0001
read_data data.water
pair_coeff * * 0 0
pair_coeff 1 1 0.000295147 5.96946
neighbor 2.0 bin
run 2
初始化命令
units
单位
可以参考lammps:unit的说明
This command sets the style of units used for a simulation. It determines the units of all quantities specified in the input script and data file, as well as quantities output to the screen, log file, and dump files. Typically, this command is used at the very beginning of an input script.
例如第一性常用的原子单位制类似的units electron
, 常见的units real
, 更多的看说明文档
dimension
纬度
2或3维, 默认3维
dimension 2
dimension 3
boundary
周期性条件
更多参考boundary
Syntax
boundary x y z
x,y,z = p or s or f or m, one or two letters
- p is periodic
- f is non-periodic and fixed
- s is non-periodic and shrink-wrapped
- m is non-periodic and shrink-wrapped with a minimum value
Examples
boundary p p f
boundary p fs p
boundary s f fm
#默认
boundary p p p
下面是各种xxx_style
如atom_style
决定了计算过程中会存储原子的哪些性质,用于计算力使用的物理量,以及read_data
的命令
如read_data
中有角度的性质, 就不能只设置键长atom_style bond
,会报错
ERROR: Angle_style command when no angles allowed (../input.cpp:1324)
Last command: angle_style harmonic
需要在read_data, create_atoms, set
等命令前执行.
atom_style
atom_style
目前设置atom_style full
即可, 默认atom_style atomic
bond_style
angle_style
kspace_style
neighbor
参考(八)neighbor command@Roy Kid
临近表
neighbor skin style
#示例
neighbor 0.3 bin
- skin = extra distance beyond force cutoff (distance units),对距离小于
force cutoff + skin
的原子建立表 - style = bin or nsq or multi, 计算表的算法
为了减少计算量, lammps只计算距离在一定范围内的原子间受力,这些成对的原子在一定时间步长内还是成对的关系, 将原子间距小于(cutoff + skin distance
)的原子保存为一个neighbor list
的表, 不用每一步都进行成对原子搜索.
当表中的原子间距超过cutoff + skin distance
就需要更新表信息, 显然skin distance
越大, 更新的频率就越低, 表中的原子数多计算量也会增加, 一个需要权衡的参数.
style 的选取决定了建立表的算法
- bin 计算量随着 原子总数/处理器核数 线性变化;
- nsq 计算量随着 (原子总数/处理器核数)^2 线性变化,但是在特定情况下会比bin要快。
- multi 则是一个为了适应具有变化很大的cutoff的体系,会对每种原子建立不同的list。这样子的话就不会出现无谓的计算。
neigh_modify
建立临近表的参数,更新的频率.
neigh_modify keyword values ...
#示例: 距离上一步更新的后5步更新?
neigh_modify delay 5
原子构型
只有设置了上面的各种 xxx_style
后才可以设置原子构型
read_data
从构型文件中读入原子构型
read_data data.water
构型文件格式, 并不需要全部设置
- 首行: 标题 (即使是空白,也要保留一行)
- 建议首行和下面的统计信息之间保留一行空白,没意义,只是排版好看
- 统计信息,下面的统计信息没有顺序,但是不能把后面的``Masses`等结构信息放在任何统计信息的前面
X atoms
体系的总原子数X bonds
体系的总键数X angles
体系的总角数X dihedrals
体系的总二面角数-
X impropers
体系的总impropers dihedral数 X atom types
原子类型数X bond types
化学键类型数X angle types
键角类型数X dihedral types
二面角类型数-
X improper types
impropers dihedral类型数 X_min X_max xlo xhi
模拟盒子在x方向的范围X_min X_max ylo yhi
模拟盒子在y方向的范围X_min X_max zlo zhi
模拟盒子在z方向的范围
- 下面的具体原子、键、角等信息都是采用下面的格式,
Masses和下面的内容要隔一行,空白或者#都可以
这些键角信息可以交换顺序标签 #空行,这一空行不能省略 编号 数值 ... 编号 数值
Masses
原子质量
示例Masses 1 15.9994 2 1.0080
Bonds
Angles
Bond Coeffs
Angle Coeffs
Atoms
原子坐标
Atoms
1 1 1 -1.1128 3.84600000 5.67200001 1.32300000
2 1 2 0.5564 2.97900000 7.05400000 0.85700000
3 1 2 0.5564 5.52500001 5.69700001 0.45100000
#原子编号
- 等等
data.water示例
LAMMPS Description
3 atoms
2 bonds
1 angles
2 atom types
1 bond types
1 angle types
0 35.233 xlo xhi
0 35.233 ylo yhi
0 35.233 zlo zhi
Masses
1 15.9994
2 1.0080
Bond Coeffs
1 1.78 0.2708585 -0.327738785 0.231328959
Angle Coeffs
1 0.0700 107.400000
Atoms
1 1 1 -1.1128 3.84600000 5.67200001 1.32300000
2 1 2 0.5564 2.97900000 7.05400000 0.85700000
3 1 2 0.5564 5.52500001 5.69700001 0.45100000
Bonds
1 1 1 2
2 1 1 3
Angles
1 1 2 1 3
关于lammps学习的一点汇总 MS建好模型后使用Discover模块,j康Forcefield设置为cvff,计算后将构型文件到处保存为
.car, .cor
类型./msi2lmp.exe ** -class I -frc cvff > data.**
将导出的两个文件转为lammpsdata文件
read_restart
创建原子构型
通过命令创建
lattice
晶格
lattice style scale keyword values ...
#示例: 六方晶系, 缩放系数0.7?
lattice hex 0.7
region
建立模拟区域
region ID style args keyword arg ...
#style = delete or block or cone or cylinder or plane or prism or sphere or union or intersect
#示例: 创建ID为box的region
region box block 0 40 0 10 -0.25 0.25
create_box
相应region的原子类型数
create_box N region-ID keyword value ...
#示例:三种原子
create_box 3 box
create_atoms
create_atoms type style args keyword values ...
#示例:在box style中填充原子
create_atoms 1 box
delete_atoms
删除指定的原子delete_atoms
delete_atoms style args keyword value ...
#style = group or region or overlap or porosity
#以x,y,z=10,4,0为球心,半径为3的区域void1, 删除void中的原子
region void1 sphere 10 4 0 3
delete_atoms region void1
mass
mass I value
# I = atom type (see asterisk form below)
# value = mass
#示例
mass 1 1.0
mass 2 1.0
mass 3 1.0
复制
力场、计算、输出参数
力场系数可以通过这些命令定义 : pair_coeff, bond_coeff, angle_coeff, dihedral_coeff, improper_coeff, kspace_style, dielectric, special_bonds. 注意, 其实力场系数也可以在 data 文件中制定
各 种 模 拟 参 数 由 这 些 命 令 设 置 : neighbor, neigh_modify, group, timestep, reset_timestep, run_style, min_style, min_modify.
pair_style
原子间的相互作用势,pair_style
tip4p的水模型也在这里设置
pair_style style args
- style = one of the styles from pairs
- args = arguments used by a particular style
Categories of pair styles
- Solids
- eam, eim, meam, adp
- Bio and polymers
- charmm, class2, gromacs, dreiding
- Reactive
- tersoff, bop, airebo, comb, reax, reax/c
- Coarse-grained
- dpd, granular, sph, peri, colloid, lubricate, brownian, FLD
- Aspherical
- gayberne, resquared, line, tri
- Pair table for tabulation of any pair-wise interaction
- Pair hybrid style allows for hybrid models
- polymers on metal
- CNTs in water
- solid-solid interface between 2 materials
- 也可以使用自己优化出来的势场, 需要重新编译
示例
pair_style lj/cut 1.12246
# lj/cut : cutoff Lennard-Jones potential without Coulomb,
# 1.12246 : cutoff = global cutoff for Lennard Jones interactions (distance units)
pair_coeff
描述每种类型的原子之间的相互作用, pair_coeff
也可以在read_data
中设置,这里的具体参数要参考pair_style中特定的类型
可以输入多次,会覆盖之前的设置
pair_coeff I J args
- I,J = atom types (see asterisk form below), I=1,N, I<=J, 可以使用通配符
*
代替 - args = coefficients for one or more pairs of atom types
示例
pair_style lj/cut 1.12246
pair_coeff * * 1.0 1.0 1.12246
对于lj/cut
,I,J后面的参数分别为LJ势中的$\epsilon, \sigma$和截断距离$r_c$,详见pair_lj
group
group就是对原子进行分组,被group后的原子会被分配一个group-ID,这个group-ID被用到fix、compute、dump等命令中 即使不对原子进行分组,lammps也会设置一个默认的原子组:all,也就是把所有的原子全部划分到all组内。
示例
#用region设置left和right的区域, 用于设置group
region 1 block INF INF INF 1.25 INF INF
#创建lower组
group lower region 1
region 2 block INF INF 8.75 INF INF INF
#创建upper组
group upper region 2
#合并lower,upper组为boundary组
group boundary union lower upper
#减去boundary创建flow组
group flow subtract all boundary
set
可以设置原子/种类/mol/组/区域的性质set
set style ID keyword values ...
- style = atom or type or mol or group or region
- ID = atom ID range or type range or mol ID range or group ID or region ID
#设置lower组的原子类型为2 ? set group lower type 2
compute
设置对特定组的性质的计算,如键长、键角、受力、PE势、压力、温度等compute
compute ID group-ID style args
- ID = user-assigned name for the computation, ID金威字母数字下划线
- group-ID = ID of the group of atoms to perform the computation on
- style = one of a list of possible style names (see compute)
- args = arguments used by a particular style
#计算flow组的的温度, 这个计算任务称为mobile
compute mobile flow temp
fix
给group中的原子施加约束,如控制温度(系综)、施加约束力等fix
LAMMPS翻译系列】fix命令@Michael Duan
fix ID group-ID style args
- ID = user-assigned name for the fix
- group-ID = ID of the group of atoms to apply the fix to
- style = one of a long list of possible style names (see below)
- args = arguments used by a particular style
- 创建相同的fix ID时, 之前创建的规则会被覆盖
unfix ID
可用于删除 fix_modify
可用于修改之前fix
定义的内容fix_modify fix-ID keyword value ...
fix_modify
keyword = temp or press or energy or virial or respa or dynamic/dof or bodyforces- temp value = compute ID that calculates a temperature
- press value = compute ID that calculates a pressure
- energy value = yes or no
- virial value = yes or no
- respa value = 1 to max respa level or 0 (for outermost level)
- dynamic/dof value = yes or no yes/no = do or do not re-compute the number of degrees of freedom (DOF) contributing to the temperature
- bodyforces value = early or late early/late = compute rigid-body forces/torques early or late in the timestep
#设置all组的原子系综为nve
fix 1 all nve
#设置flow组温度受到velocity rescaling调控
#fix ID group-ID temp/rescale N Tstart Tstop window fraction
#N = perform rescaling every N steps
#Tstart,Tstop = desired temperature at start/end of run (temperature units)
#window = only rescale if temperature is outside this window (temperature units)
#fraction = rescale to target temperature by this fraction
fix 2 flow temp/rescale 200 1.0 1.0 0.02 1.0
#对fixid为2的体系计算mobile定义的温度
fix_modify 2 temp mobile
velocity
设置或更改一组原子的速度 velocity
velocity group-ID style args keyword value ...
示例
#设置boundary组上的速度值为vx=0,vy=0,vz=0
velocity boundary set 0.0 0.0 0.0
运行和输出
timestep
后续md的时间步长, 单位由units
决定. 不同单位的默认值不同
thermo N
每N步输出热动力学信息,N=10时,如
Step Temp E_pair E_mol TotEng Press Volume
0 1.0027471 0 0 0.68849216 0.46317653 1143.0857
10 1.091169 0 0 0.74920316 0.50401927 1143.0857
20 1.3047062 -0.057652912 0 0.83816619 0.67076018 1143.0631
30 1.2108687 -0.014991048 0 0.81639861 1.9009106 1143.0112
40 1.1789723 -0.087469689 0 0.72201977 2.6110714 1143.1194
...
thermo_style
设置用于将热力学数据打印到屏幕和日志文件的样式和内容。
thermo_modify
修改/设置thermo_style
的结果, thermo_modify
thermo_modify keyword value ...
#按照计算mobile输出温度信息
thermo_modify temp mobile
dump
每N个时间步将原子信息(坐标、受力、原子速度等)的快照转储文件(文本、压缩、图片等)中,dump 图片视频需要在编译的时候添加参数和库依赖
dump ID group-ID style N file args
- ID:dump命令编号
- group-ID:输出的原子组ID
-
style:输出类型.
style = atom or atom/gz or atom/zstd or *atom/mpiio or cfg or cfg/gz or cfg/zstd or cfg/mpiio or custom or custom/gz or custom/zstd or custom/mpiio or dcd or h5md or image or local or local/gz or local/zstd or molfile or movie or netcdf or netcdf/mpiio or vtk or xtc or xyz or xyz/gz or xyz/zstd or xyz/mpiio - N:每隔N步输出一次文件
- file:保存的文件名
- args:参数
dump atom
atom型输出,没有参数
#每10步保存all组的原子结构
dump 1 all atom 10 dump.obstacle
输出文件
ITEM: TIMESTEP
0
ITEM: NUMBER OF ATOMS
769
ITEM: BOX BOUNDS pp ss pp
0.0000000000000000e+00 5.1374269009840255e+01
-2.2245711031688635e-03 2.2247935602791809e+01
-3.2108918131150160e-01 3.2108918131150160e-01
ITEM: ATOMS id type xs ys zs
1 2 0 9.998e-05 0.5
3 2 0.025 9.998e-05 0.5
5 2 0.05 9.998e-05 0.5
7 2 0.075 9.998e-05 0.5
9 2 0.1 9.998e-05 0.5
......
ITEM: TIMESTEP
10
ITEM: NUMBER OF ATOMS
769
ITEM: BOX BOUNDS pp ss pp
0.0000000000000000e+00 5.1374269009840255e+01
-2.2245711031688635e-03 2.2247935602791809e+01
-3.2108918131150160e-01 3.2108918131150160e-01
ITEM: ATOMS id type xs ys zs
1 2 0 9.998e-05 0.5
3 2 0.025 9.998e-05 0.5
5 2 0.05 9.998e-05 0.5
...
atom/gz保存压缩型原子构型,文件的拓展名必须是`.gz,不然会报错
dump 1 all atom/gz 10 dump.obstacle.gz
解压后和atom型一致
gzip -d dump.obstacle.gz
dump image
image型输出,需要编译时添加jpeg库
dump ID group-ID style N file color diameter keyword value ...
LAMMPS中dump image command和dump movie command@peachRL
- style:image or movie
- file:导出的文件名
- color:由什么来区分粒子的颜色,
比如说type:
- type 1 = red
- type 2 = green
- type 3 = blue
- type 4 = yellow
- type 5 = aqua
- type 6 = cyan
- 更多颜色就要由dump_modify acolor command来实现了
- diameter:由什么来区分粒子的大小,比如type。默认所有type的粒子直径1.0,更多设置由dump_modify adiam command来实现
- keyword:其他设置,有atom、adiam、bond、line、tri、body、fix、size、view、center、up、zoom、persp、box、axes、subbox、shiny、ssao
- zoom缩放模拟框的大小
- adiam重置直径数据
#每10步保存构型
dump 2 all image 10 image.*.jpg type type &
zoom 1.6 adiam 1.5
输出image.0.jpg,image.10.jpg,...
#设置dump id=2中的*号为五位整数
dump_modify 2 pad 5
此时输出为image.00000.jpg,image.00010.jpg,...
run N
进行md计算,跑N步
log文件
log.lammps
中包含计算参数和屏幕输出的内容
耗时比例
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0047696 | 0.0047696 | 0.0047696 | 0.0 | 27.22
Neigh | 0.0028307 | 0.0028307 | 0.0028307 | 0.0 | 16.15
Comm | 0.00031137 | 0.00031137 | 0.00031137 | 0.0 | 1.78
Output | 0.00034046 | 0.00034046 | 0.00034046 | 0.0 | 1.94
Modify | 0.0084453 | 0.0084453 | 0.0084453 | 0.0 | 48.19
Other | | 0.0008266 | | | 4.72
报错
Unrecognized atom style ‘full’ is part of the MOLECULE package
(python37) cndaqiang@mommint:~/work/rpmd/LearnPIMD/pimd-tutorial/master/exercises/day-1/ex-1$ lmp_serial < in.water
LAMMPS (10 Feb 2021)
ERROR: Unrecognized atom style 'full' is part of the MOLECULE package which is not enabled in this LAMMPS binary. (../atom.cpp:710)
Last command: atom_style full
通过lmp_serial --help
查看支持的 Atom styles
* Atom styles:
atomic body charge ellipsoid hybrid
line sphere tri
发现没有full
解决方案:重新编译,添加MOLECULE模块支持
make yes-MOLECULE
make serial -j10
再lmp_serial --help
查看
* Atom styles:
angle atomic body bond charge
ellipsoid full hybrid line molecular
sphere template tri
可以了
同样的问题
- is part of the KSPACE package
(python37) cndaqiang@mommint:~/work/rpmd/LearnPIMD/pimd-tutorial/master/exercises/day-1/ex-1$ lmp_serial < in.water LAMMPS (10 Feb 2021) ERROR: Unrecognized pair style 'lj/cut/tip4p/long' is part of the KSPACE package which is not enabled in this LAMMPS binary. (../force.cpp:288) Last command: pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007
同上
make yes-KSPACE make serial -j10
- is part of the CLASS2 package
LAMMPS (10 Feb 2021) ERROR: Unrecognized bond style 'class2' is part of the CLASS2 package which is not enabled in this LAMMPS binary. (../force.cpp:399) Last command: bond_style class2
同上
make yes-CLASS2 make serial -j10
- is part of the USER-MISC package
ERROR: Unrecognized fix style 'ipi' is part of the USER-MISC package which is not enabled in this LAMMPS binary. (../modify.cpp:916) Last command: fix 1 all ipi 300K-G.0 32345 unix
同上
make yes-USER-MISC make serial -j10
- is part of the COMPRESS package
ERROR: Unrecognized dump style 'atom/gz' is part of the COMPRESS package which is not enabled in this LAMMPS binary. (../output.cpp:572)
同上
make yes-COMPRESS make serial -j10
not included
ERROR: Support for writing images in JPEG format not included
#修改Makedile文件
vi MAKE/OPTIONS/Makefile.g++_serial
#添加JPEG参数
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG
#设置库位置,根据实际系统决定
JPG_INC = -I/usr/include/
JPG_PATH = -L/usr/lib/x86_64-linux-gnu/
JPG_LIB = -ljpeg
make g++_serial
后继续报错
../image.cpp:31:10: fatal error: jpeglib.h: No such file or directory
#include <jpeglib.h>
^~~~~~~~~~~
compilation terminated.
因为系统缺少相应库jpeglib.h: No such file or directory
sudo apt-get install libjpeg62-dev
再make g++_serial
就可以了,获得可执行程序lmp_g++_serial
参数报错
ERROR: Dump atom/gz only writes compressed files (../dump_atom_gz.cpp:33)
Last command: dump 1gz all atom/gz 10 dump.obstacle
保存atom/gz
型数据要求参数中的文件名的拓展名必须为压缩格式
#错误
dump 1gz all atom/gz 10 dump.obstacle
#正确
dump 1gz all atom/gz 10 dump.obstacle.gz
Environment or make variable QUIP_ROOT must be set.. Stop.
编译lammps时报错
make[1]: Leaving directory '/home/NFS/code/lammps/src'
Compiling LAMMPS for machine serial
make[1]: Entering directory '/home/NFS/code/lammps/src/Obj_serial'
../../lib/quip/Makefile.lammps:17: *** Environment or make variable QUIP_ROOT must be set.. Stop.
make[1]: Leaving directory '/home/NFS/code/lammps/src/Obj_serial'
make[1]: Entering directory '/home/NFS/code/lammps/src/Obj_serial'
../../lib/quip/Makefile.lammps:17: *** Environment or make variable QUIP_ROOT must be set.. Stop.
make[1]: Leaving directory '/home/NFS/code/lammps/src/Obj_serial'
Makefile:195: recipe for target 'serial' failed
make: *** [serial] Error 2
之前make yes-all
时, 编译了很多package, QUIP 的package没有编译好/需要额外的设置,暂时不需要,卸载即可
通过make package
查看到名字为user-quip
,执行卸载
make no-user-quip
再编译
案例学习
参考
workshop
tutorials,这个教程中ppt提到的各种计算案例在lammps的源码目录的example目录下面都
推荐
我爱搜集网@Michael Duan
demo
Live demo #1: running a test example
lammps/examples/obstacle
本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!