lammps的lj单位以及负能量?

用lammps做模拟时想用lj单位
势函数用lj/cut

pair_style   lj/cut  rc 
pair_coeff    1 2  ε*  σ*

参数用Ar的相关参数: ε=115.5K σ=3.4nm
请问转换到 lj 单位,这俩数应该是多少呢,转换公式是什么?

还有就是算出来的能量是负的,这正常吗?负能量代表什么含义呢?
in文件:

units lj 
dimension 3
boundary p p p
atom_style atomic

neighbor        0.2 bin
neigh_modify    every 1 delay 0 check yes

read_data Model.data

pair_style      lj/cut 3.5
pair_coeff    * * 0.507 0.76

group bead1 type 1
group bead2 type 2

fix   FREEZE all setforce 0.0 0.0 0.0
fix   1 all nve

compute     overlap bead1 group/group bead2
thermo        100
thermo_style    custom  step  c_overlap 
thermo_modify    norm no

timestep    0.001

dump        1 all custom 100 overlap_total.xyz id type x y z 
run        1000

计算结果:

   Step       c_overlap   
         0  -0.76528644   
       100  -0.76528644   
       200  -0.76528644   
       300  -0.76528644   
       400  -0.76528644   
       500  -0.76528644   
       600  -0.76528644   
       700  -0.76528644   
       800  -0.76528644   
       900  -0.76528644   
      1000  -0.76528644   
Loop time of 0.0147074 on 1 procs for 1000 steps with 129 atoms

参考GPT和自己的思路:

lj单位是以Lennard-Jones势的参数为基础的单位制。换句话说,它是用LJ参数来表达其他物理量的单位制。国际单位制(SI)是另一个常用的单位制。

下面是将参数从国际单位制转换为LJ单位制的公式:

ε_LJ = ε/kB
σ_LJ = σ/σ0

其中,kB是玻尔兹曼常数,σ0是通常是为1的单位。对于氩气(Ar),kB = 1.3806 x 10^-23 J/K,σ0 = 3.405 Å。

将国际单位转换为LJ单位后,可以将组成部分的势函数表示为:

V_LJ(r) = 4ε_LJ[(σ_LJ/r)^12 - (σ_LJ/r)^6]

对于Ar,ε/kB=119.8K,σ=3.405 Å,则ε_LJ=0.9964,σ_LJ=1.0。

因此,在LJ单位制下,参数应为:

pair_style lj/cut 2.5
pair_coeff 1 2 0.9964 1.0

参考GPT和自己的思路,LAMMPS中的LJ单位是通过将势函数中的ε和σ设置为1来定义的,因此如果您想使用LJ单位,需要对您的参数进行归一化。具体来说,您需要将势函数中的ε和σ转换为LJ单位,然后将其传递给LAMMPS。

将Lennard-Jones势函数中的ε和σ转换为LJ单位的公式如下:

ε_LJ = ε/kB
σ_LJ = σ/√(mσ²/ε)

其中,kB是玻尔兹曼常数,m是系统中粒子的质量。在这种情况下,我们可以假设粒子的质量是1,因此m=1。

将您提供的参数ε=115.5K和σ=3.4nm带入上述公式,我们可以得到:

ε_LJ = 115.5K/1.380649×10^-23 J/K = 8.364×10^22 J
σ_LJ = 3.4nm/√(1×(3.4×10^-9m)^2/(8.364×10^22J)) = 0.3405×10^-9 m

因此,在LJ单位下,您的参数将是:

ε_LJ = 1
σ_LJ = 1

在LAMMPS中,您需要将这些参数传递给pair_coeff命令。例如,如果您想将参数传递给类型为1和2的原子对,您应该执行以下命令:

pair_coeff 1 2 1.0 1.0

这里的1.0代表在LJ单位下的ε_LJ和σ_LJ。请注意,我们将两个参数都设置为1.0,因为我们已经将原始参数转换为LJ单位。

该回答引用ChatGPT

如有疑问,可以回复我!

LAMMPS中的LJ单位是一种无量纲的单位制,方便用于Lennard-Jones势的模拟。在这种单位制中,能量单位为ε,距离单位为σ,时间单位为τ。要将您提供的参数转换为LJ单位,我们需要考虑这三个单位。

给定的参数是:ε = 115.5 K(开尔文)、σ = 3.4 nm。

要将这些参数转换为LJ单位,我们可以通过以下方法:

1、能量:使用ε作为能量单位。这意味着,在LJ单位中,ε* = ε/ε = 1。

2、距离:使用σ作为距离单位。这意味着,在LJ单位中,σ* = σ/σ = 1。

现在我们已经将这两个参数转换为LJ单位,所以在LAMMPS模拟中,您可以像这样设置参数:

pair_style lj/cut rc
pair_coeff 1 2 1.0 1.0

注意,您还需要确定一个合适的截止距离(rc),并根据实际需求进行选择。在LJ单位制下,截止距离也需要除以σ来进行单位转换。例如,如果您选择的截止距离是10.2 Å(1 Å = 0.1 nm),则需要将其转换为LJ单位:

rc* = rc/σ = (10.2 Å) / (3.4 nm) = 1.2

所以,您的pair_style命令应该是:

pair_style lj/cut 1.2

该回答引用GPTᴼᴾᴱᴺᴬᴵ
LAMMPS中的LJ单位是指将粒子的质量、长度和时间单位设置为1,然后用能量单位来表示势能。具体来说,LJ势函数的表达式如下:

V(r) = 4ε[(σ/r)^12 - (σ/r)^6]
·
其中,r是两个粒子之间的距离,ε和σ分别是LJ势函数的深度和位置参数。在LJ单位下,LJ势函数可以写成:

V(r) = 4[(r^-12) - (r^-6)]
·
其中,r的单位是LJ单位,ε和σ的单位分别是LJ能量单位和LJ长度单位。为了将这些参数转换为国际单位制(SI)中的值,需要使用以下转换公式:

LJ长度单位 = σ / λ
LJ能量单位 = ε * λ
LJ时间单位 = σ * (m/ε)^0.5
·
其中,m是粒子的质量单位,λ是单位长度的倍数,可以通过调整模拟盒子的大小来改变。对于Ar分子,m = 39.95 amu。将ε和σ的值代入上述公式中,可以得到以下结果:

LJ长度单位 = 0.3128 nm
LJ能量单位 = 119.8 K
LJ时间单位 = 2.158 ps
·
因此,在使用LJ势函数进行模拟时,应该将其参数设置为:

pair_style lj/cut rc
pair_coeff 1 2 1.0 1.0
units lj
special_bonds lj 0.0 1.0 1.0
·
这里将ε和σ的值设置为1.0,将能量、长度和时间单位都设置为LJ单位。在这个单位制下,模拟系统的温度和压强也需要用LJ温度和LJ压强来表示。

参考GPT和自己的思路:LAMMPS中的Lennard-Jones (LJ) 势函数,是通过选择不同的单位来描述模拟体系的长度、质量、时间等物理量的尺度。常见的单位系统有LJ、SI、CGS等。LJ单位系统中,长度的单位为 σ,质量的单位为 m,时间的单位为 σ(m/ε)^0.5,其中 ε 是LJ势函数中的势能参数。因此,对于Ar原子的LJ参数,将它们转换到LJ单位,可得ε=1,σ=1。
转换到 LJ 单位,需要先选择基本单位。通常选择基本单位为 sigma (σ) 为长度单位,epsilon (ε) 为能量单位,m为质量单位,t为时间单位。对于给定的 Ar 参数,转换公式为:

长度: σ* = 1 (LJ单位长度为sigma)
能量: ε* = ε / kB (LJ单位能量为epsilon/kB)
质量: m* = m (LJ单位质量为实际质量)
时间: t* = (m* σ^2 / ε)^(1/2) (LJ单位时间)
其中,kB是玻尔兹曼常数。
至于负能量,它是在LJ势函数中的一个常见现象,它代表的是模拟体系中原子的吸引作用大于其排斥作用,导致总势能为负数。负能量不是错误,而是在模拟中的一种现象,因此不必过于担心。
对于使用 LJ 势函数计算的能量,负数是正常现象。LJ 势函数的形式为 U(r) = 4ε[(σ/r)^12 - (σ/r)^6],当r < σ时,势能为负数。负能量代表粒子间吸引力,正能量代表粒子间排斥力。

看上去结果就不对,怎么都一样了呢

lj单位制中,势函数用的是Lennard-Jones势函数,转换公式如下:

$$
\begin{aligned}
\sigma_{LJ} &= \frac{\sigma_{SI}}{\sqrt[6]{2}}, \
\epsilon_{LJ} &= \epsilon_{SI} k_B / T,
\end{aligned}
$$

其中 $\sigma_{SI}$ 和 $\epsilon_{SI}$ 分别是在SI单位制下的 $\sigma$ 值和 $\epsilon$ 值,$\sigma_{LJ}$ 和 $\epsilon_{LJ}$ 分别是在 lj 单位制下的 $\sigma$ 值和 $\epsilon$ 值,$k_B$ 是玻尔兹曼常数,$T$ 是温度。

对于 Ar 而言,$\epsilon_{SI}=115.5 K$,$\sigma_{SI}=3.4 nm$。因此,

$$
\begin{aligned}
\sigma_{LJ} &= \frac{3.4\times 10^{-9}\text{m}}{\sqrt[6]{2}} = 0.335\text{nm}, \
\epsilon_{LJ} &= \frac{115.5\text{K}\times 1.380649\times10^{-23}\text{J/K}}{1.65\times 10^{-21}\text{J}}=0.996.
\end{aligned}
$$

在 LAMMPS 中,可以将参数设置为:

pair_style   lj/cut 3.5
pair_coeff   1 2 0.996 0.335

关于负能量的问题,这可能是由于势能计算过程中参数设置不当所导致的。在某些情况下,在 lj 单位制中,两个粒子之间的势能会变成负值,但这并不代表物理上的能量也是负的。在这种情况下,我们应该将势函数加上一个常数项,使其变成非负形式。比如使用修正后的 Lennard-Jones 势函数:

$$
V(r) = 4\epsilon \left[\left(\frac{\sigma}{r}\right)^{12}-\left(\frac{\sigma}{r}\right)^{6}\right]+\epsilon^{*},
$$

其中 $\epsilon^{*}$ 是一个常数项,用于保证 $V(r)\geq 0$。

以下是使用修正后的 Lennard-Jones 势函数计算的示例代码:

pair_style   lj/cut 3.5
pair_coeff   1 2 0.996 0.335

# 添加常数项使势能非负
epsilon_star = 0.01
pair_modify   shift yes
pair_coeff    * * 0.0 0.0 4.0*epsilon_star

group bead1 type 1
group bead2 type 2
 
fix   FREEZE all setforce 0.0 0.0 0.0
fix   1 all nve
 
compute     overlap bead1 group/group bead2
thermo        100
thermo_style    custom  step  c_overlap 
thermo_modify    norm no
 
timestep    0.001
 
dump        1 all custom 100 overlap_total.xyz id type x y z 
run        1000

其中,pair_modify shift yes 告诉 LAMMPS 在势函数中加上一个平移项;pair_coeff * * 0.0 0.0 4.0*epsilon_star 设置所有粒子之间的势函数参数为 0,并在势函数中添加一个大小为 $4\epsilon^{*}$ 的平移项,保证势能非负。

需要注意的是,修正后的 Lennard-Jones 势函数只是一种近似方法,它并不能完全代表物理过程中存在的相互作用。因此,在应用中需要谨慎使用。

如果您已经使用了修正后的 Lennard-Jones 势函数,并且在势函数中加上了常数项,但是计算得到的能量仍然为负数,可能会有以下几种原因:

  1. 错误的输入:检查输入文件和数据文件是否正确,并通过 LAMMPS 的 log 文件来确保模拟成功运行。

  2. 非物理状态:如过于密集的粒子堆积、能量过高等。这些情况可能导致势函数失效,需要调整模拟参数或者尝试其他方法。

  3. 问题可能出现在势函数的形式上:LJ势函数一般不会产生负能量,更多的是在模拟非相干流体(如聚合物或复杂流体)的时候引入一个被称为截断误差的问题,此时势能可能会变为负值。一种解决方法是使用长程力计算技术,比如 Ewald 或者 P3M 方法,来避免截断误差的影响。

  4. 可能是精度问题:通常情况下LAMMPS的势能计算精度很高,但是对某些类别的模拟,比如针对金属、大分子等的模拟时,精度就可能会有所下降。此时可以尝试调整模拟参数或者考虑采用其他模拟方法,以获得更好的精度。

如若以上解决方案均无法解决问题,建议详细检查势函数设置和模拟条件,以确定问题所在。

LJ (Lennard-Jones)单位通常用于分子模拟中,其中长度的基本单位为σ(强制势函数的零点),能量的基本单位是ε(两个粒子之间的吸引力深度)。将实际值转换为LJ单位可以使用以下公式:

r_LJ = r / σ
E_LJ = E / ε

其中r和E分别是实际的距离和能量。对于Ar原子,ε=115.5K,σ=3.4nm,因此:

ε* = ε/kB = 119.8K
σ* = σ/1nm = 3.4

将这些值带入您的LAMMPS输入文件中即可。

负能量在分子模拟中是很常见的,通常表示系统处于较低的能量状态。在LJ势函数中,当两个粒子之间的距离小于其相互作用半径时,它们会相互吸引并产生负能量。