鉴于优化时间较长,本文采用杨士qi同学的仿真结果做展示。

溶液建模

水在纳米管下的流动模型将区域均分为网格,并在网格中心放置水的氧原子。$NaCl$溶液建模可以在水的模型基础上,随机选取部分网格放置等量的$Na^+,Cl^-$离子。这样选取网格位置替换的方法规避了粒子重叠的情况。

Python程序确定划分网格应考虑水分子、$Na^+$和$Cl^-$的空间大小,以最大的水分子为参考。程序缩小仿真区域大小时要谨慎选择区域边界位置,避免粒子位于边界处。

in.*.lammps 选择力势时应注意在水的模型的力势的基础上增加两种离子间和离子与其他粒子的力势;in.*.lammps 程序中分组group时应注意将离子加入待计算的组别。

pair_coeff		* 1 0.0000 0.0000	
pair_coeff		2 2 0.15535   3.166
pair_coeff		3 3 0.5000 2.4710											
pair_coeff		2 3 0.1000 2.8185	
pair_coeff		* 1 0.0000 0.0000	
pair_coeff		2 2 0.15535 3.166
pair_coeff		3 3 0.5000 2.4710											
pair_coeff		2 3 0.1000 2.8185	
pair_coeff      2 4 0.13381 2.720 
pair_coeff      2 5 0.35971 3.550 
pair_coeff      1 4 0.13381 1.310 
pair_coeff      1 5 0.35971 2.140
pair_coeff      4 4 0.02846 2.443 
pair_coeff      4 5 0.08423 2.796 
pair_coeff      5 5 0.23389 3.487  
group	   	 	  hydrogen 		type 1
group	    		oxygen 		  type 2
group	    		wall	  		type 3
group               Na          type 4
group               Cl          type 5
group				  water       union hydrogen oxygen Na Cl

lammps支持将计算结果保存,读取保存的结果并继续计算。我们将lammps程序拆成流动(加外力)和不流动两个过程(两个in文件),便于控制错误范围,缩小纠错时间(单次仿真时间比较长)。注意两次仿真结果输出应打印到不同文件名的文件。

仿真结果展示

按照网格布置各粒子。可以看到离子被正确放置。

按照网格布置各粒子。可以看到离子被正确放置。

弛豫一段时间按后,系统状态趋近于平衡态。可以看到离子位移,说明离子正收到力势作用。

弛豫一段时间按后,系统状态趋近于平衡态。可以看到离子位移,说明离子正收到力势作用。

按照网格布置各粒子。可以看到离子被正确放置。

按照网格布置各粒子。可以看到离子被正确放置。

弛豫一段时间按后,系统状态趋近于平衡态。可以看到离子位移,说明离子正收到力势作用。

弛豫一段时间按后,系统状态趋近于平衡态。可以看到离子位移,说明离子正收到力势作用。

流动效果。

流动效果。

计算msd

扩散系数正比于msd

根据仿真结果all.lammpstrjall.lammpstrj 计算msd。每个离子的计算结果打印到msd.data 文件。

程序正确读入all.lammpstrj 文件格式,可以复用计算其他物理量。程序使用字典查询指定原子,适用只追踪仿真结果中少量粒子的情况;若需追踪所有粒子,应当对所有粒子编号分配空间。

生成data.lmp 文件指定粒子信息