linux电脑,并安装lammps软件
tersoff势函数
首先需要准备lammps的in文件,in文件中包含初始设置,第二部粘贴所有in文件,其中包含了变量、循环等、是做模拟需要是一点一点儿加的。其实in文件中有用的就溅射命令fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh}。
做的人员可以直接看手册中fix命令下deposit命令的各项解释。
动力学模拟生长的大致流程,1构建基底模型,我是通过atomsk软件构建的,2寻找势函数,我用的是EAM势函数,也用过tersoff势函数,EAM势函数GPU加速并不快,tersoff势函数加速可提高16倍以上。3撰写并修改in文件,其中需要考虑弛豫平衡、反弹原子删除方法(我是用的蒸发除去原子方式,就一个 evaporate命令,我的是fix 7 all evaporate 1 100 deletatom 49892)。
一下in文件循环比较多,所以有四百来行,如果不加循环,不设置变量,可能就几十行的事情。
# sample surface deposition script for atoms by zhuxuegang shijiazhuang university# --------------- VARIABLE ------------------ label loop#if you use GPU should delte the the following # 1 #suffix gpu variable tp index 273.15 373.15 273.15 423.15 683.15variable numvl index 5 7 10 13 16 19 23 25variable bxh equal '20' variable xn equal 447 variable yn equal 10 variable zn equal 30 variable btk equal 20 variable dpatomnum index 16 variable nmol index 1 7 5 3 2#substrate thickness 'btk' should larger than 3 for the fix, constant temp layer,‘nmol’molecular deposit variable vtk equal 10 # 'vtk' is the thickness of vacuum variable rneq equal 50000variable dag index 0 15 30 38 45 52 60 variable dae index 2.5 5 10 1 0.5 15 20 7.5 12.5 variable daed equal 0.0 #first of all define the variable using in the follow context #temperature tp,temperature low / high tpl / tph, boxs size and variable tpl equal 10 variable tph equal 2000#lattice constant lt variable bxl equal 0 variable lt equal 3.21 variable mgmass equal 24.30500000 ###timestep 'ts',run many timesteps to deposit atom'rneq', ###dump every many timesteps equilibrium 'dseq' and deposit 'dsdp' ###dpinter is the deposite time intervalvariable ts equal 0.001#variable rndp equal 10 variable dpinter equal '2*1000' variable rndp equal 'v_dpn*v_dpinter+v_rneq' variable dseq equal 20000 variable dsdp equal 'ceil(v_rndp/50)' #deposit atom number 'dpn', and every many timesteps to deposit 'dpts' #variable dpn equal 4000 variable dpn equal 'ceil(v_xn*v_yn*v_zn/(v_dpatomnum*v_nmol))' #deposit atom velocity basic vertical to surface with angle of 0 degree #deposit atom degree dag, deposit atom energy dae #for the symmetry system vx equal to vy so only one need to set daed is deposit energy deta# --------------- INITIALIZATION ------------------ units metal dimension 3 atom_style atomic boundary p p p # ------------------ ATOM DEFINITION ------------------- lattice hcp ${lt} variable byl equal 'ceil(v_bxl/(sqrt(3)))' variable byh equal 'ceil(v_bxh/(sqrt(3)))' variable bzl equal 'ceil(v_bxl/(sqrt(8/3)))' variable bzh equal 'v_btk+v_vtk'#region box block ${bxl} ${bxh} ${byl} ${byh} ${bzl} ${bzh} #create_box 4 boxread_data Mgpolyhole${numvl}.lmp #molecule dimer ${nmol}atoms_Nanocluster.pdbshell mkdir Mg_twin${numvl}_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} shell cd Mg_twin${numvl}_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} log log.Mg_twin${numvl}_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol}.lammpsregion bound block INF INF INF INF 0 0.6 region contemp block INF INF INF INF 0.6 1.6 region reltemp block INF INF INF INF 1.6 ${btk} region substrate union 3 bound contemp reltemp #create_atoms 1 box#variable chgz equal 'v_bzh*1.568/1.632993' #change_box all z final 0.0 ${chgz} remapgroup bound region bound group contemp region contemp group reltemp region reltemp group substrate region substrate group addatoms type 2 set group bound type 3 set group contemp type 4 # -------------------- ATOM DEFINITION---------------------- pair_style eam/fs pair_coeff * * ../Mg.eam.fs Mg Mg Mg Mg#mass 1 ${mgmass} #mass 2 ${mgmass} #mass 3 ${mgmass} #mass 4 ${mgmass}#---------------------------Settings-equilibrium------------- velocity all create ${tp} 28459timestep ${ts}thermo_style custom step elapsed atoms temp press ke pe etotal enthalpy vol density thermo 100 thermo_modify lost ignore flush yesvelocity bound set 0.0 0.0 0.0fix 1 bound setforce 0.0 0.0 0.0 fix 2 reltemp nve #fix 3 contemp npt temp ${tp} ${tp} 0.01 iso 0.0 0.0 0.1 #run ${rneq} #unfix 3shell mkdir Mg_twin${numvl}eq_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} shell cd Mg_twin${numvl}eq_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} dump 1 all custom 100 Mg_mini_twin${numvl}_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol}.* id type x y z fx fy fz vx vy vz min_style cg minimize 1e-25 1e-25 5 undump 1 #---------------------------Settings-equilibrium at nvt------------- fix 3 contemp nvt temp ${tp} ${tp} 0.010 run ${rneq} unfix 3 #---------------------------Settings-equilibrium at npt------------- fix 3 contemp npt temp ${tp} ${tp} 0.01 iso 0.0 0.0 0.1 dump 1 all custom ${dseq} Mg_twin${numvl}_eq_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol}.* id type x y z fx fy fz vx vy vz run ${rneq} unfix 3 fix 3 contemp nvt temp ${tp} ${tp} 0.010 run ${rneq} unfix 3 fix 3 contemp npt temp ${tp} ${tp} 0.01 iso 0.0 0.0 0.1 run ${rneq} shell cd .. #unfix 3 undump 1 write_restart restart.Mg_mini_twin${numvl}_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} #---------------------------deposit---------------------------- #compute add addatoms temp #compute_modify add dynamic yes extravariable x0 equal 'xlo+0.01' variable x4 equal 'xhi-0.01' variable y0 equal 'ylo+0.01' variable y4 equal 'yhi-0.01' variable z0 equal 'zhi-v_lt*1.601*6.5' variable z1 equal 'zhi-v_lt*1.601*6.5' variable x1 equal 'v_x4/4' variable y1 equal 'v_y4/4' variable x2 equal 'v_x4/2' variable y2 equal 'v_y4/2' variable x3 equal 'v_x4*3/4' variable y3 equal 'v_y4*3/4'variable x31 equal 'v_x4/3' variable y31 equal 'v_y4/3' variable x32 equal 'v_x4*2/3' variable y32 equal 'v_y4*2/3' lattice none 1.0 variable pi equal 3.979323846 variable dpvl equal 'sqrt(2*v_dae*1.6*10000/(v_mgmass*1.66053886))' variable dpvh equal 'sqrt(2*(v_dae+v_daed)*1.6*10000/(v_mgmass*1.66053886))' variable dpvzl equal '-v_dpvl*abs(cos(v_dag*v_pi/180))' variable dpvzh equal '-v_dpvh*abs(cos(v_dag*v_pi/180))' variable dpvyl equal '-v_dpvl*abs(sin(v_dag*v_pi/180))' variable dpvyh equal '-v_dpvh*abs(sin(v_dag*v_pi/180))' variable dpts equal 'floor((v_rndp-v_rneq)/v_dpn)'variable zdell equal 'zhi-v_lt-0.5' variable zdelh equal 'zhi-v_lt+0.5' region deletatom block ${x0} ${x4} ${y0} ${y4} ${zdell} ${zdelh}fix 5 addatoms nve run 0#compute addtp addatoms temp #compute_modify addtp dynamic yes extra 0 #variable addtpc equal 'c_addtp' #compute realtp reltemp temp #compute_modify realtp dynamic yes extra 0 #variable realtpc equal 'c_realtp'#compute addke addatoms ke #compute_modify addke dynamic yes extra 0 #variable addkec equal 'c_addke' compute atallke all ke/atom #variable atallkec equal 'c_atallke' #compute ctat all centro/atom hcp #variable ctatc equal 'c_ctat' compute atpe all pe/atom #variable atpec equal 'c_atpe'compute peratom all stress/atom NULL fix peratom all ave/atom 1 1000 ${dsdp} c_peratom[*] fix atallke all ave/atom 1 1000 ${dsdp} c_atallke fix atpe all ave/atom 1 1000 ${dsdp} c_atpe compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol)variable xlong equal 'xhi - xlo' variable ylong equal 'yhi - ylo' variable zlong equal 'zhi - zlo'variable st equal step variable t equal temp variable p equal press variable v equal vol #fix pr addatoms print 1 '${st} ${t} ${p} ${press} ${xlong} ${ylong} ${zlong} ${v}' title 'step temp press v_press x y z vol' append press${numvl}.txt screen no #compute allpe all reduce sum c_adpe#compute addpe addatoms pe/atom #compute_modify addpe dynamic yes extra 0 #variable addpec equal 'c_addpe' #compute adallpe addatoms reduce sum c_addpe #variable adallpec equal 'c_adallpe'#variable dppz equal xcm(addatoms,z) #variable dppx equal xcm(addatoms,x) #variable dppy equal xcm(addatoms,y) #variable dpatn equal count(addatoms)#fix pr addatoms print 100 ' ${dppx} ${dppy} ${dppz} ${addtpc} ${addkec} ${adallpec} ${realtpc}' title 'add_pos_x add_pos_y add_pos_z addtemp add_ke add_pe realtemp' append ke${dae}ag${dag}temp${tp}.txt screen no #label loop fix 7 all evaporate 1 100 deletatom 49892shell mkdir Mg_twin${numvl}_dp_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} shell cd Mg_twin${numvl}_dp_e${dae}_ag${dag}_temp${tp}_dpatom${dpatomnum}_mol${nmol} dump 1 all custom ${dsdp} Mg_twin${numvl}_dp_e${dae}_ag${dag}_temp${tp}_mol${nmol}.* id type x y z & fx fy fz vx vy vz f_atallke f_atpe& c_peratom[1] c_peratom[2] c_peratom[3] c_peratom[4] c_peratom[5] c_peratom[6] & f_peratom[1] f_peratom[2] f_peratom[3] f_peratom[4] f_peratom[5] f_peratom[6] # run ${rndp}if '${dpatomnum} ==1' then 'jump SELF dpatom1' if '${dpatomnum} ==4' then 'jump SELF dpatom4' if '${dpatomnum} ==8' then 'jump SELF dpatom8' if '${dpatomnum} ==9' then 'jump SELF break' if '${dpatomnum} ==16' then 'jump SELF dpatom16'label dpatom1 region deposit1 block ${x0} ${x4} ${y0} ${y4} ${z0} ${z1} fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} run ${rndp} shell cd .. unfix dp1 jump SELF breaklabel dpatom4 region deposit1 block ${x0} ${x2} ${y0} ${y2} ${z0} ${z1} region deposit2 block ${x2} ${x4} ${y0} ${y2} ${z0} ${z1} region deposit3 block ${x0} ${x2} ${y2} ${y4} ${z0} ${z1} region deposit4 block ${x2} ${x4} ${y2} ${y4} ${z0} ${z1}fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp2 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit2 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp3 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit3 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp4 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit4 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh}run ${rndp} shell cd .. unfix dp1 unfix dp2 unfix dp3 unfix dp4 jump SELF breaklabel dpatom8 region deposit1 block ${x0} ${x1} ${y0} ${y2} ${z0} ${z1} region deposit2 block ${x1} ${x2} ${y0} ${y2} ${z0} ${z1} region deposit3 block ${x2} ${x3} ${y0} ${y2} ${z0} ${z1} region deposit4 block ${x3} ${x4} ${y0} ${y2} ${z0} ${z1} region deposit5 block ${x0} ${x1} ${y2} ${y4} ${z0} ${z1} region deposit6 block ${x1} ${x2} ${y2} ${y4} ${z0} ${z1} region deposit7 block ${x2} ${x3} ${y2} ${y4} ${z0} ${z1} region deposit8 block ${x3} ${x4} ${y2} ${y4} ${z0} ${z1}fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp2 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit2 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp3 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit3 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp4 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit4 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp5 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit5 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp6 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit6 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp7 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit7 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp8 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit8 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh}run ${rndp} shell cd .. unfix dp1 unfix dp2 unfix dp3 unfix dp4 unfix dp5 unfix dp6 unfix dp7 unfix dp8 jump SELF breaklabel dpatom9 region deposit1 block ${x0} ${x31} ${y0} ${y31} ${z0} ${z1} region deposit2 block ${x31} ${x32} ${y0} ${y31} ${z0} ${z1} region deposit3 block ${x32} ${x4} ${y0} ${y31} ${z0} ${z1} region deposit4 block ${x0} ${x31} ${y31} ${y32} ${z0} ${z1} region deposit5 block ${x31} ${x32} ${y31} ${y32} ${z0} ${z1} region deposit6 block ${x32} ${x4} ${y31} ${y32} ${z0} ${z1} region deposit7 block ${x0} ${x31} ${y32} ${y4} ${z0} ${z1} region deposit8 block ${x31} ${x32} ${y32} ${y4} ${z0} ${z1} region deposit9 block ${x32} ${x4} ${y32} ${y4} ${z0} ${z1}fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp2 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit2 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp3 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit3 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp4 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit4 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp5 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit5 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp6 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit6 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp7 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit7 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp8 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit8 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp9 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit9 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh}run ${rndp} shell cd .. unfix dp1 unfix dp2 unfix dp3 unfix dp4 unfix dp5 unfix dp6 unfix dp7 unfix dp8 unfix dp9 jump SELF break label dpatom16 region deposit1 block ${x0} ${x1} ${y0} ${y1} ${z0} ${z1} region deposit2 block ${x1} ${x2} ${y0} ${y1} ${z0} ${z1} region deposit3 block ${x2} ${x3} ${y0} ${y1} ${z0} ${z1} region deposit4 block ${x3} ${x4} ${y0} ${y1} ${z0} ${z1} region deposit5 block ${x0} ${x1} ${y1} ${y2} ${z0} ${z1} region deposit6 block ${x1} ${x2} ${y1} ${y2} ${z0} ${z1} region deposit7 block ${x2} ${x3} ${y1} ${y2} ${z0} ${z1} region deposit8 block ${x3} ${x4} ${y1} ${y2} ${z0} ${z1} region deposit9 block ${x0} ${x1} ${y2} ${y3} ${z0} ${z1} region deposit10 block ${x1} ${x2} ${y2} ${y3} ${z0} ${z1} region deposit11 block ${x2} ${x3} ${y2} ${y3} ${z0} ${z1} region deposit12 block ${x3} ${x4} ${y2} ${y3} ${z0} ${z1} region deposit13 block ${x0} ${x1} ${y3} ${y4} ${z0} ${z1} region deposit14 block ${x1} ${x2} ${y3} ${y4} ${z0} ${z1} region deposit15 block ${x2} ${x3} ${y3} ${y4} ${z0} ${z1} region deposit16 block ${x3} ${x4} ${y3} ${y4} ${z0} ${z1} fix dp1 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit1 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp2 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit2 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp3 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit3 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp4 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit4 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp5 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit5 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp6 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit6 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp7 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit7 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp8 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit8 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp9 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit9 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp10 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit10 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp11 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit11 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp12 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit12 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp13 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit13 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp14 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit14 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp15 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit15 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} fix dp16 addatoms deposit ${dpn} 2 ${dpts} 12345 region deposit16 near ${lt} vz ${dpvzl} ${dpvzh} vy ${dpvyl} ${dpvyh} #run 20000 #unfix pr run ${rndp} shell cd .. unfix dp1 unfix dp2 unfix dp3 unfix dp4 unfix dp5 unfix dp6 unfix dp7 unfix dp8 unfix dp9 unfix dp10 unfix dp11 unfix dp12 unfix dp13 unfix dp14 unfix dp15 unfix dp16 jump SELF breaklabel break #shell cd ..#unfix 7 #if '${dpatn} >= ${dpn}' then 'jump SELF break' #jump SELF loop #label break run ${rneq} write_restart restart.Mg_twin${numvl}_dp_e${dae}_ag${dag}_temp${tp}_mol${nmol}.depositundump 1 #unfix 7shell cd .. clear #next tp #jump SELF loop #clear #next dag #jump SELF loop #clear next dae jump SELF loop clear next numvl jump SELF loop clear #next dpatomnum #jump SELF loop #clear #next nmol #jump SELF loop #clearprint 'All done'
相关文献已发表三篇,以四川大学为通讯单位,感兴趣的可以去查查,如果你采用本in文件或部分内容,希望你找到文献引用,在此不再贴出。
data文件和EAM势函数或其他势函数文件需要自己提前准备。建议使用atomsk来做