在lammps模拟中常用的模拟设置 In 世界杯澳大利亚 @2025-11-13 23:23:28
文章目录
1.不同原子类型的data文件比较2.region命令中如何选择合适的单位3.如何给分子建立分组4.如何将正交box转为斜交box5.如何实现工件的旋转模拟6.常用的刚体、固定及弹簧连接模拟7.如何除去两原子间的受力8.列举几种常用的速度设置方法9.在蒸发模拟中如何动态地删除原子10.防原子漂移、原子的平动振动模拟11.如何模拟恒定电场及交变电场
1.不同原子类型的data文件比较
1.full类型 full类型对应的原子信息分别为:原子ID(atom-ID) 分子ID(molecule-ID) 原子类型(atom-type) 电荷(q) x坐标(x) y坐标(y) z坐标(z) nx ny nz。nx、ny、nz为可选项,主要用于周期性原子定位。 2.charge类型 原子信息主要包括:原子ID(atom-ID) 原子类型(atom-type) 电荷(q) x坐标(x) y坐标(y) z坐标(z)。 3.atomic类型 原子信息仅需要:原子ID(atom-ID) 原子类型(atom-type) x坐标(x) y坐标(y) z坐标(z)。 4.类型转换 full类型转换为charge类型,删除分子ID和nx、ny、nz即可。 full类型转换为atomic类型,删除分子ID、电荷q和nx、ny、nz即可。
2.region命令中如何选择合适的单位
(1)建模时优先选择units lattice(不写units,默认lattice) 使用晶格常数来设置box尺寸能够保证模型的周期性,防止原子重叠。 (2)模型建好后尽量用units box 在lammps中建好box或者已经填充完原子后,之后可能会用region命令来划分边界层、牛顿层等区域,用units box可以更加精准的设置尺寸。 (3)读取data文件后用units box 模型通过read_data直接读取后,in文件中基本不会再设置lattice命令,没有指定的晶格常数的情况下用units box。
3.如何给分子建立分组
group ID include molecule
# 将原子添加组中,添加的原子和组中的原子的分子ID相同。
# 将水分子归为H20组
group H2O type 1 #将O原子(type 1)定义为H2O组
group H2O include molecule #将水分子中与O原子为同一分子的其他原子归入同一H2O组
# 将氧化石墨烯归入GO组
group GO type 3 #将C原子(type 3)定义为GO组
group GO include molecule #将氧化石墨烯其他的原子归入GO组
4.如何将正交box转为斜交box
大多数的lammps模拟在正交box中进行的,xyz轴的夹角90°,并且模拟过程中坐标轴的夹角不会变化。但在相变、剪切的模拟过程中,需要坐标轴的夹角发生变化,这就要用到斜交(triclinic)box。 1.使用change_box命令
# 正交转斜交box
change_box all triclinic
# 斜交转正交box
change_box all ortho
2.修改data文件 在data文件的box尺寸区域,在zlo zhi的后边添加一行斜交数据:0.0 0.0 0.0 xy xz yz 正交转斜交一般不会出错,但是斜交转正交容易导致原子跑到box的外边,在转换前可提前扩大box尺寸。
5.如何实现工件的旋转模拟
在扭转、抛光等lammps模拟中,需要设置工件的旋转动作。 fix move rotate:
fix ID group-ID move rotate Px Py Pz Rx Ry Rz period
# gruop-ID 原子组ID
# Px Py Pz旋转轴上某点坐标,为球心或者圆柱中心轴上的任意一点坐标
# Rx Ry Rz 旋转轴矢量,符合右,手法则,如Z轴正方向(0,0,1)
# period 旋转周期,单位为体系的时间单位,周期越小,旋转速度越快
同一组原子的fix move命令不能与系综同时设置,否则会造成模拟出错。
# 以z轴为正方向,逆时针旋转
fix 1 ball move rotate 0 0 0 0 0 1 10 units box
# 顺时针旋转
fix 1 ball move rotate 0 0 0 0 0 -1 10 units box
# 周期增大,旋转速度变慢
fix 1 ball move rotate 0 0 0 0 0 1 50 units box
6.常用的刚体、固定及弹簧连接模拟
“刚体”和“固定”的原子结构,原子之间的间距保持相对固定。但是**“刚体”可以移动**,“固定”的结构静止不动;“刚体”可以具有一定的温度,“固定”的原子温度为0K。对“刚体”可以设置系综,进行控温控压,但是“固定”的原子不能具有温度,否则原子会有移动速度,产生移动。 1.“刚体”设置fix rigid
fix 1 tool rigid single
# 将刀具tool原子组设为刚体,single整个原子组视为一个刚体
fix 1 all rigid/small molecule
# 体系内分子设为刚体,rigid/small适用于大量小刚体系统,molecule将相同分子ID的原子设为一个刚体
fix 1 all group N gruop1 gruop2 ...
# 将N个原子设为刚体
2.“固定”设置
velocity fixed set 0 0 0 #fixed原子组速度设为0
fix 1 fixed setforce 0 0 0 #fixed原子组受力为0
3.使用弹簧连接两个原子组,fix spring
fix ID group-ID spring couple group-ID2 K x y z R0
# group-ID group-ID2:被连接的两个原子组
# K:弹簧系数,单位force/distance
# x y z:两个原子组质心间的初始距离
# R0弹簧的平衡距离
7.如何除去两原子间的受力
在某些情况下,不需要计算原子对之间的受力: 1.在裂纹扩展模拟中,排除裂纹两侧原子之间的受力可有效地产生裂纹,防止裂纹在弛豫时消失。 2.含有固定边界的体系,排除固定边界原子之间的受力,可加快模拟运行速度。 3.含有刚体的体系,排除刚体原子之间的受力,起到加快运算的作用。 排除原子对之间受力最简单的方式把原子从其邻居列表删除。
neigh_modify exclude type i j
#去除类型i和类型j原子之间的受力
neigh_modify excule group group-ID1 group-ID2
#去除两组原子之间的受力
8.列举几种常用的速度设置方法
1.velocity velocity set命令设置原子组的初始移动速度。
velocity top set 0 0 1 units box # 设置top组原子沿Z轴移动实现拉伸
velocity命令只是重置top原子组的初始速度,必须设置fix nve/npt/nvt等系综才能使原子真正移动。 2.fix move fix move命令同样可以设置原子组一个速度,但是该命令可以使原子组按设定的速度匀速移动。
fix 1 top move linear 0 0 1 units box
# linear以恒定速度运动,top组原子沿Z轴移动
fix move命令是一个积分命令,top不用再设置nve/npt/nvt等系综,否则会造成积分混乱。 3.fix gravity fix gravity命令设置一个加速度,在运动过程中不断变化运动速度。设Z方向的加速度为100:
fix 1 top gravity 100.0 vector 0 0 1
# 加速度100,给定方向(0 0 1)
# 该命令常用于自由落体
9.在蒸发模拟中如何动态地删除原子
fix evaporate 命令
fix ID group-ID evaporate N M region-ID seed
# group-ID:原子组id
# N:步数,每N步执行一次删除原子的操作
# M:每次删除的原子数
# region-ID:删除原子的区域,进入该区域的原子才能被删除
# seed:随机删除,随机数种子
fix 2 all evaporate 100 10 top 49895
#每100步删除在top区域内的10个原子
10.防原子漂移、原子的平动振动模拟
1.fix recenter命令控制原子组的重心固定在某点。
fix ID group-ID recenter x y z
# 使原子组重心固定在坐标点(x,y,z)
# INIT表示原子初始位置,NULL表示该方向不固定原子组
fix 2 left recenter INIT INIT INIT
# 左侧原子组保持重心不变
2.fix move命令控制原子的移动和转动,也可以设置一个随时间变化的variable变量来设置原子的运动方式。
fix ID group-ID move variable v_dx v_dy v_dz v_vx v_vy v_vz
# v_dx v_dy v_dz控制原子位移,v_vx v_vy v_vz控制原子速度,若不需单独控制,则为NULL
# 设沿x方向平移,同时沿z轴上下振动(正弦或余弦函数)
variable x equal "2*step*dt" #step时间步数,dt时间步长
variable A equal 20.0
variable T equal 5.0
variable omega equal 3.0*PI/$T
variable z equal swiggle(0.0,$A,$T) #swiggle sin()函数,初值0.0,振幅A,周期T,A*sin(2PI/T *(timestep-startstep)*dt)
fix 1 ball move variable v_x NULL v_z NULL NULL NULL units box
11.如何模拟恒定电场及交变电场
fix efield命令
fix ID group-ID efield ex ey ez
# ex ey ez为x y z 三个方向的电场分量
# 添加电场后,体系内带电荷的原子会受到一个附加电场力F(F=q*E,电场强度,metal和real单位下,E单位 volts/Angstrom)
应用案例:
#设置某方向的恒定电场
fix 1 exeternal-field efield 1.0 0.0 0.0 #x方向
#设置某个区域的电场
fix 1 exeternal-field efield 1.0 0.0 0.0 region top #top区域
#设置可变电场
variable e equal E0*sin(2*Pi*f*t) #电场强度,对时间变化
fix 1 exeternal-field efield 0.0 0.0 v_e