lammps模拟中,控温失败的一个原因及解决方案

大家好,我是小马老师。
最近几天,在咨询中遇到几例控温失败的案例,觉得这类案例具有一定的代表性,和大家分享一下。
在一些lammps模拟中,会设置固定层、恒温层,在控温时,不同的区域设置不同的控温策略。
如固定层速度和受力会设为0(温度肯定也为0),恒温层会设置一个恒温器进行控温。
但是在实际运行过程中,会发现log文件输出的温度要低于设定温度,或者恒温层温度高于设定温度。
出现这种现象的主要原因是忽略了一个细节,在分区域控温时,输出或者设定温度必须指定特定原子组,否则默认的是全部原子温度。

下面以一个案例解释这个细节,Cu分为上下两侧,上层为恒温区,控温目标300k,下层为固定边界层,不控温,设置受力和速度为0。
模型如下图所示:
在这里插入图片描述

控温代码如下:

#上层原子温度初始化为300k
velocity top create 300 8989
#固定下层原子
velocity botom set 0 0 0
fix 01 botom setforce 0 0 0
#计算上下层温度
compute topTemp top temp
compute botTemp botom temp
#输出上下层和全局温度
thermo          100
thermo_style    custom step c_topTemp c_botTemp  temp 
#保存结构文件
dump            1 all atom 100 cu.xyz
fix             2 all nvt temp 300 300 0.01
run             1000

这是一段比较常用的代码,运行后,屏幕输出结果为:
在这里插入图片描述

左侧第一列为top层温度最终温度为602k,中间列为下部边界层,温度为0k,最右侧为全局温度,最终300k。
我们的本意是控制上层的温度为300k,结果最终导致上层的温度为600k,造成控温失败。
主要原因是fix nvt命令中的temp默认为全部原子的平均温度,因边界层原子温度为0k,只能提高top层原子温度才能保证全局温度为300k。
解决的办法也比较简单,在fix nvt后面加一句fix_modify命令,把fix nvt命令中的temp控温对象设为top组原子:

dump            1 all atom 100 cu.xyz
fix             2 all nvt temp 300 300 0.01
fix_modify      2 temp topTemp
run             1000

再次运行,得到结果如下:
在这里插入图片描述

这时候,top层温度接近300K,全局温度只有150K,这时候就达到top准确控温的目的了。

lammps模拟过程中出现问题时,一定要仔细分析原因,从基本原理入手是最有效的​方法。

具体内容可查看公众号一对一培训说明:lammps 一对一培训与咨询指导

公众号案例代码以及学习交流,请加QQ群:754749935
在这里插入图片描述

扫描关注微信公众号:lammps加油站。
在这里插入图片描述

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lammps加油站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值