- 修改日志:文章在2019年12月23日首发,于2020年6月23日进行了修改并添加了算例。在原稿中,我对于LAMMPS给出的计算弹性常数的例子的理解是错误的,一并进行了修改。修改字体用加粗表示,并在“注:”进行了标记,相应的原文一并贴出。
在LAMMPS MANNUAL中对于怎么计算弹性常数有一个HOW TO章节的探讨,参照:
8.4.4. Calculate elastic constantslammps.sandia.gov这一节非常短,但是写得很精彩有很多启发,我之前也看到,今天重新看了,感觉有的地方是有一些瑕疵的,也许只是我的理解,在这里记录一下,希望可以与其他人一起讨论,主要有三种方法:
- 不考虑温度效应,也就是在0K下计算弹性常数,可以用change_box然后直接计算应力张量的变化,而且LAMMPS给出了算例,在路径:examples/elastic中;
- 考虑温度的影响,在“HOW TO”中说可以在NVT系综中统计小变形下的平均应力张量的变化得到弹性常数,但是这种方法存在一个问题,那就是你不能施加周期性边界条件,否则模拟系统在NVT系综中体积不发生变化,就无法计算泊松比,没有泊松比效应,统计的弹性模量是失真的。我推荐的做法是采用NPT系综下的“fix deform”,同时把拉伸方向外的方向静水压设为0,这样系统在每一次迭代的时候会考虑泊松比效应,可以得到合理的弹性常数。注:该方法的例子在路径examples/elastic_T中。这种说法其实是错误的,因为LAMMPS虽然采用的是NVT&