Bessel的个人博客分享 http://blog.sciencenet.cn/u/Bessel

博文

LAMMPS 软件使用入门:3. 简单的算例

已有 49154 次阅读 2016-5-5 11:17 |个人分类:软件的使用|系统分类:科研笔记

先简要地说说 LAMMPS 的运行过程,LAMMPS 本身没有图形界面,所有的计算模
拟过程都是在 Linux 终端执行,LAMMPS 运行所需要的指令需要用户写在一个输入
文件里(input script)
,一般以.in 为后缀名。
在 lammps-10Feb15/examples 文件夹下,有大量的使用 LAMMPS 的实例,是非常
好的学习题材。在这里,我们首先用 LAMMPS 来模拟一个非常简单的体系,从而对
LAMMPS 有一个初步的认识。我们来做相互作用势为 Lennard-Jones 12-6 的小球在
正则系宗下的分子动力学模拟,下面是我们要输入给 LAMMPS 的指令集,全部写在
一个叫 LJ.in 的文档里面:


# LJ 12-6 system with NVE ensemble
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 5 0 5 0 5
create_box 1 box
create_atoms 1 box
mass 1 1.0
velocity all create 3.0 825577 dist gaussian
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify every 20 delay 0 check no
fix 1 all nve
timestep 0.005
thermo 1000
run 10000
clear

LAMMPS的指令统一写成“关键字 参数1  参数2 ...”的形式,每一行只能有一条指令。下面我来解释一下这些指令的意义。


# LJ 12-6 system with NVE ensemble
第一行一般是一些说明性的文字,例如解释一下这个输入文件的作用,模拟的是什么
系统,作者是谁,什么时候完成的。这样做为了方便以后查阅起来方便。在 LAMMPS
里用符号 # 来注释掉不需要执行的指令。


units  lj
units 关键字用来说明整个模拟体系所涉及到的物理量的单位制,后面的参数 lj 是在
告诉 LAMMPS 所有物理量都采用无量纲的约化单位。LAMMPS 还有很多种单位制
可以选择,这需要根据实际体系来具体考虑,例如“units si”、
“units real”等等。


atom_style  atomic
atom_style 关键字用来说明模拟里面的基本物质单元所具备的属性,参数 atomic 表
示所有的单元都是粗粒化的小球,如果是参数 angle 则表明每一个单元里面还包括了
键长和键角这两个属性,参数 charge 表示每一个单元是粗粒化的小球另外还附有电
荷。


lattice fcc 0.8442
region box block 0 5 0 5 0 5
create_box 1 box
create_atoms 1 box
这 4 条指令的组合用来构造模拟所需要的初始构型,在这里是按照晶格的方式创建原
子。第一条指令是说所有的原子的初始位置按照面心立方(FCC)的形式排列,晶格
常数为 0.8842; 第二条指令是说模拟的空间区域在 X, Y 和 Z 三个方向上都是有 0 到
5 这个范围,注意这里的长度都是无量纲的; 第三条指令是说按照第二条指令指定的空
间区域创造一个模拟盒子,所有的原子都只能在这个模拟盒子里; 第四条指令是说按
照第一条和第二条指令指定的参数创造一种布满整个模拟盒子的原子,同时所创造的
原子的种类也定义为数字“1”。


mass 1 1.0
mass 关键字用来给所有属于同一种类的原子设定质量的数值,后面跟着的第一个参数
“1”是原子的种类,既要为所有种类为“1”的原子设定质量,第二个参数“1.0”才是
质量的数值,这个指令的意思就是所有种类为“1”的原子的质量都是 1.0。


velocity all create 3.0 825577 dist gaussian
velocity 关键字用来给原子设定初始速度,后面的参数 all 表示模拟盒子里所有的原
子,不分钟类种类都按照同一种方式设定初始速度。后面的一串参数是说所有的速度
都是从满足高斯分布的随机数中抽取获得的。


pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 2.5


这两条指令组合起来规定了原子之间的相互作用的形式,第一条指令是说相互作用为
LJ 12-6 势,截断半径为 2.5, 第二条是说 LJ 12-6 中的 ε 和 σ 分别为 1.0 和 1.0,截断
半径为 2.5。其实截断半径可以只声明一次,不需要两条语句都重复声明。


neighbor 0.3 bin
neigh_modify every 20 delay 0 check no


这两条指令组合起来规定了 LAMMPS 如何构建 neighbor list。


fix 1 all nve
这条指令的意思是模拟在正则系宗 NVE 下运行。


timestep 0.005
这条指令的意思是模拟的步长 δt = 0.005。


thermo 1000
每隔 1000 步模拟步长输出一次系统的热力学参量。


run  10000
模拟运行 10000 步。


clear
模拟运行结束之后,把所有的指令清零。


以上这些内容就是用 LAMMPS 所需要的一个完整的输入文件,这个输入文件实现
了一个教科书里常见的“LJ 12-6”的分子动力学模拟。最后一部分
内容就是把上一小节写好的输入文件导入 LAMMPS,让 LAMMPS 去做模拟。我们
需要在命令行下输入这样一条指令就可以了:
mpirun -np number_processors lmp_mpi -in LJ.in
其中 number_processors 是你想要用的 CPU 核数,在使用时要根据服务器的硬件性
能换成具体的数字,lmp_mpi 就是我们之前编译成功的 LAMMPS 可执行文件,LJ.in
就是输入文件,通过关键字 -in 来导入 LAMMPS。比如,我的服务器里有 8 块 CPU
核可以用来做并行计算,那么我的指令可以写成:
mpirun -np 8 lmp_mpi -in LJ.in





https://blog.sciencenet.cn/blog-301704-975050.html

上一篇:LAMMPS 软件使用入门:2. 软件的安装
下一篇:受限于多孔材料内的硬球液体的状态方程
收藏 IP: 159.226.49.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (5 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 04:29

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部