常用的指令
句法:
fix ID group-ID deform N parameter args ... keyword value ...
例子:
fix 1 all deform 1 x final 0.0 9.0 z final 0.0 5.0 units box fix 1 all deform 1 x trate 0.1 y volume z volume fix 1 all deform 1 xy erate 0.001 remap v fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.0
介绍:
绿色是关键词,其他是参数
-
ID, group-ID 分别是给该fix指令赋的名称和原子组的名称
-
N = 每隔这么多时间步执行box的变形
-
parameter args= 参数对。可以追加一个或多个参数对,有以下:
-
parameter 可以为 x or y or z or xy or xz or yz x, y, z args = style和对应的value style = final or delta or scale or vel or erate or trate or volume or wiggle or variable final values = lo hi lo hi = 运行结束时的box边界 (distance units) delta values = dlo dhi dlo dhi = 运行结束时的box边界变化 (distance units) scale values = factor factor = 运行结束时box长度变化的乘法因子 vel value = V V = box length 以此速度变化 (distance/time units), 有效的工程应变率 erate value = R R = 工程应变率 (1/time units) trate value = R R = true strain rate (1/time units) volume value = none = 调节此维度以保持系统的体积 wiggle values = A Tp A = 振幅 (distance units) Tp = 振荡周期 (time units) variable values = v_name1 v_name2 v_name1 = 变量name1表示盒子长度随时间变化 v_name2 = 带有name2的变量表示变化率作为时间的函数 xy, xz, yz (非正交才用得到,我的模型不需要,不看了) args = style和对应的value style = final or delta or vel or erate or trate or wiggle final value = tilt tilt = 倾斜系数 at end of run (distance units) delta value = dtilt dtilt = 倾斜系数变化 at end of run (distance units) vel value = V V = change tilt factor at this velocity (distance/time units), effectively an engineering shear strain rate erate value = R R = engineering shear strain rate (1/time units) trate value = R R = true shear strain rate (1/time units) wiggle values = A Tp A = amplitude of oscillation (distance units) Tp = period of oscillation (time units) variable values = v_name1 v_name2 v_name1 = variable with name1 for tilt change as function of time v_name2 = variable with name2 for change rate as function of time
- 零个或多个关键字/值对可以被追加
- keyword = remap or flip or units
-
remap value = x or v or none x = 将组内原子的坐标重新记录到正在变形box中 v = 当原子群跨越周期边界时,重新记录它们的速度 none = 没有x或v的重新记录 (不完整) flip value = yes or no 当盒子高度倾斜时,允许或不允许翻转 units value = lattice or box lattice = 距离是用晶格单位定义的 box = 距离以模拟box单位定义
详细描述——parameter
在动态运行期间改变模拟box的体积和/或形状。正交模拟box有3个可调参数(x,y,z)。三斜晶系(非正交)模拟box有6个可调参数(x,y,z,xy,xz,yz)。它们中的任何一个或所有都可以通过该命令独立地同时进行调整。parameter就是选择要调整的参数是哪个。
- 该fix可用于连续应变系统的非平衡MD (NEMD)模拟。有关更多细节,请参阅fix nvt/sllod和compute temp/deform命令。注意,连续扩展系统(扩展流)的模拟可以使用UEF包及其fix命令进行建模。
- 对于x、y、z参数,不能对相关尺寸进行shrink-wrapped。对于xy、yz、xz参数,不能对关联的第二维进行shrink-wrapped,应该是指不会被动跟着一起变化,deform仅影响parameter指定的维度。不受此命令影响的维度可以是周期的,也可以是非周期的。与未指定参数对应的维度也可以通过fix npt或fix nph命令控制。
- 在模拟运行开始时,如果是第一次运行,模拟box的大小和形状可以由create_box或read_data或read_restart命令指定用于初始设置模拟,或模拟box的大小和形状是前一次运行结束时的数值。create_box、read data和read_restart命令指定模拟box是正交的还是非正交的(三斜),并解释xy、xz、yz倾斜因子的含义。如果 fix deform改变了xy,xz,yz倾斜因子,那么模拟box必须是三斜的,即使它的初始倾斜因子是0.0。即只有设为三斜晶系后,使用deform的parameter才能为xy,yz,xz。
- 运行结束时所需的模拟box尺寸和形状由fix deform命令的参数决定。在运行过程中,每隔第n个时间步,模拟box就会扩展、收缩或倾斜到初始值和最终值之间的值。
详细描述——args
- 对于x、y和z参数,这是它们的styles和值的含义。
- final、delta、scale、vel和rate都通过“恒定位移”改变box 的指定维度的大小,这实际上是一个“恒定工程应变率”。这意味着盒子尺寸从初始值到最终值随时间线性变化。
- 对于final,指定维度的最终lo和hi边界。这些值可以是lattice 或box 距离单位。请参阅下面对units关键字的讨论。
- 对于delta,指定维度的上下框边界的加减值。这些值可以是lattice 或box距离单位。请参阅下面对units关键字的讨论。
- 对于scale,指定了应用于该维度的box长度的乘法因子。例如,如果初始盒子长度为10,因子为1.1,则最终盒子长度将为11。系数小于1.0表示压缩。
- 对于vel,box 长度变化的速度以距离/时间为单位指定。这实际上是一个“恒定工程应变速率”,其中速率= V/L0, L0为初始箱长。距离可以用lattice 或box距离单位表示。请参阅下面对units关键字的讨论。例如,如果初始盒子长度为100埃,V为10埃/ps,那么在10ps之后,盒子长度将增加一倍。在20ps之后,它将增加三倍。
- erate 是以“恒定工程应变速率”改变箱box的尺寸。理解成单位时间的相对变化。指定应变速率的单位为1/时间。请参阅units命令,了解与不同选择的模拟单位相关的时间单位,例如皮秒为“metal”单位)。拉伸应变是无单位的,定义为delta/L0,其中L0为原box长度,delta为相对于原长度的变化量。box长L作为时间的函数变化为L(t) = L0 (1 + erate*dt)。dt是经过的时间(以时间为单位)。因此,如果速率R指定为0.1,时间单位为皮秒,这意味着每皮秒盒子长度将增加其原始长度的10%。即1ps后应变= 0.1,2ps后应变= 0.2等。R = -0.01表示盒子的长度每皮秒会缩小原来长度的1%。请注意,对于“工程”速率,变化是基于原始盒子长度的,因此在R = 1下运行10皮秒,将盒子长度扩展11倍(应变为10),这与vel所产生的结果不同。
- trate 以“恒定的真应变率”改变盒子的尺寸。请注意,这不是“工程应变率”,而其他style是。相反,对于“真实”速率,应变变化率是恒定的,这意味着盒子尺寸从初始值到最终值随时间非线性变化。指定应变速率的单位为1/时间。请参阅units命令,了解与不同选择的模拟单位相关的时间单位,例如皮秒为“metal”单位)。拉伸应变是无单位的,定义为delta/L0,其中L0为原箱体长度,delta为相对于原长度的变化量。L(t) = L0 exp(trate*dt)dt,是经过的时间(以时间为单位)。因此,如果将速率R指定为ln(1.1),时间单位为皮秒,这意味着盒子的长度将每皮秒增加其当前(而不是原始)长度的10%。即1ps后应变= 0.1,2ps后应变= 0.21等。R = ln(2)或ln(3)表示盒子的长度每皮秒增加一倍或三倍。R = ln(0.99)意味着盒子的长度将每皮秒缩小当前长度的1%。请注意,对于“true”rate,变化是连续的,并且基于当前长度,因此使用R = ln(2)运行10皮秒不会像使用rate那样将盒子长度扩展11倍,而是扩展1024倍,因为盒子长度将每皮秒增加一倍。
- 请注意,要以恒定速率更改模拟盒的体积(或横截面积),可以通过erate 或trate更改多个维度。例如,要在皮秒皮秒内将盒子体积翻倍,您可以设置“x erate M”,“y erate M”,“z erate M”,M = pow(2,1/3) - 1 = 0.26,因为如果每个box尺寸增长26%,盒子体积就会翻倍。或者你可以设置“x trate M”,“y trate M”,“z trate M”,M = ln(1.26) = 0.231,盒子的体积每皮秒增加一倍。
- volume 以这样的方式更改指定的尺寸,即盒子体积保持不变,而其他盒子尺寸则通过上面讨论的样式显式更改。例如,“x scale 1.1 y scale 1.1 z volume”将随着x,y盒长度的增加而缩小z盒长度,以保持体积恒定(x,y,z长度的乘积)。如果指定“x scale 1.1 z volume”并且参数y未指定,则z盒长度将随着x的增加而缩小,以保持x,z长度的乘积不变。如果指定了“x scale 1.1 y volume z volume”,则y、z盒子的长度都将随着x的增加而缩小,以保持体积恒定(x、y、z长度的乘积)。在这种情况下,y、z框的长度会缩小,以保持它们的相对长宽比不变。
- 对于固体或液体,请注意,当box的一个维度通过固定变形(即拉伸应变)扩展时,保持其他两个盒子长度恒定(未指定固定变形)可能在物理上是不可取的,因为这意味着密度变化。对于这两个维度使用体积样式来保持盒子体积恒定可能更有物理意义,但对于泊松比不为0.5的材料和势也可能不正确。另一种选择是在这两个维度上使用零施加压力的fix npt aniso,这样它们就可以动态地响应拉伸应变。
- wiggle 以指定的振幅和周期以正弦方式振荡指定的盒长尺寸。即箱体长度L作为时间的函数由
L(t) = L0 + A sin(2*pi t/Tp)其中L0为初始长度。如果振幅A是正数,盒子开始膨胀,然后收缩,以此类推。如果A是负的,那么盒子开始收缩,然后膨胀,以此类推。振幅可以用格或盒距离单位表示。请参阅下面对units关键字的讨论。
- variable 通过计算一个变量来改变指定维度的box长,这个变量可能是时间的函数。带有name1的变量必须是一个等式变量,并且应该以距离为单位计算box 长度的变化。注意,这个距离是以box长单位表示的,而不是晶格单位;请参阅下面对units关键字的讨论。与变量name1关联的公式可以引用当前时间步长。注意,它应该返回盒子长度的“变化”,而不是盒子的绝对长度。这意味着在按照fix deform的定义在运行的初始时间步上调用时,它的值应该为0.0。它的值应该是>0.0表示在未来的时间扩展盒子,或者一个值<0.0压缩盒子。变量name2也必须是一个等式变量,并且应该以距离/时间为单位计算盒长变化率,即name1变量的时间导数。当原子跨越周期边界时,LAMMPS内部使用这个量来重置原子速度。对于其他样式,它是在内部计算的,但在使用任意变量时必须提供它。
- 下面是一个使用variable 样式执行与上面列出的wiggle 样式公式相同的框变形的示例,其中我们假设当前时间步长= 0。
-
variable A equal 5.0 variable Tp equal 10.0 variable displace equal "v_A * sin(2*PI * step*dt/v_Tp)" variable rate equal "2*PI*v_A/v_Tp * cos(2*PI * step*dt/v_Tp)" fix 2 all deform 1 x variable v_displace v_rate remap v
详细描述——keyword value
- 每次更改box 的大小或形状时,remap 关键字确定是否将原子位置重新映射到新box 。如果将remap设置为x(默认值),则对fix组中的原子进行重新映射;否则就不是。注意它们的速度没有改变,只是它们的位置改变了。如果remap被设为v,那么固定基团中任何一个穿过周期边界的原子,其速度上都会加一个delta,等于lo和hi边界之间的速度差。请注意,这个速度差可以包括倾斜分量,例如,当原子越过y周期边界时,x速度的增量。如果将remap设置为none,则这两种重新映射都不会发生。
- 从概念上讲,将remap设置为x迫使原子通过与盒子变形完全匹配的仿射变换变形。此设置通常适用于实体。请注意,虽然原子随着时间的推移有效地“移动”,但这并不是因为它们具有跟踪box 变化的速度,而只是由于重新映射。相比之下,将remap设置为v通常适用于流体,在这种情况下,您希望原子自己响应盒子大小/形状的变化,并获得与盒子变化相匹配的速度,以便它们的运动将自然地跟踪盒子,而无需显式地重新映射它们的坐标。
当使用此fix执行非平衡MD (NEMD)模拟时,通常应使用选项“remap v”。这是因为fix nvt/sllod调整原子的位置和速度,以产生与变化的盒子大小/形状相匹配的速度分布。因此,原子坐标不应该通过固定变形来重新映射,但速度应该在原子跨越周期边界时重新映射,因为这与维护已经由固定nvt/sllod创建的速度剖面是一致的。如果重新映射设置与fix nvt/sllod不一致,LAMMPS将警告。
对于使用“remap v”的非平衡MD (NEMD)模拟,通常希望流体(或流动物质,例如散体)以与变形box一致的速度分布流动。如上所述,使用诸如fix nvt/sllod或fix lavgevin(由compute temp/deform提供偏差)之类的恒温器通常可以实现这一目标。如果你不使用恒温器,那么就没有驱动力推动原子以与变形box一致的方式流动。例如,对于剪切系统,box变形速度可以从底部的0变化到box顶部的10。但是原子的流速度分布可能从底部的-5到顶部的+5变化。您可以使用fix ave/chunk、compute temp/deform和compute temp/profile命令监视这些效果。诱导原子流动与box变形一致的一种方法是,通过velocity ramp命令,给它们一个与盒子变形率相匹配的初始速度剖面。这通常也有助于系统更快地达到平衡,即使使用恒温器。
如果用fix rigid定义了固定刚体,并将remap 设置为x,则刚体的质心坐标将被重映射到变化的模拟box中。无论刚体中的原子是否在固定变形群中,这都将发生。即使重映射设置为v,质心的速度也不会被重映射,因为固定nvt/sllod目前对刚性粒子没有任何特别的作用。如果您希望执行刚性颗粒的NEMD模拟,则可以单独对它们进行恒温,也可以包含背景流体并通过固定nvt/sllod对流体进行恒温。
flip 关键字允许三斜box 的倾斜因子超过平行盒长度距离的一半,如上所述。如果将翻转值设置为yes,则在超出该值时通过翻转盒子来强制执行该绑定。如果翻转值设置为no,则倾斜将在不翻转的情况下继续变化。请注意,如果您应用较大的变形,这意味着盒子形状可能会急剧倾斜,LAMMPS将运行效率较低,因为需要大量的通信来获取处理器不规则形状子域周围的幽灵原子。对于极端的倾斜值,LAMMPS也可能失去原子并产生误差。
units 关键字决定用于定义各种参数的距离单位。box值选择由units命令定义的标准距离单位,例如埃表示单位= real或metal。点阵值表示距离单位在点阵间隔中。以前必须使用lattice命令来定义晶格间距。注意,单位选择也会影响vel 参数,因为它是根据距离/时间定义的。还要注意,units关键字不会影响variable 。如果希望在变量公式中包含格子间距,则应该使用thermo_style命令的xlat、ylat、zlat关键字。
带有gpu、intel、kk、omp或opt后缀的样式在功能上与没有后缀的样式相同。它们已经过优化,运行速度更快,具体取决于可用的硬件,如Accelerator packages页面所述。加速样式采用相同的参数,应该产生相同的结果,除了舍入和精度问题。
您可以在输入脚本中通过包含其后缀显式地指定加速样式,或者您可以在调用LAMMPS时使用-suffix命令行开关,也可以在输入脚本中使用后缀命令。
有关如何有效使用加速样式的更多说明,请参阅加速包页面。