lammps模拟热力学性质

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=1Q1Q2<1     热力学第三定律(绝对零度不可到达): lim ⁡ T → 0 K ( Δ S ) T = 0 \lim_{T \to 0K}(\Delta S)_{T}=0 T0Klim(Δ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 ΔLT。在模拟过程中体积是变化的,要用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=ΔTVΔ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=tlim6t1r(t)r(0)2
  • 均方位移法计算熔点
    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
    
        compute msd 命令将对每个原子计算一个四维的矢量,其中前三个分量分别代表dx、dy、dz方向的均方位移,最后一个分量是原子的总均方位移
  • 用分子动力学方法模拟熔化或者凝固过程时,往往会发生过热与过冷其误差值基本保持在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(N1)2i<jrijtrij2trijt2     其中, 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=tE     其中, E E E:输入的能量   t t t:输入时间
        温度梯度计算公式 ∇ T = ∂ T ∂ x \nabla T=\frac{\partial T}{\partial x} T=xT     其中, 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
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值