大家好,我是小马老师。
本文介绍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。
公众号案例代码以及学习交流,请加QQ群:754749935

扫描关注微信公众号:lammps加油站。



















