IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC -> 正文阅读

[游戏开发]巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

专栏浏览《LAMMPS实例教程—In文件详解》

请添加图片描述

一、What is 巨正则蒙特卡洛?

G C M C \rm GCMC GCMC 即是 G r a n d ? c a n o n i c a l ? M o n t e ? C a r l o \rm Grand\ canonical\ Monte\ Carlo Grand?canonical?Monte?Carlo,巨正则蒙特卡洛。 “ 热 浴 ” “热浴” 这个翻译我觉得很形象,手册中用的是 i m a g i n a r y ? r e s e r v o i r imaginary\ reservoir imaginary?reservoir。比如 N V T \rm NVT NVT系综,当采用 N V T \rm NVT NVT 系综控温时,可以理解为把模拟体系放在一个一定分子数、恒定温度的大热浴中,模拟体系的体积是恒定的、并且不能和大热浴交换分子。显然,根据热力学定律,达到平衡态的时候,模拟体系和热浴的温度相同,这就达到了控温的目的。

那么在GCMC中,模拟体系和一个具有一定化学式 μ \mu μ 和一定温度的大热浴接触(这里的大热浴是一个孤立系综)。同时允许模拟体系和大热浴交换粒子数。那么对于这样的开放系统,即粒子数 N N N是可以变化的,因此化学势 μ \mu μ被引入了热力学的基本方程:

d E = T d S ? P d V + μ d N dE=TdS-PdV+\mu dN dE=TdS?PdV+μdN
这里的 μ \mu μ就是化学式 C h e m i c a l ? p o t e n t i a l \rm Chemical\ potential Chemical?potential.

那么整个孤立体系(大热浴A和其中的模拟体系B)显然达到热力学平衡的时候,必须满足以下条件:

1). 温度相同: T A = T B T_{A}=T_{B} TA?=TB?
2). 压力相同: P A = P B P_{A}=P_{B} PA?=PB?
3). 化学势相同: μ A = μ B \mu_{A}=\mu_{B} μA?=μB?

显 然 化 学 势 是 对 粒 子 扩 散 趋 势 的 一 种 量 度 。 \color{red} 显然化学势是对粒子扩散趋势的一种量度。

二、 L a m m p s \rm Lammps Lammps如何实现GCMC— F i x ? G C M C \rm Fix\ GCMC Fix?GCMC

1. 核心命令详解

Lammps手册中,对GCMC命令的调用是这样的:

在这里插入图片描述
这 里 的 核 心 命 令 : \color{red} 这里的核心命令:

N : 每 多 少 步 来 调 用 一 次 , F i x ? G C M C ; \rm N :每多少步来调用一次,Fix-GCMC; NFix?GCMC
X : 每 N 步 进 行 约 X 次 的 G C M C 交 换 ; \rm X :每N步进行约X次的GCMC 交换; XNXGCMC
M : 每 N 步 进 行 尝 试 约 M 个 M C 移 动 ; \rm M:每N步进行尝试约M个MC移动; MNMMC
t y p e : 插 入 原 子 的 类 型 ; \rm type:插入原子的类型; type
s e e d : 随 机 数 种 子 ; \rm seed:随机数种子; seed
T : 上 文 提 到 的 大 热 浴 的 温 度 ; \rm T:上文提到的大热浴的温度; T
μ : 化 学 势 ; \rm \mu:化学势; μ
d i s p l a c e : M C 移 动 的 最 大 距 离 ; \rm displace:MC移动的最大距离; displaceMC
m c m o v e s : M C 移 动 中 的 原 子 比 例 ; \rm mcmoves: MC移动中的原子比例; mcmovesMC
r i g i d : F i x ? r i g i d / s m a l l 命 令 的 I D ; \rm rigid: Fix-rigid/small 命令的ID; rigid:Fix?rigid/smallID
s h a k e : f i x ? I D , f i x ? s h a k e 的 命 令 ; \rm shake: fix-ID,fix-shake的命令; shake:fix?ID,fix?shake
r e g i o n : r e g i o n ? I D 进 行 G C M C 的 区 域 ; \rm region: region-ID 进行GCMC的区域; region:region?IDGCMC
f u g a c i t y c o e f f : 逸 度 系 数 ; \rm fugacity_coeff: 逸度系数; fugacityc?oeff:
f u l l e n e r g y : 进 行 G C M C 交 换 时 计 算 体 系 总 能 量 ; \rm full_energy: 进行GCMC交换时计算体系总能量; fulle?nergy:GCMC
c h a r g e : 插 入 原 子 的 电 荷 量 ; \rm charge: 插入原子的电荷量; charge:
g r o u p : 插 入 原 子 到 哪 个 g r o u p ; \rm group: 插入原子到哪个group; group:group
g r o u p t y p e : t y p e : 插 入 原 子 的 类 型 ; \rm grouptype: type:插入原子的类型; grouptype:type
g r o u p I D 插 入 到 哪 个 g r o u p ; \rm group ID 插入到哪个group; groupIDgroup
t f a c _ i n s e r t : 按 比 例 提 高 / 降 低 插 入 原 子 的 温 度 ; \rm tfac\_insert: 按比例提高/降低插入原子的温度; tfac_insert:/
o v e r l a p _ c u t o f f : 删 除 重 叠 原 子 的 最 大 距 离 ; \rm overlap\_cutoff: 删除重叠原子的最大距离; overlap_cutoff:

关于分子模板请参考《LAMMPS 中 molecule command 的分子模板》

2. 需要注意自由度

由于体系中,允许粒子数的改变,这里需要对温度进行修正,手册中也给出了解释。
在这里插入图片描述

3. MD+MC的设置

当体系中的温度采用 F i x ? N V T Fix\ NVT Fix?NVT 进行控温时,就是一个GCMC+MD的模拟。当然NVT的温度必须设置为和GCMC中目标温度相同。同样的自由度的问题也需要修正。

在这里插入图片描述

4. t f a c _ i n s e r t \rm tfac\_insert tfac_insert 关键词的理解

这里由于插入的原子或者分子,根据系统目标来指定,并且分子是 r i g i d \rm rigid rigid,这会导致插入原子的“温度”较低。因此,需要采用一个因子: t f a c _ i n s e r t \rm tfac\_insert tfac_insert,来尽快平衡。Lammps 官方给出的案例中采用了这样的方法:

# gcmc
variable        tfac equal 5.0/3.0 # (3 trans + 2 rot)/(3 trans)
fix             mygcmc co2 gcmc 100 100 0 0 54341 ${temp} ${mu} ${disp} mol &
                co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt

# atom counts

5. 化学势 μ \rm \mu μ 的设置

根据上面的讨论我们可以看到,插入和删除原子会导致体系的化学势 μ \mu μ 和压力 p p p的改变。这里手册中对于化学势的计算是:
在这里插入图片描述
我们通过化简得到:

e μ k b T = ? P Λ 3 k b T e^{\frac{\mu}{k_bT} }=\frac{\phi P\Lambda^{3}}{k_bT} ekb?Tμ?=kb?T?PΛ3?
显然,化学势和压力存在以上的对应关系。那么在设置的时候,可以通过直接指定压力,无需设置化学势。这里在论坛中我也找到了对应的讨论可以参考。

注 意 ! ! ! \color{red} 注意!!!

指定等同於指定化學勢只對單組分系統管用。單組分系統的miu 是T和p的函數。而多組分的時候miu = f (T, p, nA, nB…)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、代码实现—GCMC甲烷和二氧化碳的竞争吸附

1. 循环不同压力的设置

#---------------------------------------------------------------------------#
#---------------------------------------------------------------------------#
# loop make all_file
echo   screen
print        " ------------------------------------------------"
print        " -----------------NOW making files---------------"
print        " ------------------------------------------------"
label  out_makefile
    variable     number_out loop 1             
    variable     file_name_out index 1  
    shell        mkdir ${file_name_out}   
    
    shell        cp CH4.txt ${file_name_out}
    shell        cp CO2.txt ${file_name_out}   
    shell        cp gra_layer.data ${file_name_out}     

    next         number_out
    next         file_name_out
    
jump         SELF  out_makefile 
clear
print        "--------------------------------------------"
print        "------------------ Finish! -----------------"
print        "--------------------------------------------"
#-----------------------------------------------------------------#
label        calculation_in_outfile
variable     loop_number_out loop 1  

variable     loop_file_out_name index 1 
shell        cd ${loop_file_out_name}
log             ${loop_file_out_name}.log

2. 物理模型构建

###################
# initial setting #
###################
#echo              screen
units             metal
dimension         3
boundary          p p p
atom_style        full
bond_style        harmonic
angle_style       harmonic


#----------------------------------------------------------#
variable          TS        equal 0.0001         ### ${TS} timestep
variable          Tdamp     equal 100*${TS}      ### ${Tdamp} Tdamp
variable          T         equal 300            ### ${T} initial temperature
variable          Height    equal 100             ### ${Height} height between two plate

variable          w_down    equal 18             ###
variable          w_up      equal 16+${Height}   ###
#----------------------------------------------------------#
region            box   block 0 100 0 100 0 100 units box

create_box        5 box                            &
                  bond/types 2                     &
                  angle/types 2                    &
                  extra/bond/per/atom 10           &
                  extra/angle/per/atom 10          &
                  extra/special/per/atom 10
                     
#----------------------------------------------------------#
read_data        gra_layer.data         &
                    add append nocoeff  &
                    group graphene_down
                    
read_data         gra_layer.data        &
                    add append nocoeff  &
                    shift 0 0 ${w_up}   &
                    group graphene_up
#----------------------------------------------------------#

# for CO2 
bond_coeff        1       0       1.16   
angle_coeff       1       0       180 


# for CH4 
bond_coeff        2  14.35   1.09
angle_coeff       2  1.517   109.5

#----------------------------------------------------------#
# setting mass
mass              1 12   # C

mass              2 16   # water-O
mass              3 1    # water-H

mass              4 12   # CH4-C
mass              5 16   # CH4-O

# make gas region
#----------------------------------------------------------#
region           gas_block block          &
                     20           80   &
                     20           80   &
                 30 70 units box 
                 
molecule        CO2  CO2.txt toff 1
create_atoms    0  random 1 12345  gas_block  mol  CO2  12345
#----------------------------------------------------------#

# make Ch4
molecule        CH4  CH4.txt toff 3 boff 1 aoff 1
#create_atoms    0  random 1 12345  gas_block  mol  CH4  55534
#----------------------------------------------------------#
###################
#  group setting  #
###################
#----------------------------------------------------------#
group             gra       type 1
group             CO_C      type 2
group             CO_O      type 3

group             CH_C      type 4
group             CH_H      type 5

group             graphene  type 1  
group             CO2       type 2 3
group             CH4       type 4 5

group             all_gas   type 2 3 4 5 


set              type     1 charge    0.0
set              type     2 charge    0.7
set              type     3 charge   -0.35

set              type     4 charge   -0.24
set              type     5 charge    0.06
#----------------------------------------------------------#
write_data 11.data
#----------------------------------------------------------#
#      graphene-1; CO_C-2; CO_O-3; CH_C-4; CH_H-5;
#----------------------------------------------------------#

3. 力场设置

#----------------------------------------------------------#
#      graphene-1; CO_C-2; CO_O-3; CH_C-4; CH_H-5;
#----------------------------------------------------------#

pair_style        lj/cut/coul/long 12
pair_modify       mix arithmetic tail yes

pair_coeff        1 1  0.003034  3.55  # gra-gra

# rigid CO2 TraPPE model 

pair_coeff        2 2  0.053649   2.8
pair_coeff        3 3  0.156973   3.05 

pair_coeff        4 4  0.002864  3.5   # CH_C CH_C
pair_coeff        5 5  0.001300  2.5   # CH_C CH_C


neigh_modify      exclude type 1 1

#--------------------------------------------------------------#

kspace_style      pppm 1.0e-5 1.0e-6

velocity          all_gas create ${T} 12345 loop local #

#minimize          1.0e-5 1.0e-7 1000 10000

neighbor        2 bin
neigh_modify    every 1 delay 10 check yes

4. MD+GCMC模拟

# rigid constraints with thermostat 
fix              CO2_nvt      CO2 rigid/nvt/small molecule temp ${T} ${T} ${Tdamp} mol CO2
fix_modify       CO2_nvt      dynamic/dof yes

# rigid constraints with thermostat 
#fix              CH4_nvt      CH4 rigid/nvt/small molecule temp ${T} ${T} ${Tdamp} mol CH4
#fix_modify       CH4_nvt      dynamic/dof yes


fix              mygcmc_CO2 CO2 gcmc 100 100 0 0 54341 ${T} 0 1 mol &
                 CO2 pressure 10 region box rigid CO2_nvt

fix              mygcmc_CH4 CH4 gcmc 100 100 0 0 12321 ${T} 0 1 mol &
                 CH4 pressure 10 region box 


compute_modify   thermo_temp dynamic/dof yes

三、全部代码

###################################################################
#             Author Email: lammps_materials@163.com              #
###################################################################
#---------------------------------------------------------------------------#
#---------------------------------------------------------------------------#
# loop make all_file
echo   screen
print        " ------------------------------------------------"
print        " -----------------NOW making files---------------"
print        " ------------------------------------------------"
label  out_makefile
    variable     number_out loop 1             
    variable     file_name_out index 1  
    shell        mkdir ${file_name_out}   
    
    shell        cp CH4.txt ${file_name_out}
    shell        cp CO2.txt ${file_name_out}   
    shell        cp gra_layer.data ${file_name_out}     

    next         number_out
    next         file_name_out
    
jump         SELF  out_makefile 
clear
print        "--------------------------------------------"
print        "------------------ Finish! -----------------"
print        "--------------------------------------------"
#-----------------------------------------------------------------#
label        calculation_in_outfile
variable     loop_number_out loop 1  

variable     loop_file_out_name index 1 
shell        cd ${loop_file_out_name}
log             ${loop_file_out_name}.log


###################
# initial setting #
###################
#echo              screen
units             metal
dimension         3
boundary          p p p
atom_style        full
bond_style        harmonic
angle_style       harmonic


#----------------------------------------------------------#
variable          TS        equal 0.0001         ### ${TS} timestep
variable          Tdamp     equal 100*${TS}      ### ${Tdamp} Tdamp
variable          T         equal 300            ### ${T} initial temperature
variable          Height    equal 100             ### ${Height} height between two plate

variable          w_down    equal 18             ###
variable          w_up      equal 16+${Height}   ###
#----------------------------------------------------------#
region            box   block 0 100 0 100 0 100 units box

create_box        5 box                            &
                  bond/types 2                     &
                  angle/types 2                    &
                  extra/bond/per/atom 10           &
                  extra/angle/per/atom 10          &
                  extra/special/per/atom 10
                     
#----------------------------------------------------------#
read_data        gra_layer.data         &
                    add append nocoeff  &
                    group graphene_down
                    
read_data         gra_layer.data        &
                    add append nocoeff  &
                    shift 0 0 ${w_up}   &
                    group graphene_up
#----------------------------------------------------------#

# for CO2 
bond_coeff        1       0       1.16   
angle_coeff       1       0       180 


# for CH4 
bond_coeff        2  14.35   1.09
angle_coeff       2  1.517   109.5

#----------------------------------------------------------#
# setting mass
mass              1 12   # C

mass              2 16   # water-O
mass              3 1    # water-H

mass              4 12   # CH4-C
mass              5 16   # CH4-O

# make gas region
#----------------------------------------------------------#
region           gas_block block          &
                     20           80   &
                     20           80   &
                 30 70 units box 
                 
molecule        CO2  CO2.txt toff 1
create_atoms    0  random 1 12345  gas_block  mol  CO2  12345
#----------------------------------------------------------#

# make Ch4
molecule        CH4  CH4.txt toff 3 boff 1 aoff 1
#create_atoms    0  random 1 12345  gas_block  mol  CH4  55534
#----------------------------------------------------------#
###################
#  group setting  #
###################
#----------------------------------------------------------#
group             gra       type 1
group             CO_C      type 2
group             CO_O      type 3

group             CH_C      type 4
group             CH_H      type 5

group             graphene  type 1  
group             CO2       type 2 3
group             CH4       type 4 5

group             all_gas   type 2 3 4 5 


set              type     1 charge    0.0
set              type     2 charge    0.7
set              type     3 charge   -0.35

set              type     4 charge   -0.24
set              type     5 charge    0.06
#----------------------------------------------------------#
write_data 11.data
#----------------------------------------------------------#
#      graphene-1; CO_C-2; CO_O-3; CH_C-4; CH_H-5;
#----------------------------------------------------------#

pair_style        lj/cut/coul/long 12
pair_modify       mix arithmetic tail yes

pair_coeff        1 1  0.003034  3.55  # gra-gra

# rigid CO2 TraPPE model 

pair_coeff        2 2  0.053649   2.8
pair_coeff        3 3  0.156973   3.05 

pair_coeff        4 4  0.002864  3.5   # CH_C CH_C
pair_coeff        5 5  0.001300  2.5   # CH_C CH_C


neigh_modify      exclude type 1 1

#--------------------------------------------------------------#

kspace_style      pppm 1.0e-5 1.0e-6

velocity          all_gas create ${T} 12345 loop local #

#minimize          1.0e-5 1.0e-7 1000 10000

neighbor        2 bin
neigh_modify    every 1 delay 10 check yes

#--------------------------------------------------------------# 


# rigid constraints with thermostat 
fix              CO2_nvt      CO2 rigid/nvt/small molecule temp ${T} ${T} ${Tdamp} mol CO2
fix_modify       CO2_nvt      dynamic/dof yes

# rigid constraints with thermostat 
#fix              CH4_nvt      CH4 rigid/nvt/small molecule temp ${T} ${T} ${Tdamp} mol CH4
#fix_modify       CH4_nvt      dynamic/dof yes


fix              mygcmc_CO2 CO2 gcmc 100 100 0 0 54341 ${T} 0 1 mol &
                 CO2 pressure 10 region box rigid CO2_nvt

fix              mygcmc_CH4 CH4 gcmc 100 100 0 0 12321 ${T} 0 1 mol &
                 CH4 pressure 10 region box 


compute_modify   thermo_temp dynamic/dof yes

#--------------------------------------------------------------#

thermo            1000   
thermo_style      custom step temp press 
variable          1000ps equal 100/${TS}

dump              123  all custom 500 dump.123   &
                  id type x y z vx vy vz fx fy fz
#--------------------------------------------------------------#                  
###################
#    run 1        #
###################     

run               ${1000ps}

#run              1
#--------------------------------------------------------------#

write_data        final.data


shell            cd ..
clear

next             loop_file_out_name
jump             SELF calculation_in_outfile

四、 L a m m p s \rm Lammps Lammps 给出的案例

# GCMC for CO2 molecular fluid, rigid/small/nvt dynamics
# Rigid CO2 TraPPE model
# [Potoff and J.I. Siepmann, Vapor-liquid equilibria of
# mixtures containing alkanes, carbon dioxide and
# nitrogen AIChE J., 47,1676-1682 (2001)].

# variables available on command line

variable        mu index -8.1
variable	disp index 0.5
variable        temp index 338.0
variable        lbox index 10.0
variable        spacing index 5.0

# global model settings

units           real
atom_style      full
boundary        p p p
pair_style      lj/cut/coul/long  14 
pair_modify     mix arithmetic tail yes
kspace_style    ewald 0.0001
bond_style      harmonic
angle_style     harmonic

# box, start molecules on simple cubic lattice

lattice 	sc ${spacing}
region          box block 0 ${lbox} 0 ${lbox} 0 ${lbox} units box
create_box      2 box                       &
                bond/types 1                &
                angle/types 1               &
                extra/bond/per/atom 2       &
                extra/angle/per/atom 1      &
                extra/special/per/atom 2
molecule        co2mol CO2.txt
create_atoms   	0 box mol co2mol 464563 units box
                        
# rigid CO2 TraPPE model 

pair_coeff      1   1  0.053649   2.8
pair_coeff      2   2  0.156973   3.05 
bond_coeff      1       0       1.16   
angle_coeff     1       0       180 

# masses

mass 1 12.0107 
mass 2 15.9994 

# MD settings

group           co2 type 1 2
neighbor        2.0 bin
neigh_modify    every 1 delay 10 check yes
velocity       	all create ${temp} 54654
timestep        1.0

# rigid constraints with thermostat 

fix             myrigidnvt co2 rigid/nvt/small molecule temp ${temp} ${temp} 100 mol co2mol

# dynamically update  fix rigid/nvt/small temperature ndof
fix_modify	myrigidnvt dynamic/dof yes

# gcmc

variable        tfac equal 5.0/3.0 # (3 trans + 2 rot)/(3 trans)
fix             mygcmc co2 gcmc 100 100 0 0 54341 ${temp} ${mu} ${disp} mol &
                co2mol tfac_insert ${tfac} group co2 rigid myrigidnvt

# atom counts

variable 	carbon atom "type==1"
variable        oxygen atom "type==2"
group 		carbon dynamic co2 var carbon
group 	        oxygen dynamic co2 var oxygen
variable        nC equal count(carbon)
variable        nO equal count(oxygen)

# output

variable	tacc equal f_mygcmc[2]/(f_mygcmc[1]+0.1)
variable	iacc equal f_mygcmc[4]/(f_mygcmc[3]+0.1)
variable	dacc equal f_mygcmc[6]/(f_mygcmc[5]+0.1)
variable	racc equal f_mygcmc[8]/(f_mygcmc[7]+0.1)

# dynamically update default temperature ndof
compute_modify  thermo_temp dynamic/dof yes

thermo_style    custom step temp press pe ke density atoms v_iacc v_dacc v_tacc v_racc v_nC v_nO
thermo          1000

# run

run             20000

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:21:40  更:2022-04-06 16:25:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:02:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码