文章引用

The effects of size and shape on the structural and thermal stability of platinum nanoparticles .pdf

建模

设置基本参数units为metal(对与金属固体,粒子类型默认是atomatic),设置基本参数boundary为ppp,即周期性边界条件,设置基本参数临近列表的外壳层厚度为2(单位:埃)

FCC类型的晶格,其晶格常数设置为3.61。(FCC:就是立方体模型,立方体的6个面各有9个原子,体中心有1个原子),设置202020的模拟盒子,里面全是原子。从文章中知道,纳米颗粒体系是2~20nm,约400~5000个原子,在这个模拟盒子中,金属纳米颗粒有800多个。

lammps程序编译

# nanoparticle melt
# 基本参数
units           metal		# 使用金属单位
boundary        p p p       # 周期性边界条件(x,y,z)
atom_style      atomic      # 对于金属固体,默认设置为atomic原子类型
timestep        0.001       # 时间步长设置为0.001ps
neighbor        2.0 bin     # 临近列表的外壳层厚度设置为2,style的位置一般是bin(一种计算模式)
neigh_modify    every 1 delay 0    #每隔多少步重新构建临近原子列表

variable		T0 equal 2.5	 # 定义温度变量T0为2.5
variable    T1 equal 2000	 # 定义温度变量T1为2000

# 模型
lattice         fcc 3.61		# 定义FCC类型的晶格,其晶格常数设置为3.61
region          box block 0 20 0 20 0 20 units box		# 创建仿真区域,确定模拟盒子的大小
create_box      1 box		 # 创建一个包含一个原子类型的模拟盒子
create_atoms    1 box		 # 在盒子中创建原子

# 热力学
thermo          100			# 每隔100步输出一次热力学信息
thermo_style    custom step temp vol pe ke		# 输出步数step、温度temp、体积vol、势能pe、动能ke

# 原子与原子间的相互作用
pair_style      eam			# 调用EAM 势函数(它通常用于描述金属原子间的相互作用,将每个原子的能量分解为两部分:原子之间的相互作用能和原子周围电子密度对原子的影响)
pair_coeff      * * Cu_u3.eam        # * * 是设置系统中所有类型的原子之间的相互作用参数;提供文件(.eam),其中包括EAM势函数需要的参数,该文件应与本代码文件(.lmp)放入一个文件夹

# 温度初始化
velocity        all create ${T0} 114514 dist gaussian  # velocity:初始化速度,对速度创建随机数seed=114514,gaussian:符合高斯分布(在温度T0下)

# 为了方便计算机模拟,搞的极小化能量算法,可以去掉
minimize        1e-4 1e-6 1000 1000		# 极小化能量
# 1e-4:在最小化过程中,LAMMPS 将尝试使系统中所有原子 受到的力 都小于这个值。
# 1e-6:在最小化过程中,LAMMPS 将尝试使系统中所有原子的 位移 都小于这个值。
# 第一个1000:最大迭代次数;第二个1000:每次迭代时,为了找到最佳的步长,最多进行 1000 次尝试。

# 熔化
dump			1 all custom 100 all.lammpstrj id type x y z		# dump  1:将系统中的数据输出(输出格式:自定义为custom)到文件1。每100步将所有原子的位置信息(all.lammpstrj id type x y z)写入文件。

fix             nvt all nvt temp ${T0} ${T0} 0.01		# 将系统固定在NVT(恒V恒T)系综中(nvt all),维持温度为T0~T0(nvt temp ${T0} ${T0}),热阻0.01
run             10000		# 运行10000步
unfix           nvt			# 运行结束后,取消在NVT系综固定

change_box      all x scale 4 y scale 4 z scale 4			# 改变仿真区域大小为其4倍,以便熔化后V膨胀(主要是之前我们定义boundary是p)

	#熔化·升温
fix             nvt all nvt temp ${T0} ${T1} 0.2		# 温度从T0变化到T1,热阻0.2
run             120000
unfix           nvt

	#熔化·恒温
fix             nvt all nvt temp ${T1} ${T1} 0.01
run             120000
unfix           nvt
	#熔化·降温
fix             nvt all nvt temp ${T1} ${T0} 0.1
run             480000
unfix           nvt
	#熔化·恒温
fix             nvt all nvt temp ${T0} ${T0} 0.01
run             10000
unfix           nvt

compute         1 all msd		#计算(compute的ID=1)所有原子的 位移的均方根
fix             msd1 all ave/time 10 100 1000 c_1[1] c_1[2] c_1[3] c_1[4] # file msd1
# fix msd1 表示 将计算结果输出到msd1文件中
# 每隔 10 步计算一次 MSD,每次计算使用最近 100 步的数据,并且在运行了 1000 步之后开始计算
# 计算MSD 的时间步数c_1[1]、x 方向的 MSD c_1[2]、y 方向的 MSD c_1[3]、z 方向的 MSD c_1[4],
# file msd1意味着输出到文件(msd1),如果不这样的话,将只会出现在.lammps文件中,当然,这条命令与fix msd1重复

write_restart 	rst.nanoparticle		 # 将当前状态写入restart文件
write_data    	rst.nanoparticle.lmp		# 将 当前原子的数据 写入数据文件

然后在同一个文件夹里,放入eam的参数文件,使用powershell(按住shift+鼠标右键),运行mpiexec -np 8 lmp -in xxx.lmp 。

等待系统运算,结束后关闭powershell,按windows+Q,查找OVITO软件,打开。将刚刚运行出来的all.lammpstrj文件拖入OVITO。

程序书写中犯的小错误

结果展示

Untitled

上图是T=0时刻的纳米粒子模型,可见有864个原子,是FCC类型的立方体,将整个盒子(白线框)占满了。

Untitled

先恒温100个时间步长,这是第99帧的情况,可见粒子已经在立方体中无规则运动起来,并满足一定的热力学关系。

Untitled

然后进行升温,升温之前我们将盒子扩大为原来的4倍,就是考虑到纳米粒子体系的膨胀与周期性边界条件(ppp)的冲突,另外整个过程都是固定在模拟盒子nvt体系下的。(前面已经说过,npt体系下,扩大盒子造成的真空区域也会被纳入恒压体系,造成整个体系成为单质,这就不是我们想要的金属纳米颗粒体系了)

Untitled