variable命令两种不同的使用方式“v_”和”&”的区别

本文介绍variable命令两种不同的使用方式:“v_”和”&”。

在lammps模拟中,variable命令用的相对比较多,可以根据需要定义不同的变量。

在使用自定义变量或者调用自定义变量的时候,lammps给出了两种命令:“v_“和”&“。

这两种命令到底有什么不同,如何选择使用?


下面以Cu拉伸代码为例,讲解这两种方式的区别。

#定义变量L0,L1

variable tmp equal "lx"
variable L0 equal ${tmp}
variable L1 equal v_tmp
#输出
thermo 10
thermo_style custom step v_L0 v_L1 lx

在以上代码段中,我们分别定义了L0和L1,通过命令可以看出,L0和L1的值都等于变量“tmp”。

下面我们运行代码,截图log文件中的信息看一下区别。


可以看出,L0的值被设置为36.1,但是L1并没有被明确赋值。

下面是thermo命令输出的L0、L1、lx的值


L0的值并没有发生变化,而L1的值与lx值相等。

通过对比,可以看出“v_”和”&”的区别:

(1)“&”立即获取变量值

variable L0 equal ${tmp}

这句命令是把变量“tmp”的值立即计算出来,而tmp的值为lx,因此,系统取得lx的值36.1,并将36.1赋值给L0。


(2)“v_”获取变量计算公式,暂不计算具体数值

variable L1 equal v_tmp

以上命令运行后,L1的值等于v_tmp的值,即L1=v_tmp,但此时并不计算v_tmp的值,又因为v_tmp=lx,因此L1=lx。

但此时,并没有将lx的值赋值给L1,仅仅是明确这种相等的关系

当在下一句thermo命令输出L1的时候,再计算L1的值,根据公式L1=lx,系统计算此时lx的值,并复制给L1。


下面给出全部in文件代码,可以测试一下:

units metal
atom_style atomic
timestep 0.001
lattice fcc 3.61
region box block 0 10 0 5 0 5
create_box 1 box
create_atoms 1 box
pair_style eam
pair_coeff * * Cu_u3.eam
velocity all create 300 8989
#定义变量L0,L1
variable tmp equal "lx"
variable L0 equal ${tmp}
variable L1 equal v_tmp
#输出
thermo 10
thermo_style custom step v_L0 v_L1 lx
fix 1 all npt temp 300 300 0.01 y 0 0 0.1 z 0 0 0.1
fix 2 all deform 1 x erate 0.02 units box remap x
run 100
上一篇
下一篇