文章目录
1.材料热力学基础
1.材料的微观热运动
- 热力学基本定律:
热力学第一定律(能量守恒定律): Δ U = Q + W \Delta U=Q+W ΔU=Q+W 热力学第二定律(熵增定律): η = A Q 1 = 1 − Q 2 Q 1 < 1 \eta=\frac{A}{Q_{1}}=1-\frac{Q_{2}}{Q_{1}}<1 η=Q1A=1−Q1Q2<1 热力学第三定律(绝对零度不可到达): lim T → 0 K ( Δ S ) T = 0 \lim_{T \to 0K}(\Delta S)_{T}=0 T→0Klim(ΔS)T=0 - 根据绝对零度不可达到原理,在任何有限温度下,原子都会具有速度和动能
- 对于晶体来说,晶格振动是典型的热运动,对晶体热学性能起主要贡献,如:固体热容、热膨胀、熔化、烧结、热传导等
2.材料的热胀冷缩和比热
- 热胀冷缩是大多数物体具有的一种性质,在一般状态下,物体受热以后会膨胀,在受冷的状态下会缩小
一般物体的热胀冷缩是成立的。温度升高时,分子的动能增加,平均自由程增加,所以表现为热胀;温度降低时,分子的动能减小,平均自由程减少,所以表现为冷缩。
但也有例外,比如水,水中存在氢键。在一定温度范围内,温度下降,水中的氢键数量增加,导致随温度下降体积反而增大。 - 比热容是衡量物质容纳热能力的一种物理量,是指单位质量或体积的物体升高一定温度所需的能量
- 通常用物体的微观粒子运动的激烈程度来表征物体温度,影响这些粒子速率改变的因素就能影响物体的比热
粒子间的作用力比较强的时候,一个原子的运动很容易影响到其他原子的运动从而导致整体的升温,比热相对就小
液体粒子间的作用力比固体小,粒子的运动要影响到其他原子(变得激烈)需要更多的能量,因此比热也相对较大
2.计算热膨胀系数和热容
1.热膨胀系数
- 材料热胀冷缩的大小可以通过热膨胀系数来衡量。热膨胀系数(thermal expansion coefficent)是物质因温度改变时,体积发生变化的趋势
线膨胀系数: α = Δ L / ( L ∗ Δ T ) \alpha=\Delta L/(L*\Delta T) α=ΔL/(L∗ΔT) 体膨胀系数: β = Δ V / ( V ∗ Δ T ) \beta = \Delta V/(V*\Delta T) β=ΔV/(V∗ΔT) - 双金属被用作电路中的开关,根据外部温度或电路中的电流来开启/关闭电接触。
两条相同温度下的等长金属带被结合在一起,由于它们具有不同的热膨胀系数,温度升高时每条金属带的长度变化 ( Δ L \Delta L ΔL) 将会不同。由于它们被结合在一起,金属带会随着温度变化而弯曲
2.计算Cu的热膨胀系数
- 计算不同温度下 Cu 的体积或长度,体积或长度随着温度的变化曲线的斜率为 Δ L / Δ T \Delta L/\Delta T ΔL/ΔT。在模拟过程中体积是变化的,要用NPT系综。在使用NPT系综之前和之后,建议先使用NVT系综平衡一定的步数
- lammps脚本
variable T index 300 400 500 600 700 800 900 1000 label T_loop # 初始化 units metal boundary p p p atom_style atomic # 创建晶格 lattice fcc 3.62 # 晶胞边长 3.62 A region box block 0 8 0 8 0 8 # 创建一个8*8*8的FCC晶胞 create_box 1 box create_atoms 1 box # 设置原子间势函数 pair_style eam # EAM势 pair_coeff 1 1 Cu_u3.eam # 重置时间步 reset_timestep 0 # 初始速度 velocity all create ${T} 85979 dist gaussian # 使用NPT系综弛豫 fix 1 all npt temp ${T} ${T} $(100*dt) iso 0 0 1 # 初始温度和结束温度为${T},$(100*dt)为阻尼系数,控制温度调节的幅度 # 定义热力学输出 thermo_style custom step temp epair press lx ly lz thermo 1000 # 定义温度、长度和体积差值 compute actual_T all temp variable Lx equal lx variable V equal vol # 平均值计算,并保存到文件 # 每100个时间步长收集一次数据,将10次数据收集进行平均,每10000个时间步长输出一次平均后的数据 fix 2 all ave/time 100 10 10000 c_actual_T v_Lx v_V file thermal_expansion_data.${T}.txt # 开始运行 run 10000 # 取消NPT系综 unfix 1 clear next T jump SELF T_loop # 循环到脚本的某个位置
- 结果处理:
1.数据导入Python/Excel/Matlab/origin,进行线性拟合,获得斜率
2.根据公式计算出 Cu 的线/体积膨胀系数
3.比热容
- 几乎任何物质皆可测量比热容,如化学元素、化合物、合金、溶液以及复合材料
- 热容:单位质量或体积的物质温度升高或降低1K时吸收或放出的热量。
- 热容有质量热容(Specific Heat)和体积热容(Volumetric Heat Capacity),分别是以单位质量和单位体积的物质定义的
体积热容: C V = Δ E Δ T ⋅ V C_{V}=\frac{\Delta E}{\Delta T\cdot V} CV=ΔT⋅VΔE 质量热容: C m = C V / ρ C_{m}=C_{V}/\rho Cm=CV/ρ
4.计算Cu的比热容
- 保持体积在模拟过程中不变,选择NVT系综 C V = ( d E d T ) V C_{V}=(\frac{dE}{dT})_{V} CV=(dTdE)V
- lammps脚本
units metal boundary p p p atom_style atomic variable Tstart equal 10.0 variable Tstop equal 1000 variable Tdamp equal 0.2 lattice fcc 3.62 region simbox block 0 8 0 8 0 8 create_box 1 simbox create_atoms 1 box pair_style eam pair_coeff 1 1 Cu_u3.eam velocity all create ${Tstart} 564646 dist gaussian # 平衡步骤 fix 1 all nvt temp ${Tstart} ${Tstart} ${Tdamp} thermo 100 run 5000 unfix 1 reset_timestep 0 thermo 1000 thermo_style custom step temp pe etotal # 逐渐加热系统 fix 2 all nvt temp ${Tstart} ${Tstop} ${Tdamp} run 120000
3.计算体相材料的熔点
1.熔化与相变
- 融化:晶体从固态转变为液态的过程,对应的温度为熔点。只要能够通过某一指标,标识出这种固液相变过程,就能够计算出固体的熔点
能够用来识别这种转变的指标很多,比较简单的是直接根据体积变化进行判断。固态升温只是体积的膨胀,在转换为液态时,体积会有较大的增加,通过体积随着温度的变化关系,可以大致确定熔点
另外,还有跟原子有序度相关的指标,比如均方位移(MSD)、径向分布函数(RDF)、林德曼指数(Lindemann index) 等,都可以标识熔点 - 晶体的融化时典型的一级相变,在相变过程中,相变点两相的化学势 ( μ ) (\mu) (μ) 连续,但是化学势的一阶导数不连续: μ 1 ( T , p ) = μ 2 ( T , p ) \mu_{1}(T,p)=\mu_{2}(T,p) μ1(T,p)=μ2(T,p) ∂ μ 1 ∂ T ≠ ∂ μ 2 ∂ T , ∂ μ 1 ∂ p ≠ ∂ μ 2 ∂ p \frac{\partial \mu_{1}}{\partial T}\ne\frac{\partial \mu_{2}}{\partial T},\frac{\partial \mu_{1}}{\partial p}\ne \frac{\partial \mu_{2}}{\partial p} ∂T∂μ1=∂T∂μ2,∂p∂μ1=∂p∂μ2
- 根据Gibbs自由能定义,体系的熵和体积将存在突变,伴随着相变潜热的发生
可以通过监视体积、焓变或者其他能表示 有序性参量(熵) 的变化来标识晶体的熔点
2.Ar的熔化与凝固模拟
- 建立10×10×10的FCC晶格体系,充分弛豫后用Nose-Hoover方法,保持压强为零,将体系在NPT系综下,从T=0.01到0.85 缓慢升温,直到发生熔化转变
- 熔化的lammps脚本
units lj boundary p p p atom_style atomic lattice fcc 1.073 region box block 0 10 0 10 0 10 create_box 1 box create_atoms 1 box mass 1 1.0 pair_style lj/cut 2.5 pair_coeff 1 1 1.0 1.0 2.5 velocity all create 0.01 56465 timestep 0.005 fix 1 all nvt temp 0.01 0.01 0.2 run 50000 unfix 1 reset_timestep 0 thermo 1000 thermo_style custom step temp pe etotal press vol fix 1 all npt temp 0.01 0.85 1.0 iso 0 0 1.0 run 1000000
- Ar 在 T=0.75 左右发生一级相变,原子单位体积阶跃;实际 Ar 的平衡融化温度约为0.70,分子动力学模拟过热约7%
- 凝固的lammps脚本
设置NPT系综,从 T=0.85 到0.01缓慢降温,可以实现Ar的凝固模拟# 平衡 fix 1 all nvt temp 0.85 0.85 0.2 run 50000 unfix 1 # 体系缓慢降温 reset_timestep 0 thermo 1000 thermo_style custom step temp pe etotal press vol fix 1 all npt temp 0.85 0.01 1.0 iso 0 0 1.0 dump 1 all atom 10000 quench.lammpstrj run 1000000
- Ar在 T=0.4 左右发生一级相变,原子单位体积阶跃,实际Ar的平衡凝固温度约为0.70,分子动力学模拟过冷约40%
- lammps脚本待改进:
在NPT升温熔化过程中,某一特定温度下使用NVT系综保持一段时间,以达到热力学平衡,可以部分抑制过热或过冷现象
3.过热与过冷
- 形核是理解相变(包括熔化和凝固)的关键概念。在熔化过程中,形核是指在固体中形成小的液相团簇。这些团簇作为 “种子” 可以生长,最终导致固体完全熔化。形核必须克服一个能量障碍
- 临界尺寸:有一个临界尺寸,超过这个尺寸的核是能量上有利于生长的,而小于这个尺寸的核会收缩并消失。在一个小的模拟盒中形成这种临界尺寸的核是一个罕见的事件
- 波动:核变通常是由于热波动造成的,这些波动偶尔会在一个小区域内集中足够的能量来克服核变障碍。然而,这些波动是罕见的,可能不会在典型的分子动力学模拟的时间尺度内发生
- 分子动力学涉及的时间和空间尺度下,形核更加困难
- 形核更加困难导致预测的体系熔点过热
1.形核延迟:如果没有液相的核,固相可以持续到高于其平衡熔点的温度,从而导致过热
2.系统尺寸和周期性边界条件:较小的系统在随机波动中克服核变障碍的机会更少,使得在小模拟盒中更容易出现过热
3.加热速率:如果系统加热得太快,可能没有足够的时间来形成一个核,导致过热
4.亚稳态:过热的固体是一个亚稳态。它想要转变为液相,但被核变的能量障碍 “卡住” 了
5.形核位点:在真实材料中,杂质、缺陷或表面通常作为降低核变障碍的核变位点。这些通常不出现在模拟的理想化条件中
4.预测Cu的熔点
- 建立8×8×8的FCC晶格体系,充分弛豫后用Nose-Hoover方法,保持压强接近零,将体系从 T=2.5K 开始加热到2000K,发生熔化转变
- lammps脚本
units metal boundary p p p atom_style atomic lattice fcc 3.62 region box block 0 8 0 8 0 8 create_box 1 box create_atoms 1 box pair_style eam pair_coeff 1 1 Cu_u3.eam thermo 1000 thermo_style custom step temp pe etotal press vol velocity all create 100.0 4516516 dist gaussian fix 1 all npt temp 100.0 100.0 0.1 iso 0.0 0.0 1.0 run 10000 unfix 1 reset_timestep 0 fix 1 all npt temp 100 2000 0.1 iso 0 0 1.0 dump 1 all atom 1000 dump.lammpstrj run 120000
- lammps自带的potentials目录下,有几种不同类型的Cu原子相互作用势文件:Cu_u3.eam、Cu.meam、Cu_zhou.eam.alloy、Cu_mishini.eam.alloy
- MSD(Mean Square Displacement),均方位移,定义式为:
M
S
D
=
⟨
∣
r
(
t
)
−
r
(
0
)
∣
2
⟩
MSD=\left \langle |r(t)-r(0)|^{2} \right \rangle
MSD=⟨∣r(t)−r(0)∣2⟩ 其中,< >是对组内的所有原子进行平均,标识原子偏离其平衡位置的程度
MSD均方位移的量与原子的扩散系数存在对应的关系:
1.当体系是固态时,即体系温度处于熔点之下时,均方根位移存在上限值
2.当体系处于液态时,均方根位移呈线性关系,而且其斜率与原子的扩散系数存在如下关系: D = lim t → ∞ 1 6 t ⟨ ∣ r ( t ) − r ( 0 ) ∣ 2 ⟩ D=\lim_{t \to \infty} \frac{1}{6t}\left \langle |r(t)-r(0)|^{2} \right \rangle D=t→∞lim6t1⟨∣r(t)−r(0)∣2⟩ - 均方位移法计算熔点
compute msd 命令将对每个原子计算一个四维的矢量,其中前三个分量分别代表dx、dy、dz方向的均方位移,最后一个分量是原子的总均方位移compute 1 all msd fix msd all ave/time 10 100 1000 c_1[1] c_1[2] c_1[3] c_1[4] file msd.dat fix 1 all npt temp $x 2000 0.2 iso 0 0 10 run 500000
- 用分子动力学方法模拟熔化或者凝固过程时,往往会发生过热与过冷,其误差值基本保持在10% ~ 30%左右
- 过热或过冷的原因可以从热力学和动力学两方面阐述,比如杂质、缺陷引起的非均匀形核
4.计算纳米材料的熔点
- 纳米颗粒相比于体相结构,颗粒小导致表面能高,比表面原子数多,表面原子近邻配位不全,活性大于块材,因此熔化时所需增加的内能小得多,因此熔点降低
- 熔点的尺寸效应:熔点随尺寸减小而降低的现象通常称为Melting point depression。熔点降低的主要原因是由于纳米颗粒小,表面原子所占的比重就越大。材料熔点随尺寸变化的经验公式:
T
m
(
r
)
=
T
m
(
∞
)
(
1
−
α
d
D
)
=
T
m
(
∞
)
−
C
/
r
T_{m}(r)=T_{m}(\infty)(1-\alpha\frac{d}{D})=T_{m}(\infty)-C/r
Tm(r)=Tm(∞)(1−αDd)=Tm(∞)−C/r
α
\alpha
α 为材料相关的表面能,
d
d
d 为原子直径,
D
D
D 为材料直径
关于此现象的物理模型:Liquid Drop Model,Liquid Shell Nucleation Model,Surface Phonon Instability Model,Bond Order Length Strength Model等
1.林德曼指数
- 林德曼指数(Lindemann Index)已被广泛用于表征纳米粒子的熔化转变。在非周期性系统中,林德曼指数比扩散系数更方便使用,因为在计算原子的相对分离度时,不必从单个原子的运动中消除纳米粒子的质心运动和旋转。
- 林德曼指数定义为键长波动的相对均方根:
δ
=
2
N
(
N
−
1
)
∑
i
<
j
⟨
r
i
j
2
⟩
t
−
⟨
r
i
j
⟩
t
2
⟨
r
i
j
⟩
t
\delta =\frac{2}{N(N-1)}\sum_{i<j}\frac{\sqrt{\left \langle r_{ij}^{2} \right \rangle_{t}-\left \langle r_{ij} \right \rangle_{t}^{2} }}{\left \langle r_{ij} \right \rangle_{t} }
δ=N(N−1)2i<j∑⟨rij⟩t⟨rij2⟩t−⟨rij⟩t2 其中,
r
i
j
r_{ij}
rij 是原子 i 和原子 j 之间的距离,N 是原子数,t 表示时间平均值。熔化温度的特点是林德曼指数随温度的变化而突然跃升
Alavi, Saman, and Donald L. Thompson. “Molecular dynamics simulations of the melting of aluminum nanoparticles.” The Journal of Physical Chemistry A 110.4 (2006): 1518-1523.
2.计算CuNi合金纳米颗粒的熔点
- lammps脚本
# 初始化 units metal boundary p p p atom_style atomic # 生成 NiCu 纳米颗粒 variable A0 equal 3.589 lattice fcc ${A0} region mybox block 0 40 0 40 0 40 create_box 2 mybox # 2 种原子 region CuNi_nano sphere 20 20 20 2 create_atoms 1 region CuNi_nano set type 1 type/fraction 2 0.5 65643 mass 1 63.546 # Cu mass 2 58.6934 # Ni # 使用eam势函数 pair_style eam/alloy pair_coeff * * CuNi.eam.alloy Cu Ni write_data nanoparticle.cif run 0 # 热力学平衡步骤 thermo 1000 variable j loop 0 20 label loop_j variable temperature equal 900+10*$j variable T equal temp variable Eatom equal etotal/atoms fix 1 all nvt temp ${temperature} ${temperature} 0.1 run 50000 unfix 1 # 统计步骤 fix 2 all ave/time 100 5 1000 v_T v_Eatom file data_ave${temperature}.txt dump 1 all atom 5000 melt_ ${temperature}.atom fix 1 all nvt temp ${temperature} ${temperature} 0.1 run 500000 unfix 1 undump 1 next j jump SELF loop_j
- 林德曼指数计算熔点
1.NPT系综下,输出不同温度下的构型 (多个构型以便进行统计平均)
2.根据Lindemann Index的公式,编写程序,计算不同温度下的Lindemann值
3.将一系列温度下的Lindemann值绘制成曲线,突变点即为熔点
Lindemann Index一般用于计算非周期性体系的熔点,如纳米颗粒 - 计算林德曼指数Python代码
# 计算所有时间步的平均距离和均方距离 r_ave = np.mean(np.sqrt(r_square),axis = 0) r2_ave = np.mean(r_square,axis = 0) # 计算上三角元素的林德曼指数 value_upper = np.sqrt(r2_ave_upper - np.power(r_ave_upper,2)) / r_ave_upper # 所有唯一原子对的总和 total_value = np.sum(value_upper) # return total_value * 2 / (N * (N-1))
3.模拟Pt纳米颗粒的烧结
- 烧结:颗粒中的原子漫过颗粒边界,而产生融合,形成一个整体的过程。一些高熔点的材料通常使用烧结作为成型工艺
- 金属纳米颗粒通常被用作催化剂,其优异催化性能来源于大比表面积
- 烧结降低了催化剂的表面积,改变了催化剂的表面结构,是催化活性丧失的重要原因,因此抗烧结在催化剂中是急需解决的重大问题
- lammps脚本
# 初始化 units metal # 使用 metal 单位 boundary p p p atom_style atomic timestep 0.001 # 获得三个纳米Pt颗粒 variable A0 equal 3.9239 lattice fcc ${A0} region mybox block 0 20 0 20 0 20 region sphere_pt1 sphere 7 10 8 3 # 生成球形区域 region sphere_pt2 sphere 10 10 13.4 3 region sphere_pt3 sphere 13 10 8 3 create_box 1 mybox create_atoms 1 region sphere_pt1 create_atoms 1 region sphere_pt2 create_atoms 1 region sphere_pt3 # 使用eam势函数 pair_style eam pair_coeff 1 1 Pt_u3.eam # 输出初始结构 dump 1 all cfg 1 crood.*.cfg mass type xs ys zs run 0 undump 1 # 定义三个纳米颗粒的交界区域 region triple_neck block 7.5 12.5 5 15 9 13 group l dynamic all region triple_neck every 1000 # 输出tripl_neck区域的原子数 variable N equal step variable T equal temp variable Natom equal count(all) variable V equal vol/v_Natom variable sinter_atom equal count(l) dump 1 all xyz 1000 melt.xyz thermo 1000 fix extra all print 1000 "${N} ${T} ${sinter_atom}" file data.txt # 分别在500K,1000K,1400K下运行 fix 1 all npt temp 500 500 0.1 iso 1 1 1 run 10000 unfix 1 fix 1 all npt temp 1000 1000 0.1 iso 1 1 1 run 10000 unfix 1 fix 1 all npt temp 1400 1400 0.1 iso 1 1 1 run 10000 unfix 1
- 随着温度的升高和时间步长的增加,三个纳米颗粒交界区 Pt 原子数由329个增加到526个,表明烧结作用逐步增强
5.模拟材料的传热过程
1.热导率计算
-
通常采用平衡分子动力学(EMD)(Green-Kubo)、非平衡分子动力学(NEMD)(傅里叶定律)、反扰动动力学(rNEMD)(Muller-Plathe)等方法,来模拟材料的传热过程
-
NEMD计算思路:
采用非平衡动力学(NEMD)的进行模拟,通过在材料外部施加热流扰动,达到稳态后统计内部的温度分布,进而计算得出材料的热导率。
傅里叶定律: κ = − J A × ∇ T \kappa =-\frac{J}{A\times \nabla T} κ=−A×∇TJ 其中, J J J:热流 A A A:传热面积 ∇ T \nabla T ∇T:温度梯度
热流 J J J计算公式: J = ∂ E ∂ t J=\frac{\partial E}{\partial t} J=∂t∂E 其中, E E E:输入的能量 t t t:输入时间
温度梯度计算公式: ∇ T = ∂ T ∂ x \nabla T=\frac{\partial T}{\partial x} ∇T=∂x∂T 其中, T T T:温度 x x x:传热方向位移 -
建模方法:固定边界建模、周期性边界建模
-
冷热源设置:
1.fix langevin 命令# 通过郎之万法控制温度 fix 3 Hot langevin 400 400 0.05 14565 tally yes # Hot区域原子,初始温度400K,结束温度400K,温度阻尼0.05,随机种子14565,tally在恒温计算时加/减原子累计能量并保存 fix 4 Cold langevin 200 200 0.05 16576 tally yes # Cold区域原子,初始温度200K,结束温度200K,温度阻尼0.05,随机种子14565
2.fix heat 命令
# 保持其总动量方向不变的方式添加热量 fix hot all heat 1 10 region hot #所有原子,每隔1步添加热量,热量添加速率10,单位为ev,热源区域hot fix cold all heat 1 -10 region cold #所有原子,每隔1步添加热量,热量添加速率-10,冷源区域cold
3.fix ehex 命令
# 增强热交换法 fix hot all ehex 1 10 region hot # 所有原子,每隔1步添加热量,热量添加速率10,热源区域hot fix cold all ehex 1 -10 region cold # 所有原子,每隔1步添加热量,热量添加速率-10,冷源区域cold
-
热流计算:
fix langevin 命令fix 3 Hot langevin 400 400 0.05 14565 tally yes fix 4 Cold langevin 200 200 0.05 16576 tally yes variable Time equal step variable EL equal f_3 # 输入能量保存f_3 variable ER equal f_4 # 输出能量保存f_4 fix E_out all print 2000 "${Time} ${EL} ${ER}" file Enter_equ.dat title "Time E1 E2" screen no # 每2000步将能量数据保存为文件,设置标题,不输出屏幕
-
温度梯度计算:
compute ke1 all ke/atom # 计算所有原子的单原子动能 variable kb equal 8.625e-5 # 玻尔兹曼常数 variable temp1 atom c_ke1/1.5/${kb} # atom储存公式,动能转换温度 # 分块设置 chunk compute 18 all chunk/atom bin/1d x lower ${Dscale} units reduced # bin/1d一维分块,沿x方向,lower从低端开始,比例Dscale,units reduced 表示0-1之间的归一化无单位值 fix 11 all ave/chunk 1 10000000 10000000 18 v_temp1 file temp_equ.dat # 块内时间平均,保存温度数据,每1步使用输入值,使用输入值10000000次数,每10000000步计算平均值
2.石墨烯热导计算
- lammps脚本:
#初始基本参数设置 units metal #单位制 dimension 3 #维度 newton on #在计算对相互作用和键相互作用的时候使用牛顿第三定律 boundary p p p #周期性边界条件 atom_style full #原子类型full timestep 0.001 #时间步长,1fs=0.001ps neighbor 0.3 bin #邻居列表 read_data gp.data #读取data文件 #力场设置 pair_style airebo 3.0 #截断半径3.0 pair_coeff * * CH.airebo C #计算温度 compute ke1 all ke/atom #计算所有原子的单原子动能 variable kb equal 8.625e-5 #玻尔兹曼常数 variable temp1 atom c_ke1/1.5/${kb} #atom储存公式,动能转换温度 #设置热力学输出 thermo 1000 #每1000步输出 thermo_style custom step temp pxx pyy pzz press vol #输出步数、温度、xyz方向压力、压力、体积 #温度初始化 velocity all create 300 898758 mom yes rot yes dist gaussian #初始温度300K,mom yes 速度的线动量为零,rot yes角动量为零,高斯分布 #能量最小化 min_style cg #以cg方式进行能量最小化 minimize 1.0e-8 1.0e-8 1000000 1000000 #能量容差,力容差,最大迭代次数,最大评估次数 #在npt系综下进行弛豫 thermo 1000 #每1000步输出 thermo_style custom step temp pe ke etotal vol pxx pyy pzz press #etotal动能与势能之和,pe总势能,ke动能 fix 1 all npt temp 300 300 0.1 iso 0 0 1 #恒温恒压,300K dump 1 all custom 10000 npt.xyz id type x y z #保存所有原子信息为文件 run 250000 unfix 1 #取消 undump 1 reset_timestep 0 #设置当前时间步为第0步 write_data Gp.data #保存模型 #在nvt系综下进行弛豫 thermo 1000 #每1000步输出 thermo_style custom step temp pe ke etotal vol pxx pyy pzz press fix 1 all nvt temp 300 300 0.1 #恒温,300K dump 1 all custom 10000 nvt.xyz id type x y z #保存所有原子信息为文件 run 50000 unfix 1 #取消 undump 1 reset_timestep 0 #设置当前时间步为第0步 #设置分块参数 variable X1 equal xlo #最小值x variable X2 equal xhi #最大值x variable Nlay equal 100 #分块个数 variable Dscale equal 1/${Nlay} #比例 variable Len equal ${X2}-${X1} #总长度 variable Dz equal ${Len}/${Nlay} #单块长度 #设置冷热源端点坐标 variable BL1 equal ${X1}+2*${Dz} #热源 variable BR1 equal ${X1}+6*${Dz} variable BL2 equal ${X2}-6*${Dz} #冷源 variable BR2 equal ${X2}-2*${Dz} #区域设置 region reg_all block ${X1} ${X2} INF INF INF INF units box #整个区域 region fixed_L block INF ${BL1} INF INF INF INF units box #左侧固定端 region fixed_R block ${BR2} INF INF INF INF INF units box #右侧固定端 region Hot block ${BL1} ${BR1} INF INF INF INF units box #热源 region Cold block ${BL2} ${BR2} INF INF INF INF units box #冷源 #原子进行分组 group fixed_L region fixed_L group fixed_R region fixed_R group Hot region Hot group Cold region Cold group mobile subtract all fixed_L fixed_R #中间原子 #将x方向改为固定边界 change_box all boundary f p p #f为非周期固定边界 #固定两端 velocity fixed_L set 0 0 0 velocity fixed_R set 0 0 0 #设置xyz方向速度为0 fix fixed_L fixed_L setforce 0 0 0 fix fixed_R fixed_R setforce 0 0 0 #设置xyz方向受力为0 #使用langevin法设置冷热源 fix 3 Hot langevin 400 400 0.1 14565 tally yes #Hot区域原子,初始温度400K,结束温度400K,温度阻尼0.05,随机种子14565,tally在恒温计算时加/减原子累计能量并保存 fix 4 Cold langevin 200 200 0.1 16576 tally yes #Cold区域原子,初始温度200K,结束温度200K,温度阻尼0.05,随机种子16576 #保持nve系综 fix 5 all nve #设置冷热源的输入输出能量 variable Time equal step #时间 variable EL equal f_3 #输入能量保存f_3 variable ER equal f_4 #输出能量保存f_4 #分块设置 compute 18 all chunk/atom bin/1d x lower ${Dscale} units reduced #bin/1d一维分块,沿x方向,lower从低端开始,比例Dscale,units reduced 表示0-1之间的归一化无单位值 #计算每一块的温度 fix 8 all ave/chunk 1 10000 10000 18 v_temp1 file temp_relax.dat #块内时间平均,保存温度数据,每1步使用输入值,使用输入值10000次数,每10000步计算平均值 dump 1 all xyz 10000 relax.xyz #每10000步保存原子坐标 thermo 10000 #每10000步输出 thermo_style custom step temp ke pe etotal press vol #输出类型 run 100000 unfix 8 #取消 undump 1 reset_timestep 0 #设置当前时间步是第0步 #保存温差和能量 fix 11 all ave/chunk 1 10000 10000 18 v_temp1 file temp_equ.dat #块内时间平均,保存温度数据,每1步使用输入值,使用输入值10000次数,每10000步计算平均值 fix E_out all print 2000 "${Time} ${EL} ${ER}" file Enter_equ.dat title "Time E1 E2" screen no #每2000步将能量数据保存为文件,设置标题,不输出屏幕 dump 1 all xyz 10000 equ.xyz #每10000步保存原子坐标 thermo 10000 #每10000步输出 thermo_style custom step temp ke pe etotal press vol #输出类型 run 1000000
3.氩热导计算
- lammps脚本:
#基本参数设置 units metal #单位制 dimension 3 #维度 boundary p p p #边界条件 atom_style atomic #原子类型 timestep 0.01 #时间步长 #模型建立 lattice fcc 5.256 #晶格 region box block 0 20 0 4 0 4 #定义box区域 create_box 1 box #box区域一种原子 create_atoms 1 box #box区域生成类型1原子 mass 1 39.948 #设置原子质量 pair_style lj/cut 10.0 #lj/cut势,截断半径10 pair_coeff * * 1.051e-2 3.40 #速度初始化 velocity all create 60 12345 #初始温度60K #nvt系综下弛豫 fix 1 all nvt temp 60 60 1 #恒温 thermo 1000 #每1000步输出 thermo_style custom step temp press #自定义输出步数、温度和压力 run 20000 unfix 1 #取消 reset_timestep 0 #设置当前步为第0步 #冷热源设置 region Hot block 0 1 INF INF INF INF #热源 region Cold block 10 11 INF INF INF INF #冷源 fix 1 all nve #保存nve系综 #增强热交换法 fix hot all ehex 1 0.05 region Hot #每隔1步向Hot区域添加热量,速率0.05 fix cold all ehex 1 -0.05 region Cold #每隔1步从Cold区域减少热量,速率0.05 #设置计算温度 compute KE all ke/atom #计算所有原子的单原子动能,储存在KE中 variable KB equal 8.625e-5 #玻尔兹曼常数 variable TEMP atom c_KE/1.5/${KB} #原子温度 #分块设置 compute layer all chunk/atom bin/1d x lower 0.05 units reduced #bin/1d一维分块,沿x方向,lower从低端开始,比例0.05 fix 2 all ave/chunk 10 1000 10000 layer v_TEMP file temp.txt #保存块内时间平均温度,每10步使用输入值,使用输入值1000次,每10000步保存数据 #计算平均温差 variable tdiff equal f_2[1][3]-f_2[11][3] fix ave all ave/time 1 1 10000 v_tdiff ave running file tdiff.txt #输出所有原子的时间平均,每隔1步使用输入值,输入值计算1次,每10000步计算均值,ave running输出累积均值 dump 1 all atom 10000 heat.xyz #每10000步保存原子信息 run 100000