lammps计算力学性质

1.计算平衡晶格常数

  • 晶格是晶体结构的数学表示,晶格中的每个格点代表一个基元
  • 平衡晶格常数对应的晶格具有最小的结合能
  • 找到结合能曲线的最低点,对应的就是最小的结合能 E ( a 0 ) E(a_{0}) E(a0)平衡晶格常数 a 0 a_{0} a0

1.Ar结合能的单点计算

  • units   lj          # LJ单位制,无量纲
    boundary   p p p
    atom_style   atomic
    
    lattice   fcc 1.00         # LJ单位制下为约化密度
    region    box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    mass   1 1.0
    
    pair_style   lj/cut 4.0
    pair_coeff   1 1 1.0 1.0 4.0
    
    variable   P equal pe         # 定义变量
    variable   L equal (count(all)/1.00)^(1/3)      # 变量L为晶格常数
    run   0
    print   "Lattice constant:$L"
    print   "Cohensive Energy of Ar:$P"
    
  • Ar 的LJ势参数 σ = 0.3405    n m ε = 1.654 × 1 0 − 21    J = 0.010324    e V \sigma = 0.3405 \; nm\quad\quad\varepsilon =1.654×10^{-21}\; J=0.010324\; eV σ=0.3405nmε=1.654×1021J=0.010324eV     Anikeenko, A. V., G. G. Malenkov, and Yu I. Naberukhin. “Visualization of vortex movements in a molecular dynamics model of liquid argon.” Doklady Physical Chemistry. Vol. 472. Pleiades Publishing, 2017.
  • 加入循环控制
    units   lj         
    boundary   p p p
    atom_style   atomic
    
    label   loop_i              # 用指定ID来标记脚本中该命令所在的这一行
    variable   i loop 50
    variable   x equal 1.02+0.002*$i
    
    lattice   fcc $x        
    region    box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    mass   1 1.0
    
    pair_style   lj/cut 4.0
    pair_coeff   1 1 1.0 1.0 4.0
    variable   P equal pe        
    variable   L equal (count(all)/1.00)^(1/3)     
    run   0
    print   "Cohensive Energy of Ar a = $L E = $P"
    clear             # 删除所有原子,将所有设置恢复到默认值,并释放由lammps分配的所有内存
    next i               # 将值列表中的下一个值赋给变量
    jump SELF loop_i             # 跳转到指定脚本的指定位置
    # file = SELF时,将重新打开当前的输入脚本
    
  • Python进行结果分析
    import numpy as np
    import pandas as pd
    from matplotlib import pyplot as plt
    # 读取数据 (之前存储的csv文件)
    filename = "Ar_fcc.csv"
    DataFrame = pd.read_csv(filename)
    lat = np.array(DataFrame['lat'])
    ene = np.array(DataFrame['ene'])
    # 用二次函数拟合
    a,b,c = np.polyfit(lat,ene,2)
    mesh = np.linspace(np.min(lat),np.max(lat),1000)
    opt_lat = -b/(2*a)
    Emin = np.polyval([a,b,c],opt_lat)
    print("a,b,c =",a,b,c)
    print("Emin =",Emin,"opt_lat =",opt_lat)
    # 数据可视化
    plt.scatter(lat,ene,10)
    plt.plot(mesh,a*mesh**2+b*mesh+c)
    plt.xlabel('Lattice parameter')
    plt.ylabel('Energy')
    plt.show()
    # 模拟结果 a0 = 1.54 σ
    
  • 与理论值对比
        FCC结构 Ar 气体的理论平衡晶格常数: ∂ u ∂ r = − 2 ε [ n A n ( σ n r n + 1 ) − m A m ( σ m r m + 1 ) ] = 0 \frac{\partial u}{\partial r} =-2\varepsilon [nA_{n}(\frac{\sigma ^{n}}{r^{n+1}})-mA_{m}(\frac{\sigma ^{m}}{r^{m+1}})]=0 ru=2ε[nAn(rn+1σn)mAm(rm+1σm)]=0     平衡距离: r 0 = ( 2 A 12 A 6 ) 1 / 6 σ = 1.09 σ r_{0}=(\frac{2A_{12}}{A_{6}})^{1/6}\sigma=1.09\sigma r0=(A62A12)1/6σ=1.09σ     平衡晶格常数: a = 2 r 0 = 1.54 σ a=\sqrt{2}r_{0}=1.54\sigma a=2 r0=1.54σ

2.金属Al的平衡晶格常数

  • 晶格常数循环控制法:循环产生一系列连续变化的晶格常数,计算各值下的能量,最低值对应的晶格常数即为平衡晶格常数
    units   metal
    boundary   p p p
    atom_style   atomic
    variable   i loop 30
    variable   x equal 3.90+0.01*$i 
    
    lattice   fcc $x
    region   box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    
    pair_style   eam/fs                   # eam/fs势进行计算
    pair_coeff   * * Al_mm.eam.fs Al    
    
    variable   n eqaul count(all)
    variable   P equal pe/$n
    
    run   0
    print   "Cohensive Energy of Al a = $x E = $P"
    clear
    next   i
    jump   SELF
    
  • 晶格结构弛豫法:使用共轭梯度法优化晶体结构
    units   metal
    dimension   3
    boundary   p p p
    atom_style   atomic
    
    lattice   fcc 4.00
    region   box block 0 1 0 1 0 1 units lattice
    create_box   1 box
    create_atoms   1 box
    
    pair_style   eam/fs           # eam/fs势函数
    pair_coeff   * * Al_mm.eam.fs Al
    
    neighbor   2.0 bin              # 近邻列表
    neigh_modify   delay 10 check yes
    
    compute   eng all pe/atom              # 定义计算和输出
    compute   eatoms all reduce sum c_eng
    dump   1 all atom 1 relax.lammpstrj
    # 能量最小化
    reset_timestep   0
    fix   1 all box/relax iso 0.0 vmax 0.001            # 外部压强为0,体积变化最大为0.1%
    thermo   10
    thermo_style   custom step pe lx ly lz press pxx pyy pzz c_eatoms
    
    min_style   cg                      # 共轭梯度算法结构优化,最速下降法(sd)
    minimize   1e-25 1e-25 5000 10000
    
    variable   natoms equal count(all)
    variable   teng equal "c_eatoms"
    variable   a equal lx
    variable   ecoh equal "v_teng/v_natoms"
    
    print "Total energy (eV)= ${teng};"
    print "Number of atoms = ${natoms};"
    print "Lattice constant (Angstroms) = ${a};"
    print "Cohensive energy (eV/atom) = ${ecoh};"
    
  • 如何预测其他元素的最稳定构型?
        列举常见的晶格类型,通过改变晶格常数获得该晶体类型下的最低能量,比较不同类型晶体的最低能量即为最稳定构型
  • 晶格常数的拟合区间不宜过小,过小会放大截断误差,影响计算精度
  • 区间也不宜过大,过大会有非谐效应的出现,使实际曲线偏离二次型较大

2.计算体积模量

  • 体积模量:是衡量物质可压缩性的指标。对于体积模量Bulk Modulus,有时也称体变模量。假设,在 P 0 P_{0} P0 的情况下体积为 V 0 V_{0} V0,若压强变化 d P dP dP,则体积变化 d V dV dV
  • 体积模量 B 为: B = − V ( ∂ P ∂ V ) T B=-V(\frac{\partial P}{\partial V} )_{T} B=V(VP)T
  • 在 T=0 的情况下,压强 P 为 P = − ∂ U ∂ V P=-\frac{\partial U}{\partial V} P=VU     其中 U 为体系的总能 B = − V ( ∂ P ∂ V ) T = V ∂ 2 U ∂ V 2 B=-V(\frac{\partial P}{\partial V} )_{T}=V\frac{\partial^{2}U}{\partial V^{2}} B=V(VP)T=VV22U     定义单原子的能量和体积 u = U N v = V N u=\frac{U}{N}\quad\quad v=\frac{V}{N} u=NUv=NV B = v ∂ 2 u ∂ v 2 B=v\frac{\partial ^{2}u}{\partial v^{2}} B=vv22u

1.LJ体系的体积模量

u = 2 ε [ ∑ i ≠ j ( 1 M i j ) 12 ( σ r ) 12 − ∑ i ≠ j ( 1 M i j ) 6 ( σ r ) 6 ] = 2 ε [ A 12 ( σ r ) 12 − A 6 ( σ r ) 6 ] u=2\varepsilon[\sum_{i\ne j}(\frac{1}{M_{ij}})^{12}(\frac{\sigma}{r})^{12}-\sum_{i\ne j}(\frac{1}{M_{ij}})^{6}(\frac{\sigma}{r})^{6}] = 2\varepsilon [A_{12}(\frac{\sigma}{r})^{12}-A_{6}(\frac{\sigma}{r})^{6}] u=2ε[i=j(Mij1)12(rσ)12i=j(Mij1)6(rσ)6]=2ε[A12(rσ)12A6(rσ)6] A 12 = ∑ j 1 M i j 12 = 12.13 A 6 = ∑ j 1 M i j 6 = 14.45 A_{12}=\sum_{j}\frac{1}{M_{ij}^{12}}=12.13\quad\quad A_{6}=\sum_{j}\frac{1}{M_{ij}^{6}}=14.45 A12=jMij121=12.13A6=jMij61=14.45     根据链式求导法则: ∂ u ∂ r = ∂ u ∂ v ⋅ ∂ v ∂ r \frac{\partial u}{\partial r} =\frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial r} ru=vurv     对于 FCC 晶体 v = a 3 4 = r 3 2 ( ∂ v ∂ r ) 2 = 9 r 4 2 v=\frac{a^{3}}{4}=\frac{r^{3}}{\sqrt{2}}\quad\quad (\frac{\partial v}{\partial r} )^{2}=\frac{9r^{4}}{2} v=4a3=2 r3(rv)2=29r4     体积模量 B B = v ∂ 2 u ∂ v 2 = v ( ∂ v ∂ r ) 2 ⋅ ∂ 2 u ∂ r 2 = 2 9 r ⋅ ∂ 2 u ∂ r 2 ∣ r = r 0 B=v\frac{\partial^{2} u}{\partial v^{2}} =\frac{v}{(\frac{\partial v}{\partial r} )^{2}}\cdot \frac{\partial^{2} u}{\partial r^{2}}=\frac{\sqrt{2}}{9r}\cdot\frac{\partial^{2} u}{\partial r^{2}}|r=r_{0} B=vv22u=(rv)2vr22u=9r2 r22ur=r0

  • LJ体积模量的lammps脚本
    units   lj
    boundary   p p p
    atom_style   atomic
    label   LOOP
    variable   i loop 40                       # 晶格常数控制体积变化 
    variable   x equal 1.05+0.002*$i
    lattice   fcc $x 
    region   box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    pair_style   lj/cut 8.50                 # 使用lj/cut势函数 
    pair_coeff   * * 1.0 1.0
    mass   1 1.0
    thermo_style   custom etotal
    variable   P equal pe                 # 定义计算变量,P为单原子势能
    variable   v eqaul (1.0/$x)                  # 单原子体积
    dump   1 all custom 10 trj.lammpstrj id type x y z vx vy vz
    run   0
    print   "fcc lattice rho = $v E = $P"
    clear
    next   i
    jump   SELF LOOP
    
        结果误差来源:E-V 数据存在一定的非谐效应
  • 拟合物态方程求体弹模量
        拟合Birch-Murnaghan方程 E ( V ) = E 0 + B 0 V B 0 ′ ( ( V 0 / V ) B 0 ′ B 0 ′ − 1 + 1 ) − B 0 V 0 B 0 ′ − 1 E(V)=E_{0}+\frac{B_{0}V}{B'_{0}}(\frac{(V_{0}/V)^{B'_{0}}}{B'_{0}-1}+1)-\frac{B_{0}V_{0}}{B'_{0}-1} E(V)=E0+B0B0V(B01(V0/V)B0+1)B01B0V0     待拟合参数 E 0 E_{0} E0:平衡状态结合能, V 0 V_{0} V0:平衡状态体积, B 0 B_{0} B0:平衡状态体积模量, B 0 ′ B'_{0} B0:初始值取 3.5
  • Python代码拟合Birch-Murnaghan方程
    import pandas as pd
    import numpy as np
    # 读取数据 (之前存储的csv文件):
    df = pd.read_csv('data.csv')
    v = np.array(df['v'])
    e = np.array(df['e'])
    # 先做一次多项式拟合,根据多项式拟合的结果设置初始猜测解x0
    a,b,c = np.polyfit(v,e,2)
    v0 = -b/(2*a)
    e0 = a*v0**2 + b*v0 + c
    b0 = 2*a*v0
    bP = 3.5
    x0 = [e0,b0,bP,v0]
    def Murnaghan(parameters.vol):
        E0 = parameters[0]
        B0 = parameters[1]
        BP = parameters[2]
        V0 = parameters[3]
        E = E0 + B0*vol/BP*(((V0/vol)**BP)/(BP-1)+1) - V0*B0/(BP-1.)
        return E
        
    # 定义误差 (优化目标)
    def residual(pars,y,x):
        err = y - Murnaghan(pars,x)
        return err
    # 进行拟合
    from scipy.optimize import leastsq
    murnpars,ier = leastsq(residual,x0,args=(e,v))
    # 输出结果
    print('Bulk Modulus:' + str(murnpars[1]))
    print('lattice constant:',murnpars[3]**(1/3))
    # 拟合效果可视化
    from matplotlib import pyplot as plt
    v_mesh = np.linspace(np.min(v),np.max(v),1000)
    plt.scatter(v,e,10)
    plt.plot(v_mesh,Murnaghan(murnpars,v_mesh))
    plt.ylabel('Energy')
    plt.xlabel('Volume')
    plt.show()
    
  • Birch-Murnaghan 方程因为更接近于物理实际,所有得到的结果与解析解最为接近;体积模量的拟合,应优先使用Brich-Murnaghan方程

2.计算Cu的体积模量

  • Cu 的LJ势参数 σ = 0.2338    n m ε = 65.58 × 1 0 − 21    J = 0.40933    e V \sigma = 0.2338\; nm\quad\quad\varepsilon =65.58 × 10^{-21}\;J=0.40933\;eV σ=0.2338nmε=65.58×1021J=0.40933eV     Lv, Jizu, et al. “The molecular dynamic simulation on impact and friction characters of nanofluids with many nanoparticles system.” Nanoscale research letters 6 (2011): 1-8.
  • 根据LJ势参数计算
        原子间平衡距离 r 0 = 1.09 σ = 2.55    A ˚ r_{0}=1.09\sigma =2.55\;\AA r0=1.09σ=2.55A˚    结合能 u 0 = 2 ε [ A 12 ( σ r 0 ) 12 − A 6 ( σ r 0 ) 6 ] = − 8.6069 ε = − 3.52    e V u_{0}=2\varepsilon[A_{12}(\frac{\sigma}{r_{0}})^{12}-A_{6}(\frac{\sigma}{r_{0}})^{6}]=-8.6069\varepsilon =-3.52\;eV u0=2ε[A12(r0σ)12A6(r0σ)6]=8.6069ε=3.52eV     实验中 Cu-Cu 键长:2.56 Å,Cu 的结合能:-3.49 eV
  • LJ势计算Cu的体积模量
    units   metal
    boundary   p p p
    atom_style   atomic
    # 设置loop
    variable   i loop 40
    variable   x equal 3.40+0.01*$i
    lattice   fcc $x
    region   box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    mass   1 64
    # 使用Cu的LJ势参数
    pair_style   lj/cut 10.0
    pair_coeff   1 1 0.40933 2.338
    variable   v equal ($x)^3
    variable   n equal count(all)
    variable   P equal pe
    # 运行
    run   0
    print "Cohensive Energy of Cu v = $v x = $x E = $P"
    clear
    next   i
    jump   SELF 
    

    计算值与实验值差距很大,原因:LJ 势函数不能准确描述金属原子相互作用

  • EAM势计算Cu体积模量
    units   metal
    boundary   p p p
    atom_style   atomic
    # 设置loop
    variable   i loop 40
    variable   x equal 3.40+0.01*$i
    lattice   fcc $x
    region   box block 0 1 0 1 0 1
    create_box   1 box
    create_atoms   1 box
    mass   1 64
    # 使用EAM势
    pair_style   eam
    pair_coeff   * * Cu_u3.eam
    variable   v equal ($x)^3
    variable   n equal count(all)
    variable   P equal pe
    # 运行
    run   0
    print "Cohensive Energy of Cu v = $v x = $x E = $P"
    clear
    next   i
    jump   SELF 
    

    计算体积模量:136.93 GPa,实验值范围:130 ~ 145 GPa

3.材料拉伸压缩模拟

  • 应力和应变之间的关系称为该材料的应力-应变曲线
        应力 σ = F A 0 \sigma=\frac{F}{A_{0}} σ=A0F     应变 ε = L − L 0 L 0 = Δ L L 0 \varepsilon =\frac{L-L_{0}}{L_{0}}=\frac{\Delta L}{L_{0}} ε=L0LL0=L0ΔL

1.拉伸压缩基础命令

  • 建模命令
    read_data、lattice、region、create_atoms
    
  • 边界条件设置
     deform拉伸,盒子等比例拉伸:拉伸方向为p
     velocity拉伸,固定两端,设置速度场:拉伸方向为s
  • 弛豫过程
     拉伸方向尽量在npt(不适用s边界条件)下弛豫,消除内应力
  • 应变公式
    variable   tmp equal "ly"   #定义tmp变量为ly
    variable   L0 equal ${tmp}  #将第一次tmp取值存入L0
    variable   strain equal "(ly-v_L0)/v_L0"  #定义应变变量
    variable   p1 equal "v_strain"
    
  • 应变速率
    variable  srate equal 1.0e10  
    variable  srate1 equal "v_srate/1.0e12"  #速率单位转换
    
  • 应力计算
    variable  p2 equal "-pyy/10000"  #单位转换
    # 或
    compute   peratom all stress/atom NULL  #计算所有原子的单原子应力,定义为变量peratom
    compute   p all reduce sum c_peratom[2]  #将所有原子的Y方向的应力加和,定义为p
    variable  p2 equal c_p/vol  #平均应力=应力和/体积
    
  • 应力与应变数据保存到文件
    fix   def1 all print 100 "${p1}${p2}" file strain_stress.txt screen no  
    #每隔100步输出所有原子的应力应变,保存为指定文件,屏幕不输出
    

2.单层石墨烯拉伸

  • lammps脚本
    units   real                  # real单位制
    timestep   1
    variable   fpress equal 0.000101325            # fpress和fenergy用于单位转换,atm -> GPa
    variable   fenergy equal 0.043                    # Kcal/mole -> eV
    # 单层石墨烯
    dimension   3
    boundary   p p f
    atom_style   charge                           # 指定原子属性包括种类、坐标和电荷
    read_data   grapheneLarge.dat               # 导入石墨烯模型
    pair_style   reax/c NULL checkqeq no                # 使用反应力场势函数,lammps需编译USER-REAXC包
    pair_coeff   * * ffield.reax C
    # 温度设置
    variable   temp equal 300
    variable   seed equal 1356
    velocity   all create ${temp} ${seed} dist uniform                   # 正态分布产生温度为300K的初始温度
    # 平衡
    fix   fnpt all npt temp ${temp} ${temp} 10 x 0 0 500 y 0 0 500  
    # 所有原子温度为${temp},温度阻尼为10,控制x和y方向上压力为0,压力阻尼为500,z方向不施加压力控制 
    thermo   100
    run   1000                      # 在NPT系综下弛豫1000步
    unfix   fnpt
    # 输出,假设石墨烯厚度为 3.35 A
    variable   tmp equal lx                         
    variable   lx0 equal ${tmp}                  # lx0 初始x方向长度
    variable   tmp equal ly                    # 对于equal的变量,每次引用该变量时,其值都会被重新计算
    variable   ly0 equal ${tmp}                  # ly0 初始y方向长度
    variable   Eavg equal etotal/atoms*${fenergy}              # Eavg 原子平均能量
    variable   pe equal pe/atoms*${fenergy}
    variable   ke equal ke/atoms*${fenergy}
    variable   strainx equal (lx-${lx0})/${lx0}
    variable   strainy equal (ly-${ly0})/${ly0}
    variable   stressx equal -pxx*(lz/3.35)*${fpress}
    variable   stressy equal -pyy*(lz/3.35)*${fpress}
    thermo_style   custom step time temp etotal press v_Eavg v_pe v_ke v_strainx v_stressx v_strainy v_stressy 
    # 变形
    fix   boxdeform all deform 1 x scale 2 remap x               
    # fix deform命令改变盒子的体积或形状,每跑1步变形1次,X方向最终形变为初始的2倍长度 ,原子位置随box同比例形变
    fix   fnpt all npt temp ${temp} ${temp} 10 y 0 0 500
    thermo   100
    run   10000
    
  • 模拟结果:极限拉伸强度为165 GPa,线弹性区最大至应变20%,拉伸到应变37%发生断裂,杨氏模量 E = σ / ε = 0.814    T P a E=\sigma/\varepsilon =0.814\;TPa E=σ/ε=0.814TPa
  • 实验测量杨氏模量:0.9 ~ 1.1 TPa
        Lee, Changgu, et al. “Measurement of the elastic properties and intrinsic strength of monolayer graphene.” science 321.5887 (2008): 385-388.

3.Fe三向拉伸

  • lammps脚本
    # Fe三向拉伸
    
    #------------模型设置-------------
    units             metal             #单位制
    dimension         3                    #3维
    boundary          p p p             #周期性边界条件
    atom_style        atomic           #原子类型
    neighbor          2 bin              #邻居列表
    timestep          0.005             #时间步长
    
    #-----------建立模型--------------
    lattice           bcc 2.8665    #晶格
    region            box block 0 20 0 20 0 20  #建立box区域
    create_box        1 box                  #设置原子类型数
    create_atoms      1 box                  #box区域生成类型1原子
    
    #----------力场设置---------------
    pair_style         eam/fs               #eam势
    pair_coeff         * * Fe.eam.fs Fe
    
    #----------能量最小化------------
    thermo          100                  #每隔100步输出
    thermo_style    custom step temp press pe    #输出步数、温度、压力、势能
    
    dump             1 all custom 100 Fe_mini.xyz id type x y z   #每隔100步存储原子ID 类型 xyz坐标
    min_style        cg                                     #cg法进行能量最小化,共轭梯度法
    minimize         1e-5 1e-15 5000 5000     #能量容差,力容差,最大迭代次数,最大评估次数
    undump           1                              #取消转存
    
    #----------速度初始化-------------
    velocity         all create 300 876848 dist gaussian       #初始温度300K,高斯分布
    
    #----------npt弛豫-----------------
    fix               1 all npt temp 300 300 0.5 iso 0 0 5          #恒温恒压,300K
    dump              1 all custom 1000 Fe_npt.xyz id type x y z  #每隔1000步存储原子ID 类型 xyz坐标
    run               10000                                          #运行步数
    
    unfix             1
    undump            1                                               #取消命令
    
    #-------------应力应变设置---------------
    variable         tmpx equal "lx"                            #x方向
    variable         Lx0 equal ${tmpx}
    variable         strainx equal "(lx - v_Lx0)/v_Lx0"
    variable         stressx equal "-pxx/10000"
    
    variable         tmpy equal "ly"                             #y方向
    variable         Ly0 equal ${tmpy}
    variable         strainy equal "(ly - v_Ly0)/v_Ly0"
    variable         stressy equal "-pyy/10000"
    
    variable         tmpz equal "lz"                             #z方向
    variable         Lz0 equal ${tmpz}
    variable         strainz equal "(lz - v_Lz0)/v_Lz0"
    variable         stressz equal "-pzz/10000"
    
    #----------------应力应变保存文件------------------------
    fix              def3 all print 100 "${strainx} ${stressx} ${strainy} ${stressy} ${strainz} ${stressz}" &
                     file stress_strain.dat screen no    #每100步保存文件,不输出屏幕
    
    #----------------三向拉伸----------------------------
    fix              1 all nve                                                   #nve系综
    fix              2 all temp/rescale 10 300 300  10 1.0     #速度标定法,每10步重新缩放,温度差超过10的时候进行缩放,分数=1.0表示温度超出后重置为期望值
    fix              3 all deform 100 x erate 0.005 y erate 0.005 z erate 0.005 remap x units box    #盒子单位,remap x将原子坐标重新映射到盒子
    dump             1 all custom 100 Fe_tension.xyz id type x y z       #每100步存储
    run              50000
    

4.高熵合金FeNiCrCoCu拉伸

  • lammps脚本
    #初始参数设置
    units                   metal                       #单位
    dimension               3                              #维度
    boundary                p p p                        #边界条件
    atom_style              atomic                     #原子类型
    timestep                0.001                       #时间步长
    neighbor                2.0 bin                     #邻居列表
    
    #模型建立
    lattice                 fcc 3.6149              #Cu晶格
    region                  box block 0 10 0 20 0 10    #定义box区域
    create_box              5 box                      #原子类型数
    create_atoms            1 box                      #生成类型1原子
    
    #按比例将类型1原子替换为其他原子
    set                     type 1 type/ratio 2 0.2 87393  
    set                     type 1 type/ratio 3 0.5 87393     
    set                     type 1 type/ratio 4 0.5 87393     
    set                     type 3 type/ratio 5 0.5 87393 
    
    #设置摩尔质量
    mass                   1   55.845    #Fe
    mass                   2   58.6934  #Ni
    mass                   3   51.9961  #Cr
    mass                   4   58.933194  #Co
    mass                   5   63.546     #Cu
    
    #保存模型data文件
    write_data            al1.xyz
    
    #设置原子间相互作用势
    pair_style            eam/alloy           #eam势
    pair_coeff            * * FeNiCrCoCu-heafixed.setfl Fe Ni Cr Co Cu
    
    #输出热力学信息
    thermo              100
    thermo_style        custom step temp pe ke press    #每100步输出步数、温度、动能、势能、压力
    
    #能量最小化
    dump                1 all atom 10 mini.xyz                 #每10步将原子相关信息保存为文件
    min_style           cg                     #使用cg方法进行能量最小化
    minimize            1e-15 1e-15 5000 5000   #能量容差、力容差、最大迭代次数、最大评估次数
    undump              1                           #取消
    reset_timestep      0                      #设置当前时间步为第0步
    
    #温度初始化
    velocity            all create 300 88989    #初始温度300K
    
    #npt系综下弛豫
    dump                1 all custom 1000 npt.xyz id type x y z    #每1000步保存原子信息
    fix                 1 all npt temp 300 300 0.1 iso  0 0 1      #恒温恒压
    run                 50000
    undump              1
    unfix               1                #取消
    reset_timestep      0
    
    #应力应变输出
    variable           tmp equal "ly"            #y方向
    variable           L0 equal  ${tmp}
    variable           strain equal "(ly-v_L0)/v_L0" 
    variable           p1 equal "v_strain"
    variable           p2 equal "-pyy/10000"
    fix                def1 all print 100 "${p1} ${p2}" file strain_stress.txt screen no   #每100步保存应力应变,不输出屏幕
    
    #定义拉伸应变速率
    variable           srate equal 1.0e10
    variable           srate1 equal "v_srate / 1.0e12"
    
    #保存拉伸轨迹文件
    shell              "mkdir tension"                 #执行shell命令,新建tension文件夹
    dump               1 all custom 100 tension/dump.tensile_*.xyz type x y z   #‘*’表示每100步保存一次
    
    #nvt系综下使用deform单轴拉伸
    fix                1 all nvt temp 298 298 0.1
    fix                2 all deform 10 y erate ${srate1} remap x units box
    run                25000
    

5.铝和石墨烯复合物压缩变形

  • lammps脚本
    #模型基本设置
    units                 metal                              #单位
    dimension             3                                     #维度
    boundary              p p p                               #边界条件
    timestep              0.001                               #时间步长
    neighbor              0.3 bin                             #邻居列表
    neigh_modify          delay 0
    
    #box设置
    region                box block 0 50 0 50 0 40 units box           #设置box区域,使用盒子单位
    create_box            2 box                                     #box区域有两种原子
    
    #生成Al原子
    lattice               fcc  4.0495                             #Al晶格
    region                al block 0 50 0 50 0 40 units box          #设置al区域,使用盒子单位
    create_atoms          1 region al                               #在al区域生成类型1原子
    
    #删除中间一层Al原子
    region                del block 0 50 0 50 18 23 units box         #设置待删除区域,使用盒子单位
    delete_atoms          region del compress yes          #compress yes删除区域后,对原子重新排序
    
    #自定义石墨烯晶格
    lattice               custom 2.4768  a1  1.0 0.0 0.0  a2  0.0 1.732 0.0  a3  0.0 0.0 1.3727  &
                            basis  0.0  0.33333  0.0  &
                            basis  0.0  0.66667  0.0  &
                            basis  0.5  0.16667  0.0  &
                            basis  0.5  0.83333  0.0  &
    
    #在中间层插入石墨烯原子
    region              graphene block 0 50 0 50 18 23 units box        #设置石墨烯区域,使用盒子单位
    create_atoms        2 region graphene                                       #在石墨烯区域生成类型2原子
    
    #设置原子质量 
    mass                1 26.9815385                #Al
    mass                2 12.011                        #C 
    
    #设置力场参数
    pair_style        hybrid lj/cut 10 eam/fs airebo 3.0                  #使用混合势
    pair_coeff        1 2 lj/cut  0.0234943   3.1482                        #Al-C之间
    pair_coeff        * * eam/fs Al1.eam.fs Al NULL                        #Al-Al之间
    pair_coeff        * * airebo CH.airebo NULL C                            #C-C之间
    
    #能量最小化
    dump             1 all atom 1 1_mini.lammpstrj      #每隔1步保存原子相关信息
    min_style        cg                                            #以cg法进行能量最小化
    minimize         1e-15 1e-15 10000 10000     #能量容差、力容差、最大迭代次数、最大评估次数
    undump           1                                                #取消输出
    
    #温度初始化
    velocity         all create 300 8877423          #初始温度300K
    
    #npt系综下进行弛豫
    fix              1 all npt temp 300 300 0.01 iso 0 0 1              #恒温恒压                                                     
    dump             1 all atom 1000 2_npt.lammpstrj                     #每1000步将原子相关信息保存为文件
    run              50000
    unfix            1                         #取消
    undump           1 
    reset_timestep   0                   #设置当前步为第0步
    
    #应力应变设置
    variable         tmp equal "lz"             #z方向
    variable         L0 equal ${tmp}
    variable         strain equal "(v_L0-lz)/v_L0"          #应变
    variable         stressz equal "pzz/10000"          #应力
    variable         srate equal 1.0e10                      #应变速率
    variable         srate1 equal "-1*v_srate/1.0e12"
    
    #应力应变保存文件
    fix              def3 all print 100 "${strain} ${stressz}" file stress_strain.dat screen no     #每100步保存,不输出屏幕
    
    #热力学输出
    thermo         100
    thermo_style   custom step temp lx ly lz vol pxx pyy pzz              #每100步输出步数、温度、xyz长度、体积、xyz方向压力
    
    #压缩设置
    fix            1 all npt temp 300 300 0.01 x 0 0 0.1 y 0 0 0.1               #恒温,xy方向压缩 
    fix            2 all deform 1 z erate ${srate1} units box remap x          #使用盒子单位,z方向压缩,remap x映射到盒子
    
    #输出轨迹文件
    dump           1 all atom 100 3_deform.lammpstrj                          #每100步保存原子相关信息
    run            30000
    

4.其他力学性质计算

1.弹性常数

  • 弹性常数(elastic constants)表征材料弹性的物理量,弹性形变时应力与应变满足胡克定律。联系各向异性介质中应力和应变关系的广义弹性张量共有81个分量,但这81个分量并不独立,可以根据晶体的对称性简化为21个独立分量 σ i j = C i j k l ε k l \sigma_{ij}=C_{ijkl}\varepsilon _{kl} σij=Cijklεkl c i j m n = c j i m n = c i j n m = c j i n m = c m n i j = c n m i j = c m n j i = c n m j i c_{ijmn}=c_{jimn}=c_{ijnm}=c_{jinm}=c_{mnij}=c_{nmij}=c_{mnji}=c_{nmji} cijmn=cjimn=cijnm=cjinm=cmnij=cnmij=cmnji=cnmji
  • 以FCC的晶体Cu为例,根据对称性和独立弹性常数个数的关系可知,具有立方对称性的材料有3个独立弹性常数 C = ( C 11 C 12 C 12 0 0 0 C 12 C 11 C 12 0 0 0 C 12 C 12 C 11 0 0 0 0 0 0 C 44 0 0 0 0 0 0 C 44 0 0 0 0 0 0 C 44 ) C=\begin{pmatrix}C_{11} &C_{12}&C_{12}&0&0&0 \\ C_{12}&C_{11}&C_{12}&0&0&0 \\ C_{12}&C_{12}&C_{11}&0&0&0 \\ 0&0&0&C_{44}&0&0 \\ 0&0&0&0&C_{44}&0 \\ 0&0&0&0&0&C_{44} \end{pmatrix} C= C11C12C12000C12C11C12000C12C12C11000000C44000000C44000000C44
        体系的弹性内能: E e l a s / V = 1 2 ∑ i j C i j ε i ε j E^{elas}/V=\frac{1}{2}\sum_{ij}C_{ij}\varepsilon _{i}\varepsilon _{j} Eelas/V=21ijCijεiεj     可构造相应的弹性形变来计算弹性常数
  • 获得弹性常数,构造出刚度张量,就可以计算材料的各种弹性性质
        刚度张量 C = ( C 11 C 12 C 12 0 0 0 C 12 C 11 C 12 0 0 0 C 12 C 12 C 11 0 0 0 0 0 0 C 44 0 0 0 0 0 0 C 44 0 0 0 0 0 0 C 44 ) C=\begin{pmatrix}C_{11} &C_{12}&C_{12}&0&0&0 \\ C_{12}&C_{11}&C_{12}&0&0&0 \\ C_{12}&C_{12}&C_{11}&0&0&0 \\ 0&0&0&C_{44}&0&0 \\ 0&0&0&0&C_{44}&0 \\ 0&0&0&0&0&C_{44} \end{pmatrix} C= C11C12C12000C12C11C12000C12C12C11000000C44000000C44000000C44     柔度张量 [ S ] = [ C ] − 1 [S]=[C]^{-1} [S]=[C]1

2.杨氏模量和泊松比

  • 弹性材料承受正向应力时会产生正向应变,定义正向应力与正向应变的比值为材料的杨氏模量(Young’s modulus): Y = σ ε = F / A 0 Δ L / L 0 = F L 0 A 0 Δ L Y=\frac{\sigma}{\varepsilon}=\frac{F/A_{0}}{\Delta L/L_{0}}=\frac{FL_{0}}{A_{0}\Delta L} Y=εσ=ΔL/L0F/A0=A0ΔLFL0     弹性材料承受单轴拉伸时,唯一的应力为 σ x x \sigma_{xx} σxx ε x x = S 11 σ x x \varepsilon_{xx}=S_{11}\sigma_{xx} εxx=S11σxx Y = σ x x ε x x = 1 S 11 = C 11 2 + C 11 C 12 − 2 C 12 2 C 11 + C 12 Y=\frac{\sigma_{xx}}{\varepsilon_{xx}}=\frac{1}{S_{11}}=\frac{C_{11}^{2}+C_{11}C_{12}-2C_{12}^{2}}{C_{11}+C_{12}} Y=εxxσxx=S111=C11+C12C112+C11C122C122
  • 材料受拉伸或压缩力时,其横向变形量与纵向变形量的比值称为泊松比,是一个无量纲的物理量 v = − ε l a t e r a l ε a x i a l v=-\frac{\varepsilon_{lateral}}{\varepsilon_{axial}} v=εaxialεlateral ε x x = S 11 σ x x ε y y = S 21 σ x x \varepsilon_{xx}=S_{11}\sigma_{xx}\quad\quad\varepsilon_{yy}=S_{21}\sigma_{xx} εxx=S11σxxεyy=S21σxx v = ε y y ε x x = S 21 S 11 = − C 12 C 11 + C 12 v=\frac{\varepsilon_{yy}}{\varepsilon_{xx}}=\frac{S_{21}}{S_{11}}=\frac{-C_{12}}{C_{11}+C_{12}} v=εxxεyy=S11S21=C11+C12C12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值