创建一个刚性多孔膜、两个活塞以及两个包含溶剂溶质的容器组成的模型。
物质的宏观性质来自于避免坍塌的短程原子排斥和保持物质凝聚的长程引力之间的平衡。为研究真实系统的特性而开发的理论模型通常将这两个效应作为单独的部分。其中一个著名的模型是**Lennard–Jones(LJ)**势。近年来,LJ模型被广泛用于描述分子间的相互作用。因此,整个系统采用 LJ势来进行模拟。
#初始参数设置
units lj #lj无单位
dimension 3 #模拟维度
boundary s p p #设置边界条件,x方向非周期性收缩,yz方向周期性
atom_style atomic #原子类型
#模型建立
lattice fcc 1
region box block -23 23 -5 5 -5 5 #定义box区域
create_box 5 box #设置box区域有5种原子
region piston_left block -21 -20 INF INF INF INF #活塞左区域
region fluid_left block -18 -2 INF INF INF INF #流体左区域
region membrane block -0.25 0.25 INF INF INF INF #膜区域
region fluid_right block 2 18 INF INF INF INF #流体右区域
region piston_right block 20 21 INF INF INF INF #活塞右区域
create_atoms 1 region piston_left #活塞左区域生成类型1原子
create_atoms 2 region membrane #膜区域生成类型2原子
create_atoms 3 region piston_right #活塞右生成类型3原子
create_atoms 4 random 1000 674514 fluid_left #流体左区域随机生成1000个类型4原子,随机种子674514
create_atoms 4 random 550 674514 fluid_right #流体右区域随机生成550个类型4原子,随机种子674514
create_atoms 5 random 50 424514 fluid_right #流体右区域随机生成50个类型5原子,随机种子424514
mass * 1 #所有原子质量为1
#力场设置
pair_style lj/cut 2.5 #lj/cut势
pair_coeff 1*3 1*3 1.0 1.0 #固体-固体
pair_coeff 4 4 1.0 1.0 1.0 #溶剂-溶剂
pair_coeff 5 5 2.0 3.0 #溶质-溶质
pair_coeff 1*3 4 0.8 1 #固体-溶剂
pair_coeff 2 5 0.1 3.0 #膜-溶质
#能量最小化
dump 1 all atom 1 mini.lammpstrj #每1步保存原子位置相关信息
thermo 10 #每10步输出热力学信息
min_style cg #以cg法进行能量最小化
minimize 1e-4 1e-6 1000 10000 #能量容差,力容差,最大迭代次数,最大评估次数
write_data all.data pair ij #保存能量最小化后的模型,pair ij 每个lj原子类型写一行对系数信息
模型展示如下图:
在整个弛豫阶段,使整个系统保持nve系综,将多孔膜和活塞固定,但允许活塞在X方向运动,并向活塞施加力来压缩流体。
#初始模型构建
units lj #无单位
dimension 3 #维度
boundary s p p #边界条件
pair_style lj/cut 2.5
read_data all.data #读取模型
#原子分组
region right block 0 INF INF INF INF INF #定义多孔膜右侧区域
group solid type 1 2 3 #固体原子组
group piston_right type 3 #活塞右原子组
group piston_left type 1 #活塞左原子组
group membrane type 2 #膜原子组
group fluid type 4 5 #流体原子组
group solvent type 4 #溶剂原子组
group solute type 5 #溶质原子组
#邻居列表
neigh_modify exclude group solid solid #不考虑固体原子对之间的成对相互作用
neigh_modify every 1 delay 5 check yes #每1步建立邻居列表,延迟5步,需检查
#速度初始化
velocity fluid create 1.0 4928459 mom yes rot yes dist gaussian
#流体原子组初始温度1.0,线动量和角动量为零,呈高斯分布
fix 1 all nve #所有原子nve系综
compute temp_fluid fluid temp #计算流体原子组的温度
fix 2 fluid langevin 1.0 1.0 0.1 1530917 zero yes
#流体原子组使用郎之万法控温,初始温度1.0,结束温度1.0,阻尼系数0.1,总随机力为零
fix_modify 2 temp temp_fluid #fix为2中温度为流体原子组的温度
fix 3 membrane setforce 0 0 0 #膜原子组受力为零
fix 4 piston_left setforce NULL 0 0 #活塞原子组yz方向受力为0,不改变x方向受力
fix 5 piston_right setforce NULL 0 0
variable F equal 0.025 #定义平均力
fix 6 piston_left aveforce ${F} NULL NULL #活塞原子组x方向平均力为F,不改变yz方向受力
fix 7 piston_right aveforce -${F} NULL NULL
#输出信息
variable solvent_right equal count(solvent,right) #right区域中属于solvent组的原子数
variable solute_right equal count(solute,right) #right区域中属于solute组的原子数
variable x_piston_left equal xcm(piston_left,x) #活塞左原子组x方向质心位置
variable x_piston_right equal xcm(piston_right,x) #活塞右原子组x方向质心位置
fix 01 all ave/time 1000 1 1000 v_solvent_right file solvent_right.dat
#每1000步使用输入值,使用输入值计算平均值一次,每1000步计算平均值
fix 02 all ave/time 1000 1 1000 v_solute_right file solute_right.dat
fix 03 all ave/time 1000 1 1000 v_x_piston_left file x_piston_left.dat
fix 04 all ave/time 1000 1 1000 v_x_piston_right file x_piston_right.dat
dump 1 all atom 1000 nve.lammpstrj #每1000保存原子相关信息
thermo 10000 #每10000步输出
thermo_modify temp temp_fluid #流体原子组温度
timestep 0.005 #时间步长,1fs
run 500000
write_data out.data pair ij #保存模型,pair ij 每个lj原子类型写一行对系数信息
模型弛豫结果展示:
下图分别为左右活塞在弛豫阶段的位置变化图,从图中可以看到,随着弛豫时间增加,左右活塞位置变化减小,左右活塞逐渐达到平衡状态。
#初始模型构建
units lj #无单位
dimension 3 #维度
boundary s p p #边界条件
pair_style lj/cut 2.5
read_data out.data #读取模型
#原子分组
region right block 0 INF INF INF INF INF #定义多孔膜右侧区域
group solid type 1 2 3 #固体原子组
group piston_right type 3 #活塞右原子组
group membrane type 2 #膜原子组
group fluid type 4 5 #流体原子组
group solvent type 4 #溶剂原子组
group solute type 5 #溶质原子组
#邻居列表
neigh_modify exclude group solid solid #不考虑固体原子对之间的成对相互作用
neigh_modify every 1 delay 5 check yes #每1步建立邻居列表,延迟5步,需检查
#先将50%膜原子替换为其他原子,再删除原子,(50%之后可以替换为10% 30% 70% 90%)
region membrane block -0.25 0.25 INF INF INF INF #定义膜区域
set type 2 type/ratio 1 0.5 482793 #将类型2原子随机50%替换为类型1原子,便于删除
group mem_region region membrane #将膜区域原子定义为mem_region组
group piston_left type 1 #活塞左原子组
group delete_atom intersect mem_region piston_left #待删除原子组delete_atom
delete_atoms group delete_atom #删除原子
fix 1 all nve #所有原子nve系综
compute temp_fluid fluid temp #计算流体原子组的温度
fix 2 fluid langevin 1.0 1.0 0.1 1530917 zero yes
#流体原子组使用郎之万法控温,初始温度1.0,结束温度1.0,阻尼系数0.1,总随机力为零
fix_modify 2 temp temp_fluid #fix为2中温度为流体原子组的温度
fix 3 membrane setforce 0 0 0 #膜原子组受力为零
fix 4 piston_left setforce NULL 0 0 #活塞原子组yz方向受力为0,不改变x方向受力
fix 5 piston_right setforce NULL 0 0
variable F equal 0.025 #定义平均力
fix 6 piston_left aveforce ${F} NULL NULL #活塞原子组x方向平均力为F,不改变yz方向受力
fix 7 piston_right aveforce -${F} NULL NULL
#输出信息
variable solvent_right equal count(solvent,right) #right区域中属于solvent组的原子数
variable solute_right equal count(solute,right) #right区域中属于solute组的原子数
variable x_piston_left equal xcm(piston_left,x) #活塞左原子组x方向质心位置
variable x_piston_right equal xcm(piston_right,x) #活塞右原子组x方向质心位置
fix 01 all ave/time 10000 1 10000 v_solvent_right file solvent_right.dat
#每10000步使用输入值,使用输入值计算平均值一次,每10000步计算平均值
fix 02 all ave/time 10000 1 10000 v_solute_right file solute_right.dat
fix 03 all ave/time 10000 1 10000 v_x_piston_left file x_piston_left.dat
fix 04 all ave/time 10000 1 10000 v_x_piston_right file x_piston_right.dat
fix 05 all ave/time 10 1000 10000 f_3[1] file force_membrane.dat #输出膜原本受力数据
dump 1 all atom 10000 dump.lammpstrj #每1000保存原子相关信息
thermo 10000 #每10000步输出
thermo_modify temp temp_fluid #流体原子组温度
timestep 0.005 #时间步长,1fs
run 2000000
模拟结果展示:
**删除50%的膜原子后,对系统进行弛豫,得到以下结果,后续可以尝试删除10%、30%、70%、90%**的膜原子进行模拟。左图为左活塞在弛豫阶段的位置变化图,右图为膜右侧的溶剂原子数量变化图。