lammps案例:晶界形成过程模拟

分享一个金属晶界生成的lammps模拟代码,主要原理是生成不同取向的两部分晶体,通过能量最小化得到晶界结构。
在这里插入图片描述
in文件代码:

# LAMMPS Input File for Grain Boundaries 
# Mark Tschopp, Dec2009 
# This file will generate numerous input files for LAMMPS 
# using a large number of grain boundaries 

# ---------- Setup Variables --------------------- 
variable etol equal 1.0e-25 
variable ftol equal 1.0e-25 
variable maxiter equal 5000 
variable maxeval equal 10000 
variable latparam equal 2.855312 
variable minimumenergy equal -4.122435 
variable overlapboth equal 1 
variable gbname index Fe_100STGB1 
variable counter equal 0 
variable inc equal "v_latparam / 6" 

# Insert x,y,z sizes in LU and calculate in Angstroms 
variable xsize1 equal "sqrt(0^2 + 2^2 + 1^2)" 
variable zsize1 equal "sqrt(1^2 + 0^2 + 0^2)" 
variable xsize2 equal "sqrt(0^2 + 2^2 + -1^2)" 
variable zsize2 equal "sqrt(1^2 + 0^2 + 0^2)" 
if "${xsize1} <= ${xsize2}" then "variable xsize equal ${xsize1}" else "variable xsize equal ${xsize2}" 
if "${zsize1} <= ${zsize2}" then "variable zsize equal ${zsize1}" else "variable zsize equal ${zsize2}" 
variable xlen equal "v_xsize * v_latparam" 
variable zlen equal "v_zsize * v_latparam" 
 
# Determine number of increments for displacement grid in the in-plane GB directions 
variable xinc equal "floor(v_xlen / v_inc)" 
variable zinc equal "floor(v_zlen / v_inc)" 
 
# Implement overlap criterion 
variable overlapinc equal 86 
 
# ---------- Define loops for simulation ---------------------  
label loopa 
variable a loop ${xinc} 
variable tx equal "(v_a-1) / v_xinc * v_xsize" 
label loopb 
variable b loop ${zinc} 
variable tz equal "(v_b-1) / v_zinc * v_zsize" 
label loopd 
variable d loop ${overlapboth} 
label loopc 
variable c loop ${overlapinc} 
variable overlapdist equal "(0.275 + 0.005 * (v_c-1))*v_latparam" 
 
# ---------- Calculate counter and create data directory --------------------- 
variable ctemp equal ${counter}+1 
variable counter equal ${ctemp} 
variable ctemp delete 
print "Counter: ${counter}" 
shell mkdir ${gbname} 

# ---------- Initialize Simulation --------------------- 
clear 
units metal 
dimension 3 
boundary p p p 
atom_style atomic 

# ---------- Create Atomistic Structure --------------------- 
lattice bcc ${latparam} 
region whole block 0.000000 6.384672 -121.308763 121.308763 0.000000 2.855312 units box 
create_box 2 whole 
region upper block INF INF 0.000000 121.308763 INF INF units box 
lattice bcc ${latparam} orient x  0  2  1 orient y  0 -1  2 orient z  1  0  0 
create_atoms 1 region upper 
region lower block INF INF -121.308763 0.000000 INF INF units box 
lattice bcc ${latparam} orient x  0  2 -1 orient y  0  1  2 orient z  1  0  0 
create_atoms 2 region lower 
group upper type 1 
group lower type 2  

# ---------- Define Interatomic Potential --------------------- 
pair_style eam/fs 
pair_coeff * * /cavs/cmd/data1/users/mtschopp/LAMMPS/lammps-12Nov09/potentials/Fe_2.eam.fs Fe Fe 
neighbor 2.0 bin 
neigh_modify delay 10 check yes 
 
# ---------- Displace atoms and delete overlapping atoms --------------------- 
displace_atoms upper move ${tx} 0 ${tz} units lattice 
if "$d == 1" then "delete_atoms overlap ${overlapdist} lower upper" 
if "$d == 2" then "delete_atoms overlap ${overlapdist} upper lower" 
if "$c == 1" then "variable atomprev equal 1" 
variable natoms equal "count(all)" 
print "Previous: ${atomprev}, Present: ${natoms}" 
if "${atomprev} == ${natoms}" then "jump GB_Fe_100STGB1.in loopend" 
 
# ---------- Define Settings --------------------- 
compute csym all centro/atom 
compute eng all pe/atom 
compute eatoms all reduce sum c_eng 

# ---------- Run Minimization --------------------- 
reset_timestep 0 
thermo 10 
thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms
min_style cg 
minimize ${etol} ${ftol} ${maxiter} ${maxeval} 

# ---------- Run Minimization 2--------------------- 
# Now allow the box to expand/contract perpendicular to the grain boundary
reset_timestep 0 
thermo 10 
thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms 
fix 1 all box/relax aniso NULL 0.0 NULL vmax 0.001
min_style cg 
minimize ${etol} ${ftol} ${maxiter} ${maxeval} 
 
# ---------- Calculate GB Energy --------------------- 
variable esum equal "v_minimumenergy * count(all)" 
variable xseng equal "c_eatoms - (v_minimumenergy * count(all))" 
variable gbarea equal "lx * lz * 2" 
variable gbe equal "(c_eatoms - (v_minimumenergy * count(all)))/v_gbarea" 
variable gbemJm2 equal ${gbe}*16021.7733 
variable gbernd equal round(${gbemJm2}) 
print "After third minimization:" 
print "GB energy is ${gbemJm2} mJ/m^2" 
 
# Store number of atoms for overlap criterion, i.e., do not rerun equivalent configurations 
variable atomprev equal "v_natoms" 
 
# ---------- Dump data into Data file ------------- 
shell cd Fe_100STGB1 
reset_timestep 0 
timestep 0.001 
velocity all create 20 95812384 
fix 2 all npt 1 1 100 xyz 0 0 100 drag 0.2 
dump 1 all custom 1000 dump.${counter}_${gbernd} id type x y z c_csym c_eng 
run 0 
shell cd .. 
 
# ---------- End of loop structure ------------- 
label loopend 
next c 
jump GB_Fe_100STGB1.in loopc 
variable c delete 
next d 
jump GB_Fe_100STGB1.in loopd 
variable d delete 
next b 
jump GB_Fe_100STGB1.in loopb 
variable b delete 
next a 
jump GB_Fe_100STGB1.in loopa 
print "All done"

更多lammps代码请关注微信公众号:lammps加油站
在这里插入图片描述

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lammps加油站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值