Lammps报错:Error: compute used in variable between runs is not cur
——作者水平有限,仅供学习交流使用,如有不足还请指出
本文将以计算Al的平衡晶格常数和结合能为例说明该报错解决方法。
运行该in文件后,会报错Error: compute used in variable between runs is not current,报错截图如下:

在查阅手册之后,发现(手册截图如下)
具体位置在手册variable这一节下面的variable accuracy

翻译过来大概意思就是:
如果变量需要一个来自当前时间步前未调用的compute的量,LAMMPS将产生错误。这意味着在第一次运行之前不能对这样的变量求值。同样地,在两次运行之间,包含compute的变量不能被求值。
更直白一点就是:报错原因就在于 lammps中要获取compute的量、或要调用compute值,而这个调用的过程是不能在run中调用。
而该段话紧跟着的就是解决方法:
1. 除非compute在前一次运行的最后一个时间步上被调用过,例如通过热力学输出。
在我们这个例子中,虽没有明显的run,但在minimize暗含运行时间步,错误原因就是我在minimize(run)后调用之前时间步的compute量,所以根据手册的第一个解决方法就是在minimize之前可以将变量通过热力学输出。修改如下,运行,运行正常。
所以,给我们的启示是,在今后书写in文件时若存在一些compute量,在计算之后便将其存储在一个变量中(当然也可以直接输出c_{name},本人习惯先存储在变量中),然后在run之前便通过thermo输出(说白了就是通过thermo输出compute量并放在run前面)。可以避免该类报错。
2. lammps手册中还给了一种解决方法就是,perform a 0-timestep run before using the variable。即在该变量调用之前执行run 0 。
修改如下
运行正常,修改完成。