用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 势函数,并且在势函数中加上了常数项,但是计算得到的能量仍然为负数,可能会有以下几种原因:
错误的输入:检查输入文件和数据文件是否正确,并通过 LAMMPS 的 log 文件来确保模拟成功运行。
非物理状态:如过于密集的粒子堆积、能量过高等。这些情况可能导致势函数失效,需要调整模拟参数或者尝试其他方法。
问题可能出现在势函数的形式上:LJ势函数一般不会产生负能量,更多的是在模拟非相干流体(如聚合物或复杂流体)的时候引入一个被称为截断误差的问题,此时势能可能会变为负值。一种解决方法是使用长程力计算技术,比如 Ewald 或者 P3M 方法,来避免截断误差的影响。
可能是精度问题:通常情况下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势函数中,当两个粒子之间的距离小于其相互作用半径时,它们会相互吸引并产生负能量。