LAMMPS—region命令解析

41 篇文章 17 订阅
25 篇文章 0 订阅

文章来源:“分子动力学”公众号

链接:https://mp.weixin.qq.com/s/X47tVM6Z2mKe6maA9XTEig

region命令用于定义一个空间几何区域。

使用语法

region ID style args keyword arg …
ID = 待定义区域的ID
style = delete / block / cone / cylinder / plane / prism / sphere / union / intersect
delete = no args
block args = xlo xhi ylo yhi zlo zhi
xlo,xhi,ylo,yhi,zlo,zhi = 各个维度上的范围值
cone args = dim c1 c2 radlo radhi lo hi
dim = x or y or z = 圆锥台轴线方向
c1,c2 = 圆锥台轴线在另外两个维度上的坐标值
radlo,radhi = 圆锥台上下底面的半径
lo,hi = 圆锥台轴线方向的范围值
cylinder args = dim c1 c2 radius lo hi
dim = x or y or z = 圆柱体轴线方向
c1,c2 = 圆柱体轴线在两位两个维度上的坐标值
radius = 圆柱体半径,可以使用变量
lo,hi = 圆柱体轴线方向的范围值
plane args = px py pz nx ny nz
px,py,pz = 平面上一个点的坐标
nx,ny,nz = 平面法矢坐标
prism args = xlo xhi ylo yhi zlo zhi xy xz yz
xlo,xhi,ylo,yhi,zlo,zhi = 平行六面体在各个维度上的范围值
xy = y方向在x方向的倾斜值
xz = z方向在x方向的倾斜值
yz = z方向在y方向的倾斜值
sphere args = x y z radius
x,y,z = 球心坐标
radius = 球体半径,可以使用变量
union args = N reg-ID1 reg-ID2 …
N = 要进行并集操作的区域的数目,必须大于等于2
reg-ID1,reg-ID2, … = 要进行并集操作的区域的ID
intersect args = N reg-ID1 reg-ID2 …
N = 要进行交集操作的区域的数目,必须大于等于2
reg-ID1,reg-ID2, … = 要进行交集操作的区域的ID
keyword = side or units or move or rotate
side value = in or out
in = 指定几何体内侧作为区域
out = 指定几何体外侧作为区域
units value = lattice or box
lattice = 以晶格距离作为几何距离单位
box = 以模拟盒子作为几何距离单位
move args = v_x v_y v_z
v_x,v_y,v_z = x, y, z 方向的位移量,equal类型的变量
rotate args = v_theta Px Py Pz Rx Ry Rz
v_theta = 旋转角,equal类型的变量,弧度单位
Px,Py,Pz = 旋转操作的中心点
Rx,Ry,Rz = 旋转轴矢量
使用举例
region 1 block -3.0 5.0 INF 10.0 INF INF
region 2 sphere 0.0 0.0 0.0 5 side out
region void cylinder y 2 3 5 -5.0 EDGE units box
region 1 prism 0 10 0 10 0 10 2 0 0
region outside union 4 side1 side2 side3 side4
region 2 sphere 0.0 0.0 0.0 5 side out move v_left v_up NULL
使用介绍
该命令用于定义一个空间几何区域。很多其他命令都会使用该命令定义的区域。举例来说,create_atoms可以在定义区域中创建原子,create_box命令可以根据定义区域定义模拟盒子,group命令可以将定义区域中包括的原子定义为一个组,delete_atoms命令可以将定义区域中的原子删掉,fix wall/region可以将定义区域的表面定义为壁面(boundary wall)。

大多数使用region命令所定义区域的命令都需要检测某个原子的位置是否在区域内。刚好在区域边界上原子被认为是属于所定义区域的。举个例子,对于一个球形区域而言,如果在定义的时候使用了关键字side in,那么球形区域表面上的原子就是该定义区域的一部分;如果使用了关键字side out,那么球形区域表面上的原子就不属于该区域的一部分。详细可以参考下面的side关键字。

一般来说,LAMMPS所定义的区域都是静态的,也就说所定义的几何空间范围并不会随着时间而改变。但如果使用了关键字move或rotate,如下文所要介绍的,区域就会变成动态的,也就是说所定义区域的位置和朝向会随着时间发生改变。在有些时候,这种动态区域是比较有用的,比如在使用命令compute temp/region对一个区域进行恒温,或使用fix wall/region命令将包含运动粒子的区域表面定义为壁面时。

delete类型:删除指定的区域。因为定义冗余的区域并不会占用太大的开销,所以一般不需要这样做,除非在你的输入脚本中定义了大量了区域。

block / cone / cylinder / prism类型中参数lo/hi的值可以指定为EDGE或INF。

EDGE是指所定义方向一直延伸到所在方向模拟盒子的边界。需要注意的是,这里所说模拟盒子的边界是指当前盒子的边界。换句话说,如果模拟盒子在模拟的过程中发生了改变,按着这种方式定义的区域并不会随着改变。
INF是指一个非常大的负数或正数(1.0e20),所以即便模拟盒子在模拟过程中发生改变了,使用该定义仍然能将其包括到区域中。

如果模拟盒子还没有创建,那么在使用region定义区域的时候就不能使用EDGE或INF(译注:这是显然的,因为EDGE和INF都是相对于模拟盒子来说的)。

对于prism类型的区域,如果某个倾斜因子不为0,那么它所对应的两个维度上lo/hi都不能设为INF。举例来说,如果xy倾斜因子设为非零,那么xlo/xhi和ylo/yhi都不能设为INF。

注意1:Regions in LAMMPS do not get wrapped across periodic boundaries, as specified by the boundarycommand. For example, a spherical region that is defined so that it overlaps a periodic boundary is not treated as 2 half-spheres, one on either side of the simulation box.

注意2:不论是否用dimension命令将模拟设为2d或3d,LAMMPS中所定义的区域总是三维的。所以在进行2d模拟时,你需要仔细定义区域,以使其与2d的x-y平面相交,并产生正确的交集区域。

cone类型(圆锥台):定义一个轴对称的圆锥台。除了要定义两个不同的底面半径,它的定义过程基本上与圆柱cylinder是一样的。两个底面半径都可以设置为0,但不能同时设为0.

cone和cylinder类型:参数c1、c2是轴线在另外两个维度上的坐标参数。如果dim=x,那么c1/c2分别对应y/z;如果dim=y,那么c1/c2分别对应x/z;如果dim=z,那么分别对应x/y。因此,上面第三个例子定义了一个圆柱体,其轴线沿着y方向,轴线坐标为x=2.0, z=3.0,半径为5.0,轴线范围是从-5.0到模拟盒子的上边界。

plane类型:定义一个过指定点(px,py,pz),法矢为(nx,ny,nz)的平面。所指定的法矢不需要是单位矢量。平面的内部(inside)是指法矢所指的那个半空间。

prism类型:定义平行六面体式的区域。其原点坐标为(xlo,ylo,zlo),从原点出发的三个基矢为A = (xhi-xlo,0,0); B = (xy,yhi-ylo,0); C = (xz,yz,zhi-zlo)。其中xy,xz,yz叫做倾斜因子,它们可以取0.0,正值,或负值。它们实际上是正交盒子变换为平行六面体时各个面的偏斜位移值。

如果要使用create_box命令,并以已经定义为prism类型的区域为范围定义三斜式的模拟盒子,那么倾斜因子(xy,xz,yz)不能超过各个维度上对应盒子长度的一半。举个例子,如果xlo=2, xhi=12,那么模拟盒子的长度就是10,这也就要求xy倾斜因子必须在-5到5之间。类似地,倾斜因子xz和yz必须在-(xhi-xlo)/2和+(yhi-ylo)/2之间。需要注意的是,这并不是一个限制,因为如果最大的倾斜因子应该是5,那么将其设置为-15, -5, 5, 15, 25……在几何上都是等效的。

sphere和cylinder类型中参数radius可以设置为equal类型的变量variable。如果设置为变量,那么其形式就要求是v_name,其中name是变量名。这种情况下,每个时间步都会计算变量的值,并将得到的值设为半径。

equal类型的变量可以使用很多数学函数来定义公式,也可以使用thermo_style命令中关键字。

union类型:创建所有列举出区域的并集区域。

intersect类型:创建所有列举出区域的交集区域。

注意:union和intersect类型的区域依赖于产生它们的每一个子区域,因此在定义union或intersect类型的区域后,不能删除这些子区域。

side关键字:决定所考虑的区域是所指定几何体的内部还是外部。通过将该关键字与union和intersect类型配合使用,可以构建复杂的几何区域。举个例子,如果将两个球体的内部分别定义成了区域,并对这两个区域使用类型为union,side=out的操作,那么所定义的区域就是整个模拟盒子之内、除了两个球体之外的所有空间。

units关键字:决定前面所列举的所有用于定义区域的长度量的单位。若取值box,坐标的单位就与命令units说指定的距离单位相同,比如units设为real或metal时,其单位为Angstroms。若取值lattice,坐标是以晶格距离为单位的,但前提是必须已经使用lattice命令定义了晶格距离。具体到不同类型,在不同维度上是不同的,如下:

block类型:xlo/xhi是以x方向的晶格距离为单位。类似地,ylo/yhi和zlo/zhi分别是以y和z方向的晶格距离为单位。
cone类型:lo/hi是以dim所在方向的晶格距离为单位。c1/c2则分别以另外两个径向维度方向上的晶格距离为单位。圆锥台上下底面的半径是以与c1对应的那个方向上的晶格距离为单位。
cylinder类型:lo/hi是以dim所在方向的晶格距离为单位。c1/c2则分别以另外两个维度方向上的晶格距离为单位。圆柱体半径是以与c1对应的那个方向上的晶格距离为单位。
plane类型:px和nx是以x方向的晶格距离为单位。类似地,py/ny是以y方向的晶格距离为单位,pz/nz是以z方向的晶格距离为单位。
prism类型:xlo/xhi是以x方向的晶格距离为单位。类似地,ylo/yhi和zlo/zhi分别是以y和z方向的晶格距离为单位。xy和xz是以x方向的晶格距离为单位,yz是以y方向的晶格距离为单位。
sphere类型:球形坐标x,y,z分别是以x,y,z方向的晶格距离为单位,球半径是以x方向的晶格距离为单位。
如果使用move或rotate关键字,那么所定义的区域就变成了动态的,也就是说它的位置和朝向是会随着时间发生变化。这两个关键字不能用于union或intersect类型的区域。

使用限制

prism类型的区域在任何方向上都不能是0厚度。对于2d模拟而言,在z方向上可以定义一个很小的厚度,而xz和yz必须是0。

默认设置

side=in, units=lattice, 无移动或旋转。

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值