lammps做剪切过程中温度变化很大怎么办(语言-c++)

最近在用LAMMPS进行DEM模拟。大约2000个粒子被放置在一个固定体积V的周期盒子中。通过Lees-Edwards边界条件,粒子在剪切速率下进行均匀稳定的简单剪切。势函数考虑hooke(参考命令:pair_style   granular或者pair_style  hooke)
剪切过程中,温度远远高于设定的温度值,请问各位这是什么原因导致的呢,是不是我的in文件有问题?

试过直接设定想要的盒子尺寸(2000个粒子,体积分数为0.51,直径为1,盒子的尺寸为12.712.712.7),而不加change_box all x scale 0.5 y scale 0.5 z scale 0.5,并且只计算比较小的剪切速率,相当小时温度可以稍微降下来,但是插入的粒子数达不到2000。并且想算较大的剪切速率的还是不行。

img

以下是我的in文件

以下是我的in文件

################################################
variable d          equal 1.0
variable rc         equal 1.25*${d}
variable density    equal 1.0

variable H equal 25.42      
variable L equal 25.42

############ 模型初始化(单位:微米)#############

units           micro
boundary        p p p
atom_style      sphere
region          box block 0 ${L} 0 ${L} 0 ${H}
create_box      1 box
create_atoms    1 random 2000 12345 NULL overlap 1 maxtry 500
neighbor        0.2 bin
neigh_modify    every 1 delay 0 check yes  

############ 设置颗粒属性 ##########

set atom * diameter ${d} density ${density}

############ 势函数参数 #############

variable kn         equal 1e4
variable kt         equal 3e3
variable e          equal 0.7
variable miu        equal 0.1

variable shearvel   equal 0.02
variable dt         equal 2e-5
variable steps1      equal 1000
variable steps2      equal 10000
variable steps3      equal 1000
variable steps4      equal 50000

############ 势函数 ############

pair_style   granular
pair_coeff * * hooke ${kn} ${e} tangential linear_history ${kt} 0.0 ${miu} damping tsuji

comm_modify vel yes

############ 温度初始化 ############

velocity        all create 300 1231
########################################

compute s all stress/atom NULL
compute p all reduce sum c_s[1] c_s[2] c_s[3]
variable stressx equal c_p[1]/(vol)
variable stressy equal c_p[2]/(vol)
variable stressz equal c_p[3]/(vol)
variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol)
############# 驰豫 #####################

fix             1 all npt temp 300.0 300.0 $(10*dt) iso 0 0 1000 drag 2
fix             2 all momentum 1 linear 1 1 1
dump                        1 all custom 5000 npt1-hooke.xyz id type x y z
thermo_style    custom step temp press
thermo          100
timestep        ${dt}
reset_timestep 0
run             ${steps1}
unfix           1
unfix           2
undump            1

############## 剪切 #####################

change_box      all  x scale 0.5 y scale 0.5 z scale 0.5
change_box        all triclinic

fix                1 all nvt/sllod temp 300 300 $(100*dt)
fix             2 all deform 1 xz erate ${shearvel} units box remap v
fix             stress all print 100 "${press} ${stressx} ${stressy} ${stressz}" file stress-hooke.dat screen no
dump            2 all atom 100 dump-hooke.shear
dump            1 all custom 10 shear-hooke.xyz id type x y z vx vy vz fx fy fz diameter
timestep        ${dt}
reset_timestep  0
run             ${steps4}
#min_style cg 
minimize  1e-4 1e-6 10000 10000

这个问题很可能是因为模拟条件不适当导致的。有几点可以考虑改进:

考虑使用不同的随机初始速度来初始化粒子,例如:velocity all create 300 1231,可以尝试使用其他速度,例如:velocity all create 300 123

可以适当调整 NPT 温度调节的参数,例如增加 drag 值,或者增加控制温度的频率。

如果剪切速率较大,可以考虑使用 Verlet 数值积分,而不是 velocity-Verlet 数值积分。

可以尝试使用不同的粒子间作用力(如 Hertz-Mindlin 或者 Mohr-Coulomb 粒子间作用力)来替换默认的 Hooke 粒子间作用力。

这些都是可以考虑的改进方法,但并不能保证解决问题,因为还需要根据具体情况进行调整。

方法一

摩擦力和滚动摩擦力(参考命令:fix  1  all  gran/hooke  history  $mu  $mu_r)。

LAMMPS can be used to perform DEM simulations. Approximately 2000 particles are placed in a fixed volume V periodic box. Through Lees-Edwards boundary conditions, particles are uniformly and stably sheared at shear rate. The potential function considers hooke (reference command: pair_style granular or pair_style hooke), friction force and rolling friction force (reference command: fix 1 all gran/hooke history $mu $mu_r).

方法二

这可能是由于周期性边界条件引起的。由于粒子受到周期性的力,因此激活的能量会远大于静态的力的能量,从而导致温度上升。解决这一问题的一个方法是采用非周期性的边界条件,或者改变剪切速率,以降低激活的能量。此外,也可以使用质量较小的粒子,以减少激活的能量,或者采用随机踊跃来模拟热激活。

方法三

这可能是由于模拟参数未正确设定或模拟流体(如气体)过度加热导致的。正确设定模拟参数可以避免过度加热。例如,可以使用刚体时间步长和相互作用力参数来减少加速度变化量。另外,使用动能削减方法来缓解加热也是有效的。同时,应避免在模拟中使用太强的耦合,例如使用过大的Nose-Hoover系数(thermo_nh),可能会导致过度加热。

题主,体系的温度并不能完全按照以上公式进行计算吧?
一般来说,流体的温度计算公式中应该去掉流体的流动速度。
在lammps中,有两个命令可实现这个功能:
第一种是 : compute temp/partial
该命令语法为:

compute ID group-ID temp/partial xflag yflag zflag

其中,group-ID为需要计算温度的原子组。
xflag yflag zflag确定是否计算该方向的温度。取值为1表示计算温度是包含该方向的速度,取值为0表示不包含该方向的速度。
如流体沿y方向流动,在计算流体温度时,不包含y方向速度,只计算x和z方向速度:

compute myTemp flow temp/partial 1 0 1

第二种: compute temp/com
该命令首先计算原子组质心的速度,在计算温度时,去除质心速度。
使用方法如下:

compute myTemp mobile temp/com

重新计算温度后,可在thermo或者fix命令中使用新的命令,如用在nvt系综设置中:

fix 1 flow nvt temp 300 300 0.1
fix_modify 1 temp myTemp

或者:

thermo_modify temp myTemp

对比下这个相对完整的实例:lammps剪切模拟关键技术讲解,链接:https://blog.csdn.net/lammps_jiayou/article/details/121605813

不一定,高温可能是由多种原因引起的。

高频碰撞:LAMMPS中默认的碰撞模型可能导致粒子之间发生高频碰撞,从而提高温度。

内力过大:如果势函数设置不当,特别是对于Hooke势函数,它们可能产生过大的内力,从而提高温度。

缺乏热力学控制:如果您的模拟没有考虑热力学控制,则温度可能升高。

时间步长过大:如果时间步长过大,则可能导致粒子运动不稳定,从而提高温度。

建议您细心检查您的输入文件,特别是势函数、热力学控制和时间步长,确保这些因素是合适的。此外,您可以尝试不同的碰撞模型或更改时间步长来验证结果。

高于预期的温度可能是由多种因素导致的,其中一些可能是:
无效的温度控制方法:确保使用适当的温度控制方法(例如NPT或NVT),以确保温度处于预期范围。
不合适的初始温度:将温度设置为不适当的值,也可能导致结果不正确。
模拟参数:使用不适当的模拟参数,例如时间步长或摩擦系数,也可能导致错误结果。
势函数:不合适的势函数也可能导致不正确的结果。请确保选择适当的势函数,并确保与模拟条件相符。
因此,请检查您的 in 文件,确保使用了适当的模拟参数,以及检查温度控制方法和势函数是否正确。

你把运行日志发给我看一下

剪切过程中温度过高的原因可能有很多,可能与模拟参数设置、物理模型选择等有关,具体需要根据您的实验条件和实验结果来分析。

以下是一些可能的原因:

1.模拟时间过短。温度是一个瞬时值,可能会有一定的波动。如果模拟时间不够长,温度的波动会比较大,导致温度偏高。

2.粒子碰撞过于频繁。如果剪切速率过大,粒子之间的碰撞就会变得更加频繁,这会导致温度升高。

3.势函数的选择。不同的势函数具有不同的物理意义和表现形式,可能会对温度的变化产生影响。

4.模拟参数的设置。例如,时间步长、温度控制方式、计算温度的方法等都可能会对温度的变化产生影响。

根据您提供的in文件,无法确定温度高于设定温度的具体原因。您可以检查以下问题:

1.初始化温度是否正确,是否为300K?
2.可以检查初始动能是否正确,以确保初始温度正确设置。
3.剪切速率是否合理,剪切速率过高可能导致温度过高。
4.势函数参数是否合理,例如kn和kt的值是否正确。

如果您已经尝试过减小剪切速率和盒子的尺寸并且温度有所下降,那么可能是由于模拟参数的选择或其他原因导致温度高于设定温度。您可以尝试调整参数或尝试不同的方法以解决这个问题。

目前通过查文献,认为很大可能是边界条件有问题,传统的周期性边界条件无法精确计算剪切流,尤其是剪切速度增大以后,文献中提出一种新的周期性边界,在速度梯度方向施加,一个粒子跑出边界之后,新补上的粒子的速度和位置需要重新计算,称为lees-edward边界条件,lammps中是否能直接设置这种不常规的边界条件,还是说需要改源代码?若能解决,一定酬谢,拜托拜托!